https://github.com/water25234/Golang-Gin-Framework/blob/master/go.mod
https://dev.to/umschaudhary/blog-project-with-go-gin-mysql-and-docker-part-1-3cg1
https://sharmahimanshu1911.medium.com/golang-gin-mysql-in-docker-compose-869ca2b9b875
Dockerfile :
FROM : FROM refers which base image to use for the container. The golang:1.16 image is a Linux-based image which has golang installed and no other additional programs or software.
WORKDIR : WORKDIR Changes the working directory. In our case to /app. It sets a working directory for subsequent commands.
ADD : ADD instruction literally copies the file from one location to another.
ADD [SOURCE] [DESTINATION]
is the syntax of the command. Similary, there is also a COPY command for similar purpose. Here, we are copying the go.sum and go.mod file first so that we will have all the libraries installed before copying all the files.RUN : RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile.
EXPOSE : EXPOSE instructs that services running on Docker container is available in port 8000.
ENTRYPOINT : Entrypoint runs the command inside the container once a container is created from an image. You can only have one Entrypoint instruction in a
Dockerfile
. If multiple Entrypoint instructions are used, the last one will be executed. Here, once the container is created, the Entrypoint command will run our golang project.
Docker Compose file
version ‘3’: Docker compose version, Latest is 3.7
services: The services section defines all the different containers that are to be created. We have two services namely,
web
anddb
.web: This is the name of our Gin app service. It can be anything. Docker Compose will create containers with this name.
build: This clause specifies the Dockerfile location.
.
represents the current directory where the docker-compose.yml file is located and Dockerfile is used to build an image and run the container from it. We can also enter a path to Dockerfile there.ports: The ports clause is used to map or expose the container ports to the host machine. Here mapping port
"8000:8000"
, so that we can access our services on8000
port of host machine.volumes: Here, we are attaching our code files directory to the containers, ./app directory so that we don’t have to rebuild the images for every change in the files. This will also help in auto-reloading the server when running in debug mode.
links: Links literally links one service to another. Here, we are linking the database container to the web container, so that our web container can reach the database in the bridge network. (Networking alert !!). Please if you want to learn about network in docker in detail do refer to : Network containers
image: If we don’t have a Dockerfile and want to run a service directly using an already built image, we can specify the image location using the ‘image’ clause. Compose will pull the image and fork a container from it. In our case We mentioned mysql/mysql-server:5.7 to our database service
environment: Any environment variable that needs to be set up in the container can be created using the ‘environment’ clause.
FROM golang:alpine
RUN mkdir /app
WORKDIR /app
ADD go.mod .
ADD go.sum .
RUN go mod download
ADD . .
RUN go get github.com/githubnemo/CompileDaemon
EXPOSE 8000
ENTRYPOINT CompileDaemon --build="go build main.go" --command=./main
version: '3'
services:
db:
image: mysql/mysql-server:5.7
ports:
- "3305:3306"
environment:
- "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
- "MYSQL_USER=${DB_USER}"
- "MYSQL_PASSWORD=${DB_PASSWORD}"
- "MYSQL_DATABASE=${DB_NAME}"
web:
build: .
ports:
- "8000:8000"
volumes:
- ".:/app"
depends_on:
- db
links:
- "db:database"
No comments:
Post a Comment