Harry
coding_knowladge
Docker Commands
and Operations
1. Basic Docker Commands
● Check Docker version: docker --version
● Display system-wide information: docker info
● List available Docker commands: docker
● Display Docker disk usage: docker system df
● Show Docker system information: docker system info
2. Image Management
● List local images: docker images
● Pull an image: docker pull ubuntu:latest
● Remove an image: docker rmi ubuntu:latest
● Remove all unused images: docker image prune -a
● Search Docker Hub for images: docker search nginx
● Build an image from Dockerfile: docker build -t myapp:1.0 .
● Tag an image: docker tag myapp:1.0 myrepo/myapp:1.0
● Push an image to registry: docker push myrepo/myapp:1.0
● Save image to tar archive: docker save -o myapp.tar myapp:1.0
● Load image from tar archive: docker load -i myapp.tar
● Show image history: docker history myapp:1.0
● Inspect an image: docker inspect myapp:1.0
● List image layers: docker image inspect myapp:1.0 --format
'{{.RootFS.Layers}}'
Remove all dangling images: docker image prune
●
Remove all unused images: docker image prune -a
●
3. Container Management
● Run a container: docker run -d --name mycontainer nginx
● List running containers: docker ps
● List all containers (including stopped): docker ps -a
● Stop a container: docker stop mycontainer
● Start a stopped container: docker start mycontainer
● Restart a container: docker restart mycontainer
● Remove a container: docker rm mycontainer
● Remove all stopped containers: docker container prune
● Force remove a running container: docker rm -f mycontainer
● Run a command in a running container: docker exec -it mycontainer
/bin/bash
● Attach to a running container: docker attach mycontainer
● Copy files from container to host: docker cp mycontainer:/app/file.txt
/host/path/
Copy files from host to container: docker cp /host/path/file.txt
●
mycontainer:/app/
Show container logs:
● docker logs mycontainer
● Follow container logs: docker logs -f mycontainer
● Show container resource usage: docker stats mycontainer
● Rename a container: docker rename oldname newname
● Create a new image from container changes: docker commit mycontainer
mynewimage:1.0
● Export a container's filesystem: docker export mycontainer >
mycontainer.tar
● Import a container filesystem: docker import mycontainer.tar
mynewimage:1.0
4. Networking
● List networks: docker network ls
● Create a network: docker network create mynetwork
● Remove a network: docker network rm mynetwork
● Connect a container to a network: docker network connect mynetwork
mycontainer
● Disconnect a container from a network: docker network disconnect
mynetwork mycontainer
● Inspect a network: docker network inspect mynetwork
● Remove all unused networks: docker network prune
● Create a bridge network: docker network create --driver bridge
mybridgenetwork
● Create an overlay network: docker network create --driver overlay
myoverlaynetwork
Create a macvlan network: docker network create -d macvlan
●
--subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 mymacvlan
5. Volumes
● List volumes: docker volume ls
● Create a volume: docker volume create myvolume
● Remove a volume: docker volume rm myvolume
● Inspect a volume: docker volume inspect myvolume
● Remove all unused volumes: docker volume prune
● Create a container with a volume: docker run -v myvolume:/app nginx
● Create a container with a bind mount: docker run -v
/host/path:/container/path nginx
● Create a tmpfs mount: docker run --tmpfs /app/temp nginx
6. Dockerfile Commands
● Set base image: FROM ubuntu:20.04
● Run a command: RUN apt-get update && apt-get install -y nginx
● Copy files: COPY app/ /app/
● Set working directory: WORKDIR /app
● Set environment variable: ENV NODE_ENV=production
● Expose a port: EXPOSE 80
● Set default command: CMD ["nginx", "-g", "daemon off;"]
● Set entry point: ENTRYPOINT ["nginx"]
● Add metadata: LABEL version="1.0" description="My nginx container"
● Add health check: HEALTHCHECK CMD curl --fail http://localhost || exit 1
● Set user: USER nginx
● Add build argument: ARG VERSION=1.0
● Use build argument: ENV VERSION=${VERSION}
●
Set volume: VOLUME /app/data
●
Add file from URL: ADD https://example.com/file.txt /app/
●
Set shell: SHELL ["/bin/bash", "-c"]
●
Use multi-stage build: FROM build-stage AS build ... FROM runtime-stage
7. Docker Compose
● Run services: docker-compose up
● Run services in detached mode: docker-compose up -d
● Stop services: docker-compose down
● List services: docker-compose ps
● View service logs: docker-compose logs
● Execute command in service: docker-compose exec web /bin/bash
● Build services: docker-compose build
● Pull service images: docker-compose pull
● Scale a service: docker-compose up -d --scale web=3
● Show composition configuration: docker-compose config
● Validate composition file: docker-compose config -q
● Run a one-off command: docker-compose run web npm test
● Force recreate containers: docker-compose up --force-recreate
● Stop and remove containers: docker-compose down --rmi all --volumes
● View network settings: docker-compose network ls
8. Docker Swarm
● Initialize a swarm: docker swarm init
● Join a swarm as a worker: docker swarm join --token <worker-token>
<manager-ip>:<port>
Join a swarm as a manager:
● docker swarm join --token <manager-token>
<manager-ip>:<port>
● List nodes in swarm: docker node ls
● Create a service: docker service create --name myservice nginx
● List services: docker service ls
● Scale a service: docker service scale myservice=5
● Update a service: docker service update --image nginx:1.19 myservice
● Remove a service: docker service rm myservice
● View service logs: docker service logs myservice
9. Docker Stack
● Deploy a stack: docker stack deploy -c docker-compose.yml mystack
● List stacks: docker stack ls
● List services in a stack: docker stack services mystack
● List tasks in a stack: docker stack ps mystack
● Remove a stack: docker stack rm mystack
10. Docker Registry
● Log in to a registry: docker login myregistry.azurecr.io
● Log out from a registry: docker logout myregistry.azurecr.io
● Tag image for registry: docker tag myimage:1.0
myregistry.azurecr.io/myimage:1.0
● Push image to registry: docker push myregistry.azurecr.io/myimage:1.0
● Pull image from registry: docker pull myregistry.azurecr.io/myimage:1.0
11. Docker System
● Remove unused data: docker system prune
● Remove all unused data: docker system prune -a
● Show Docker disk usage: docker system df
● Show real-time events: docker system events
● Show Docker version and info: docker system info
12. Docker Context
● List contexts: docker context ls
● Create a new context: docker context create mycontext
● Use a context: docker context use mycontext
● Inspect a context: docker context inspect mycontext
● Remove a context: docker context rm mycontext
13. Docker Security
● View security options: docker info --format '{{.SecurityOptions}}'
● Run a container with security options: docker run
--security-opt="apparmor=unconfined" nginx
● Enable user namespace remapping: dockerd --userns-remap="default"
● Run container with read-only root filesystem: docker run --read-only
nginx
● Run container with dropped capabilities: docker run --cap-drop ALL nginx
14. Docker Plugins
● List plugins: docker plugin ls
● Install a plugin: docker plugin install vieux/sshfs
● Enable a plugin: docker plugin enable vieux/sshfs
● Disable a plugin: docker plugin disable vieux/sshfs
● Remove a plugin: docker plugin rm vieux/sshfs
15. Docker Buildx
● List buildx builders: docker buildx ls
● Create a new builder: docker buildx create --name mybuilder
● Use a builder: docker buildx use mybuilder
● Build and push multi-platform image: docker buildx build --platform
linux/amd64,linux/arm64 -t myimage:1.0 --push .
● Inspect builder: docker buildx inspect
16. Docker Performance
● View container stats: docker stats
● Limit container CPU: docker run --cpus=".5" nginx
● Limit container memory: docker run --memory=512m nginx
● Set container CPU priority: docker run --cpu-shares=512 nginx
● Limit container IO: docker run --device-write-bps /dev/sda:1mb nginx
17. Docker Debugging
● View container processes: docker top mycontainer
● Inspect container changes: docker diff mycontainer
● View image layers: docker history myimage:1.0
● Debug a container with strace: docker run --cap-add=SYS_PTRACE
--security-opt seccomp=unconfined myimage strace -f -p 1
● Get a core dump from a container: docker run --ulimit core=-1
--security-opt seccomp=unconfined myimage
18. Docker Configuration
● Configure default address pools: dockerd --default-address-pool
base=172.80.0.0/16,size=24
● Configure log driver: dockerd --log-driver json-file --log-opt
max-size=10m --log-opt max-file=3
● Configure registry mirrors: dockerd --registry-mirror
https://mirror.gcr.io
● Configure insecure registries: dockerd --insecure-registry 10.0.0.0/24
● Configure Docker daemon with config file: echo '{"debug": true}' >
/etc/docker/daemon.json
19. Docker Storage Drivers
● Use overlay2 storage driver: dockerd --storage-driver=overlay2
● Use devicemapper storage driver: dockerd --storage-driver=devicemapper
● Configure devicemapper options: dockerd --storage-opt
dm.thinpooldev=/dev/mapper/thin-pool
● Configure overlay2 options: dockerd --storage-opt
overlay2.override_kernel_check=true
20. Docker Networking Advanced
● Create an ipvlan network: docker network create -d ipvlan
--subnet=192.168.1.0/24 -o ipvlan_mode=l2 ipvlannet
● Create a user-defined bridge network with subnet: docker network create
--subnet 172.18.0.0/16 customnet
● Configure DNS for a container: docker run --dns 8.8.8.8 nginx
● Add extra hosts to a container: docker run --add-host
host.docker.internal:host-gateway nginx
● Use host networking: docker run --network host nginx
● Use container networking: docker run --network container:mycontainer
nginx
21. Docker API
● Get Docker version via API: curl --unix-socket /var/run/docker.sock
http://localhost/version
● List containers via API: curl --unix-socket /var/run/docker.sock
http://localhost/containers/json
● Create a container via API: curl -X POST --unix-socket
/var/run/docker.sock -H "Content-Type: application/json" -d
'{"Image":"nginx"}' http://localhost/containers/create
● Start a container via API: curl -X POST --unix-socket
/var/run/docker.sock http://localhost/containers/{id}/start
Stop a container via API: curl -X POST --unix-socket /var/run/docker.sock
●
http://localhost/containers/{id}/stop
22. Docker Content Trust
● Enable Docker Content Trust: export DOCKER_CONTENT_TRUST=1
● Sign an image: docker trust sign myregistry.azurecr.io/myimage:1.0
● Add a signer: docker trust signer add --key cert.pem myname
myregistry.azurecr.io/myimage
● View signature information: docker trust inspect
myregistry.azurecr.io/myimage:1.0
● Remove signature: docker trust revoke myregistry.azurecr.io/myimage:1.0
23. Docker Secrets (Swarm mode)
● Create a secret: printf "mysecret" | docker secret create mysecret -
● List secrets: docker secret ls
● Use secret in a service: docker service create --name myservice --secret
mysecret nginx
● Remove a secret: docker secret rm mysecret
24. Docker Configs (Swarm mode)
● Create a config: docker config create myconfig config.json
● List configs: docker config ls
● Use config in a service: docker service create --name myservice --config
myconfig nginx
● Remove a config: docker config rm myconfig
25. Docker Healthchecks
● Add healthcheck to Dockerfile: HEALTHCHECK --interval=30s --timeout=10s
CMD curl -f http://localhost/ || exit 1
● Run container with custom healthcheck: docker run --health-cmd="curl -f
http://localhost/ || exit 1" --health-interval=30s nginx
● View container health status: docker inspect
--format='{{.State.Health.Status}}' mycontainer
26. Miscellaneous
● Get container IP address: docker inspect -f '{{range
.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mycontainer
● Get container environment variables: docker exec mycontainer env
● Get container mounted volumes: docker inspect -f '{{range
.Mounts}}{{.Source}} -> {{.Destination}}{{end}}' mycontainer
● Run a container with a specific hostname: docker run --hostname=myhost
nginx
● Set container DNS search domains: docker run --dns-search=example.com
nginx
● Limit container logging: docker run --log-opt max-size=10m --log-opt
max-file=3 nginx
● Override entrypoint: docker run --entrypoint /bin/bash nginx
27. Docker Experimental Features
● Enable experimental features: export DOCKER_CLI_EXPERIMENTAL=enabled
● Use squash option in build: docker build --squash -t myimage:1.0 .
● Use buildkit: DOCKER_BUILDKIT=1 docker build -t myimage:1.0 .
● Use checkpoint feature: docker checkpoint create mycontainer checkpoint1
● Restore from checkpoint: docker start --checkpoint checkpoint1
mycontainer
28. Docker Bench Security
● Run Docker Bench Security: docker run -it --net host --pid host --userns
host --cap-add audit_control -v /var/lib:/var/lib -v
/var/run/docker.sock:/var/run/docker.sock -v
/usr/lib/systemd:/usr/lib/systemd -v /etc:/etc --label
docker_bench_security docker/docker-bench-security
29. Docker Resource Constraints
195. Limit CPU usage: docker run --cpus=0.5 nginx
196. Set CPU shares: docker run --cpu-shares=512 nginx
197. Limit memory usage: docker run --memory=512m nginx
198. Set memory reservation: docker run --memory-reservation=256m nginx
199. Limit swap usage: docker run --memory-swap=1g nginx
200. Set kernel memory limit: docker run --kernel-memory=50m nginx
30. Docker Logging
● Use json-file logging driver: docker run --log-driver json-file nginx
● Use syslog logging driver: docker run --log-driver syslog nginx
● Set log rotation: docker run --log-opt max-size=10m --log-opt max-file=3
nginx
● Use gelf logging driver: docker run --log-driver gelf --log-opt
gelf-address=udp://1.2.3.4:12201 nginx
31. Docker Manifest
● Create and push a manifest list: docker manifest create
myrepo/myimage:latest myrepo/myimage:v1-linux-amd64
myrepo/myimage:v1-linux-arm64
● Push a manifest list: docker manifest push myrepo/myimage:latest
● Inspect a manifest: docker manifest inspect myrepo/myimage:latest
32. Docker Context
● Create a new context: docker context create my-context --docker
"host=ssh://user@host"
● Use a specific context: docker --context my-context ps
● List available contexts: docker context ls
33. Docker Buildx (Advanced)
● Create a new builder instance: docker buildx create --name mybuilder
--driver docker-container
● Use the new builder: docker buildx use mybuilder
● Build for multiple platforms: docker buildx build --platform
linux/amd64,linux/arm64,linux/arm/v7 -t myrepo/myimage:latest .
34. Docker Compose with Swarm
● Deploy a stack with compose file: docker stack deploy -c
docker-compose.yml mystack
● List stacks: docker stack ls
● List services in a stack: docker stack services mystack
● Remove a stack: docker stack rm mystack
35. Docker Stats and Monitoring
● View real-time container stats: docker stats
● View stats for specific containers: docker stats container1 container2
● Format stats output: docker stats --format "table
{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
36. Advanced Network Operations
● Create an overlay network for swarm: docker network create --driver
overlay myoverlaynet
Create a macvlan network: docker network create -d macvlan
●
--subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 mymacvlan
Disconnect a container from a network: docker network disconnect
●
mynetwork mycontainer
● Prune unused networks: docker network prune
37. Docker System Commands
● View system-wide information: docker system info
● Show docker disk usage: docker system df
● Remove unused data: docker system prune --volumes
38. Miscellaneous Advanced Operations
● Create a docker hub repository: docker run --rm -it
xd20110642/dockerhub-cli create myrepo
● Set up docker content trust: export DOCKER_CONTENT_TRUST=1
● Use multi-stage builds to optimize image size: FROM build-image AS build
... FROM runtime-image
● Use BuildKit's new frontend: #syntax=docker/dockerfile:1.2
● Use heredoc syntax in Dockerfile (requires BuildKit): RUN <<EOF ... EOF
● Use SSH forwarding in builds: RUN --mount=type=ssh ssh-add /path/to/key