1.新建并启动容器
docker run [option] images [command][arg] #根据镜像新建容器并运行。如果本地没有镜像则从docker hub上拉取。
--name 为容器指定名称。
-d 后台运行容器,并返回容器id
-i 交互模式运行容器,通常与 -t同时用
-t 为容器分配伪输入终端。
-P 随机端口映射
-p 指定端口映射,有以下四种格式
ip:hostport:ContainerPort
ip::containerPort
HostPort:ContainerPort
ContainerPort
docker run centos #创建/运行/退出容器
docker run -t centos #创建容器,并进入伪终端,但不能操作。ctrl+c 退出,容器不退出。
docker run -it centos
docker run -it --name mycentos centos
docker run -d centos #以后台进程方式创建容器并运行,但因为没有可交互的前台进程,所以又被立刻终止。故docker ps 看不到。
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest a55fbf438dfd 8 days ago 95MB mysql latest 7bb2586065cd 8 days ago 477MB nginx latest 2bcb04bdb83f 8 days ago 109MB centos latest 9f38484d220f 2 weeks ago 202MB hello-world latest fce289e99eb9 3 months ago 1.84kB docker run -it 9f38484d220f #启动交互式容器 [root@8e0ffee781f1 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 02:23 pts/0 00:00:00 /bin/bash root 16 1 0 02:23 pts/0 00:00:00 ps -ef [root@8e0ffee781f1 /]# exit exit [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e0ffee781f1 9f38484d220f "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago pensive_lumiere 3af63c5c69c6 hello-world "/hello" 42 hours ago Exited (0) 42 hours ago pensive_dubinsky [root@localhost ~]# docker rename 8e0ffee781f1 mycentos [root@localhost ~]# docker start mycentos mycentos [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e0ffee781f1 9f38484d220f "/bin/bash" 40 minutes ago Up 6 seconds mycentos [root@localhost ~]# docker stats mycentos CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 8e0ffee781f1 mycentos 0.00% 380KiB / 991.2MiB 0.04% 656B / 0B 0B / 0B 1 [root@localhost ~]# docker top mycentos UID PID PPID C STIME TTY TIME CMD root 4675 4659 0 10:44 pts/0 00:00:00 /bin/bash [root@localhost ~]# docker attach mycentos 不关容器,安全退出: ctrl +p ctrl+q [root@localhost ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e0ffee781f1 9f38484d220f "/bin/bash" 3 hours ago Up 2 hours mycentos [root@localhost ~]# docker images centos REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 9f38484d220f 2 weeks ago 202MB [root@localhost ~]# docker run -it --name mycentos01 centos #重新打开一个容器,并命名为mycentos01 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed1315df6320 centos "/bin/bash" About a minute ago Up About a minute mycentos01 8e0ffee781f1 9f38484d220f "/bin/bash" 3 hours ago Up 2 hours mycentos
2.列出容器
docker ps -a 显示当前或曾经打开的容器
docker ps -l 显示上一次运行的容器
docker ps -n 3 显示上3次运行的容器
docker ps -ql 只显示上一次运行的容器ID
3.退出容器
exit #退出并关闭容器
ctrl+p,crl+q #退出但不关闭容器
4.停止容器
docker stop 容器 ID或name
docker stop -t n 容器 ID或name # Seconds to wait for stop before killing it (default 10) 杀掉容器前等待多少秒(默认10s)
直接关闭
docker kill 容器 ID或name
[root@localhost ~]# docker stop mycentos mycentos01 #同时停止多个容器 mycentos mycentos01 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4.启动容器
docker start 容器 ID或name
docker restart 容器 ID或name
[root@localhost ~]# docker start mycentos mycentos01 mycentos mycentos01 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed1315df6320 centos "/bin/bash" 9 minutes ago Up 36 seconds mycentos01 8e0ffee781f1 9f38484d220f "/bin/bash" 3 hours ago Up 36 seconds mycentos
5.重启容器
docker restart 容器 ID或name
6.删除停止运行的容器
docker rm 容器 ID或name
docker rm -f 强制删除容器,即使在运行
docker rm -f $(docker ps -qa) # 删除全部容器
docker ps -qa | xargs docker rm # 删除全部已停止容器
docker rmi 删除镜像
[root@localhost ~]# docker ps -n2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed1315df6320 centos "/bin/bash" 23 minutes ago Exited (137) 7 minutes ago mycentos01 8e0ffee781f1 9f38484d220f "/bin/bash" 3 hours ago Exited (137) 8 minutes ago mycentos [root@localhost ~]# docker rm mycentos01 mycentos01 [root@localhost ~]# docker ps -n2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e0ffee781f1 9f38484d220f "/bin/bash" 3 hours ago Exited (137) 9 minutes ago mycentos 3af63c5c69c6 hello-world "/hello" 45 hours ago Exited (0) 45 hours ago pensive_dubinsky
7.查看所有容器的实时资源占用情况
docker stats
8.查看容器日志
docker logs -f -t --tail 10 容器 ID或name
-f 持续刷新最新日志
-t 显示时间戳
--tail 显示最后几行
[root@localhost ~]# docker run -d --name mycentos1 centos ba18b348bd9857bde9b25a62d848d6239c1c7c0de302a8bc279185a758efd861 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker run -d --name mycentos2 centos /bin/bash -c "while true;do echo Hello World;sleep 3;done" 21494ef841e27c69877afaf1a0be5ae2bb7d32d6862eb7bfa1e6eb237f04efa3 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 21494ef841e2 centos "/bin/bash -c 'while…" 2 seconds ago Up 2 seconds mycentos2 [root@localhost ~]# docker logs -f -t --tail 5 21494ef841e2 2019-04-04T07:37:43.721260403Z Hello World 2019-04-04T07:37:46.721904929Z Hello World 2019-04-04T07:37:49.723204790Z Hello World 2019-04-04T07:37:52.724042843Z Hello World 2019-04-04T07:37:55.725116649Z Hello World ...
9.查看容器内进程
docker top 容器 ID或name
[root@localhost ~]# docker run -d centos /bin/bash -c "while true;do echo Nihao;sleep 2 ;done" 4768a70886fcb74cdf00cb19d142fb503a18d2390406dc31ad533d697b423f46 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4768a70886fc centos "/bin/bash -c 'while…" 3 seconds ago Up 2 seconds affectionate_cori [root@localhost ~]# docker top 4768a70886fc UID PID PPID C STIME TTY TIME CMD root 9379 9364 0 15:48 ? 00:00:00 /bin/bash -c while true;do echo Nihao;sleep 2 ;done root 9427 9379 0 15:48 ? 00:00:00 sleep 2
10.查看容器细节
docker inspect 容器 ID或name
[root@localhost ~]# docker inspect 4768a70886fc [ { "Id": "4768a70886fcb74cdf00cb19d142fb503a18d2390406dc31ad533d697b423f46", "Created": "2019-04-04T07:48:20.460764642Z", "Path": "/bin/bash", "Args": [ "-c", "while true;do echo Nihao;sleep 2 ;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, ....
11.进入容器
docker attach 容器 ID或name
docker exec -t -w -u -e 容器 ID或name 命令 # 功能更强大,也能实现登陆容器内部
-d, --detach Detached mode: run command in the background
-e, --env list Set environment variables
-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
-w, --workdir string Working directory inside the container
[root@localhost ~]# docker exec -t -w /tmp -uroot -e LANG=en 4768a70886fc ls ks-script-eC059Y yum.log [root@localhost ~]# docker exec 4768a70886fc ls /tmp ks-script-eC059Y yum.log [root@localhost ~]# docker exec -it 4768a70886fc ls /tmp ks-script-eC059Y yum.log [root@localhost ~]# docker exec -it 4768a70886fc /bin/bash [root@4768a70886fc /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
12. docker cp
Copy files/folders between a container and the local filesystem 在本地系统和容器间copy文件或文件夹
[root@localhost ~]# docker cp anaconda-ks.cfg 4768a70886fc:/home [root@localhost ~]# docker exec 4768a70886fc ls /home anaconda-ks.cfg [root@localhost ~]# docker exec -it 4768a70886fc ls /tmp ks-script-eC059Y yum.log [root@localhost ~]# docker cp 4768a70886fc:/tmp/yum.log /tmp [root@localhost ~]# ls -l /tmp 总用量 8 -rw-------. 1 root root 0 3月 6 01:34 yum.log
docker run -d /bin/bash -c 的注意点
重启docker 后,会继续执行创建docker 时指定的脚本。
相当于该容器运行的是 镜像+shell 的组合模板。
docker attach 登陆容器后,如果command 命令是前台进程就会一直执行,而不能做其他操作。