Docker Basic

Muhammad Tri Wibowo
2 min readNov 23, 2023

example docker file

FROM golang:alpine

RUN apk update && apk add git

WORKDIR /app

COPY . .
#COPY go.mod /app/go.mod
#COPY main.go /app/main.go

RUN go mod tidy
RUN go build -o binary

ENTRYPOINT["./binary"]

BUILD

docker build . -t my-app-image
docker build . -t bowo/my-app-image

BUILD USING TAG

docker build . -t my-app-image:v1
docker build . -t bowo/my-app-image:v1

IMAGE LS

docker image ls -a

IMAGE REMOVE

docker image rm -f <image_id>

RUN IMAGE AS CONTAINER

docker run -i -t -e PORT=8080 my-app-image

RUN IMAGE EQUAL COMMAND

docker container create -it -e PORT=8080 --name containerku my-app-image
docker container start containerku

RUN IMAGE AS CONTAINER DETACHED

docker run -itd -e PORT=8080 my-app-image

EXPOSE PORT

docker run -it -e PORT=8080 -p 5000:8080 my-app-image

CONTAINER LS

docker container ls -a

CONTAINER STOP

docker container stop <container_id>

CONTAINER REMOVE + FORCE

docker container rm -f <container_id>

BUILD ARGUMENTS

FROM golang:alpine

RUN apk update && apk add git

ARG DEFAULT_PORT

ENV PORT=${DEFAULT_PORT}

WORKDIR /app

COPY . .
#COPY go.mod /app/go.mod
#COPY main.go /app/main.go

RUN go mod tidy
RUN go build -o binary

ENTRYPOINT["./binary"]
docker build . -t my-app-image --build-arg DEFAULT_PORT=8080

DOCKER LOGS

docker logs <container_id>

DOCKER PUSH

docker push brainplusplus/my-app-image:latest

DOCKER PULL

docker pull brainplusplus/my-app-image:latest

DOCKER MARIADB

DOCKER PULL MARIADB

docker pull mariadb

DOCKER RUN MARIADB

docker run -itd --name some-mariadb -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=yes -p 3306:3306 mariadb

DOCKER RUN MARIADB WITH VOLUME

docker run -itd --name some-mariadb -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=yes -v c:/Users/brainplusplus/Desktop/mariadb-data:/var/lib/mysql -p 3306:3306 mariadb 

RUN SHELL IN CONTAINER

docker exec -it <container_id> sh

RUN MYSQL CLIENT IN CONTAINER

docker exec -it <container_id> mysql

NETWORK

NETWORK CREATE

docker network create my-network

NETWORK RM

docker network rm my-network

NETWORK LS

docker network ls

ASSIGN NETWORK IN CONTAINER

docker run -it --rm --network my-network --name some-mariadb -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=yes -v c:/Users/brainplusplus/Desktop/mariadb-data:/var/lib/mysql -p 3306:3306 mariadb

DOCKER COMPOSE

create folder orchestrator

mkdir orchestrator

move folder golang project into folder orchestrator

mv <your_project_path_with_dockerfile> orchestrator

create file docker-compose.yml on root folder orchestrator

touch docker-compose.yml

fill in on file docker-compose.yml

versions: '3.7'

services:
service-hello-world-v2:
build: ./hello-world-v2/
environtment:
- PORT=8082
- MYSQL_CONN_STRING=root@tcp(service-mariadb:3306)/hello_world?parseTime=true
ports:
- 8083:8082
networks:
- my-network
depends_on:
- service-mariadb

service-mariadb:
image: mariadb:latest
environtment:
- MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=yes
ports:
- 3306
volumes:
- c:/Users/brainplusplus/Desktop/mariadb-data:/var/lib/mysql
networks:
- my-network

networks:
my-network:

build docker compose

docker-compose build

and then

docker-compose up -d

to stop using this command

docker-compose down

--

--