Running Go binary into Docker
We will see how to run api_get.go into a Docker, this go file make a get into an API, that API provides a JSON with a cat information, this get will execute in loop every 4 seconds and after will write into a log. We will use docker-volume to view the log in our machine.
The binary will execute when the container is up, and will finish the execution only when the container stops.
- We need to compile the .go main file, for compile we need to have installed go in our computer.
go build api_get.go
- We will create a Dockerfile, in this case we will use a docker image Ubuntu, because if we use go docker image, we can’t do http.get because this image don’t have the library system for to do this. And the other reason is that we compile the go binary before.
FROM ubuntu RUN mkdir ./logs/ RUN chmod 777 ./logs/ RUN apt-get update RUN apt-get install ca-certificates -y RUN update-ca-certificates COPY api_get /go/bin/ WORKDIR /go/bin/ CMD ["/go/bin/api_get"]
- When we have the Dockerfile, we will create the docker-compose.yaml, this file will contain the configuration of directory logs and the name of the image. The directory log, will create in your current directory when you start the Docker image.
version: '3.3' services: myapp: container_name: docker-api build: . image: docker-api volumes: - ./logs_api/:/go/bin/logs/
- In this case, we will mount a Docker Volume, configured with docker-compose, because we want to see the log that API generates.
- When we have all installed and configured we will build the image with command docker-compose, the parameter -f is for specifying the compose file.
docker-compose -f docker-compose.yml build
With this command, we create a docker image. And before we need to start the image. With the parameter -d we put the container in background.
docker-compose up -d
For know if container api-docker is running.
This binary will execute when the container starts, when this happens this will do infinite requests every 4 seconds, and this will stop when the container stops.