Docker quick start
Overview
Useful docker commands
1docker run (-d) - Run a command in a new container
2docker attach - Attach to a running container
3docker start - Start one or more stopped containers
4docker stop - Stop one or more running containers
5docker ps -a - List containers
6docker images - List images
7docker inspect - Return low-level information on Docker objects
8docker top - Display the running processes of a container
9docker stats - Display a live stream of container(s) resource usage statistics
10docker logs - Fetch the logs of a container
11docker pull - Pull an image or a repository from a registry
Containers Management:
1docker image ls
2docker image pull nginx
3docker image inspect 08393e824c3
4docker container run busybox
5docker container ls -a
6docker container run -P -d nginx
7docker container port 55590ea1f3b4
8docker container ps
9docker container inspect 030f0f31e94b
10docker container top 030f0f31e94b
11docker container attach 030f0f31e94b
12docker container exec -it 030f0f31e94b /bin/bash
13docker container exec -it 030f0f31e94b ls /usr/share/nginx/
14docker container rm -f 030f0f31e94b
15
16docker container run -d nginx
17docker container run -it nginx /bin/bash
18docker container exec -it ad8b407b51de ls /usr/share/nginx/
19
20docker stop $(docker ps -a -q)
21docker rm $(docker ps -a -q)
22docker container run -d --expose 3000 -p 80:3000 nginx
23docker container run -d --expose 3000 -p 8080:80 nginx
24docker container port 0b45e49dd5f3
25docker container run -d -p 8081:80/tcp -p 8081:80/udp nginx
Networking Commands
1docker network ls
2docker network inspect bridge
3docker network create br0
4docker network rm br0
5docker container run -d --name network-test -p 8081:80 nginx
6docker network connect br1 network-test
7docker network disconnect
8docker network create -d bridge --internal localhost
9docker network connect <NETWORK> <CONTAINER> # adding contaner to a network
10
11docker network create --subnet 10.1.0.0/24 --gateway 10.1.0.1 br2
12docker network create --subnet 10.1.0.0/16 --gateway 10.1.0.1 --ip-range=10.1.4.0/24 --driver=bridge --label=host4network br4
13docker container run -d --name network-test02 --ip 10.1.4.102 --network br4 nginx
Storage
Volume Commands
/var/lib/docker/volumes
1docker volume create Create a volume
2docker volume inspect Display detailed information on one or more volumes
3docker volume ls List volumes
4docker volume prune Remove all unused local volumes
5docker volume rm Remove one or more volumes
6
7docker volume create test-volume1
8docker volume inspect test-volume1
9docker volume rm test-volume1
10docker volume prune !!!
Bind Mounts:
1docker container run -d --name nginx-bind-mount1 --mount type=bind,source=/root/dir1,target=/app nginx
Volumes for Persistent Storage:
1docker volume create volume3
2docker container run -d --name nginx-volume3 --mount type=volume,source=volume3,target=/usr/share/nginx/html/ nginx
3docker volume inspect volume3
4sudo ls /var/snap/docker/common/var-lib-docker/volumes/volume3/_data
5
6docker container run -d --name nginx-volume3 --mount type=volume,source=volume3,target=/usr/share/nginx/html,readonly nginx #readonly
Dockerfile & Building Images
Best practices for writing Dockerfiles
- keep containers as ephemeral as possible
- follow principle 6 of the 12 factor app
- avoid including unnecessary file
- use .dockerignore
- use multi-storage builds
- decouple applications
- minimize the number of layers
- sort multi-line arguments
- leverage the build cache
More info: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
- FROM creates a layer from the ubuntu:18.04 Docker image.
- COPY adds files from your Docker client’s current directory.
- RUN builds your application with make.
- CMD specifies what command to run within the container.
Examples
1# syntax=docker/dockerfile:1
2FROM ubuntu:18.04
3COPY . /app
4RUN make /app
5CMD python /app/app.py
1# syntax=docker/dockerfile:1
2FROM node:12-alpine
3RUN apk add --no-cache python g++ make
4WORKDIR /app
5COPY . .
6RUN yarn install --production
7CMD ["node", "src/index.js"]
1docker image build -t 'testapp:v1' .
Using Environment Variables:
1 # Create an image
2 FROM node
3 LABEL org.label-schema.version=v1.1
4
5 ENV NODE_ENV="development"
6 ENV PORT 3000
7
8 RUN mkdir -p /var/node
9 ADD src/ var/node/
10 WORKDIR /var/note
11 RUN npm install
12 EXPOSE $PORT
13 CMD .bin/www
1docker container run -d --name appName-dev -p 8082:3001 --env PORT=3001 test/web-app:v2
2docker container run -d --name appName-dev -p 8082:3001 --env PORT=3001 --env NODE_ENV=prod test/web-app:v2
Some others commands:
History:
1docker image history node:latest
Having Containers Start Automatically
1docker container run -d --name container_10.2 --restart always centos /bin/bash
Docker Events
1docker system events
2docker system events --filter type=container --since '1h'
Managing Stopped Container
1docker container ls -a -q -f status=exited