Loading...
Loading…
Loading…
Categories
Popular tags
Dockerfile, CLI commands, docker-compose, volumes, and networks
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o server .
FROM alpine:3.19
RUN adduser -D appuser
USER appuser
COPY --from=builder /app/server /server
EXPOSE 8080
CMD ["/server"]FROM image:tag # base image
WORKDIR /app # set working directory
COPY src dest # copy files from host
ADD src dest # like COPY but also handles URLs & .tar
RUN command # run during build
CMD ["cmd", "arg"] # default command (can be overridden)
ENTRYPOINT ["cmd"] # fixed executable
ENV KEY=value # set environment variable
ARG NAME=default # build-time variable
EXPOSE 8080 # document port (does not publish)
VOLUME ["/data"] # create mount point
LABEL key="value" # metadatadocker run -d -p 8080:8080 --name api myimage # run detached
docker run -it ubuntu bash # interactive shell
docker run --rm myimage # remove after exit
docker start/stop/restart container_name
docker pause/unpause container_name
docker rm container_name # remove stopped
docker rm -f container_name # force remove running
docker ps # list running
docker ps -a # list alldocker build -t myapp:1.0 . # build
docker build --no-cache -t myapp . # build without cache
docker build --target builder -t myapp . # multi-stage: specific stage
docker images # list images
docker rmi image_id # remove image
docker pull nginx:alpine # pull from registry
docker push registry/myapp:tag # push to registry
docker tag myapp registry/myapp:latest # tag image
docker inspect image_id # full metadatadocker logs container_name # view logs
docker logs -f container_name # follow (tail -f)
docker logs --tail 100 container_name # last 100 lines
docker exec -it container_name bash # shell into running container
docker exec container_name env # run command in container
docker cp container:/path/file . # copy file from container
docker stats # live resource usage
docker inspect container_name # full details# Volumes
docker volume create mydata
docker volume ls
docker volume rm mydata
docker run -v mydata:/app/data myimage # named volume
docker run -v $(pwd):/app myimage # bind mount
# Networks
docker network create mynet
docker network ls
docker run --network mynet myimage
docker network connect mynet container_name
docker network inspect mynet# docker-compose.yml
version: '3.9'
services:
api:
build: .
ports: ["8080:8080"]
environment:
- DB_URL=postgres://user:pass@db:5432/mydb
depends_on: [db]
volumes: ["./config:/app/config"]
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes: ["pgdata:/var/lib/postgresql/data"]
volumes:
pgdata:docker compose up -d # start in background
docker compose up --build # rebuild and start
docker compose down # stop and remove containers
docker compose down -v # also remove volumes
docker compose logs -f api # follow service logs
docker compose exec api bash # shell into service
docker compose ps # list service status
docker compose restart api # restart one service
docker compose pull # pull latest imagesdocker system prune # remove all stopped containers, unused images
docker system prune -a # also remove unused images (not just dangling)
docker container prune # remove stopped containers
docker image prune # remove dangling images
docker volume prune # remove unused volumes
docker network prune # remove unused networks