docker images
docker run busybox:latest echo "hello world"
docker run -i -t busybox:latest
docker run -d busybox:latest sleep 1000
docker ps
docker ps -a
docker run --rm busybox:latest sleep 1 // remove the container when the execution is done
docker run --name hello busybox:latest
docker inspect container_id // show description of the container/image
docker run -it --rm -p 8888:8080 tomcat:9.0 // -p host_port:container_port
docker run -it -d -p 8888:8080 tomcat:9.0 // run it in the backend
docker logs container_id // check logs
docker rm container_id
docker stop $(docker ps -a -q)
docker images
docker rmi image_id
docker run -it debian:jessie
docker commit container_id repository_name:tag // after make some change in the container, you can commit it to repository. this is the first approach to build a new docker image.
// The second approach to build docker image
FROM debian:jessie
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y vim
docker build -t xxx/debian . // -t means tag
Each RUN command will create an image, so we need to improve the Dockerfile
FROM debian:jessie
RUN apt-get update && apt-get install -y \
git \
python \
vim
// Best practice is to sort multi-line arguments alphanumerically
CMD instruction specifies what command you want to run when the container starts up.
If we don't specify CMD instruction in the Dockerfile, Docker will use the default command defined in the base image.(in this case, the default command is bash)
FROM debian:jessie
RUN apt-get update && apt-get install -y \
git \
vim
CMD["echo", "hello docker"]
// when this container starts up, it will execute echo "hello docker"
// we can overwrite the CMD command in docker run
Docker Cache // if the instruction doesn't change, docker will simply reuse the existing layer.
//Aggressive caching
FROM ubuntu:14:04
RUN apt-get update
RUN apt-get install -y git
if there is another Dockerfile
FROM ubuntu:14:04
RUN apt-get update // it will reuse cache and will not update timely
RUN apt-get install -y curl
// Solution 1: Chain Instructions
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y \
git \
curl
// Solution 2: Specify --no-cache option
docker build -t xxx/debian . --no-cache=true
COPY instruction
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y \
git \
curl
COPY 123.txt /src/123.txt
ADD instruction
ADD can copy files and download a file to the container.
ADD also has the ability to unpack compressed files.
The rule is: use COPY first, unless you are sure you need ADD.
Avoid using latest tag.
docker tag image_id xxx/debian:1.01
docker login --username=xxx
docker push xxx/debian:1.01
docker exec -it container_id bash // run command in the running container
docker ps // docker container ls
docker container ls -a
docker stop container_name
docker start container_name
docker restart container_name
Docker container links
docker run -d -p 5000:5000 --link redis dockerapp:v0.3
docker-composite version
docker-composite up -d // -d run in backend
docker-composite ps
docker-composite logs
docker-composite logs container_name
docker-composite stop
docker-composite rm
docker-composite build // force to rebuild all images
Docker Networking
closed network/none network
bridge network
host network
overlay network
docker network ls
docker run -d --net none busybox sleep 1000
docker exec -it container_id /bin/ash
docker network inspect bridge
docker run -d --name container_1 busybox sleep 1000
docker exec -it container_1 ifconfig
docker run -d --name container_2 busybox slep 1000
docker exec -it container_2 ifconfig
docker exec -it container_1 ping 172.17.0.3 // be able to connect to container_2
docker exec -it container_1 ping 8.8.8.8
docker network create --driver bridge my_bridge_network
docker network inspect my_bridge_network
docker run -d --name container_3 --net my_bridge_network busybox sleep 1000
docker exec -it container_3 ifconfig
docker exec -it container_3 ping 172.17.0.2 // ping container_1
docker network connect bridge container_3 // add eth to container_3
docker exec -it container_3 ifconfig
docker exec -it container_3 ping 172.17.0.3
docker network disconnect bridge container_3 // remove eth
docker exec -it container_3 ifconfig
bridge network, container have access to two network interfaces 1. loopback interface 2. private interface
all containers in the same bridge network can communicate with each other
containers from different bridge networks can't connect with each other by default // but can connect/disconnect to certain custom bridge
Host network(have full access to the host's interface)(minimum network security leve)(higher level of performance)
docker run -d --name container_4 --net host busybox sleep 1000
docker exec -it container_4 ifconfig // show all eth of the host network
Overlay network在多个docker宿主机之间创建一个分布式网络
supports multi-host networking out-of-the-box
docker-compose up -d
docker network ls
docker-compose down
网友评论