文章目录
1、docker run
新建并运行容器
docker run -it centos
: 运行一个 centos 容器
[root@localhost java]# docker run -it 75835a67d134
[root@6d69ff2cbd03 /]# cd /
[root@6d69ff2cbd03 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@6d69ff2cbd03 /]# pwd
/
[root@6d69ff2cbd03 /]#
打开一个新的终端,查看 docker中运行的容器
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d69ff2cbd03 75835a67d134 "/bin/bash" 26 seconds ago Up 25 seconds dreamy_chandrasekhar
[root@localhost java]#
1.1、--name 别名
给容器起别名
docker run -it --name mycentos124 centos
: 运行一个 centos 容器,并通过--name
参数指定一个别名为mycentos111
[root@localhost java]# docker run -it --name mycentos111 75835a67d134
[root@129ff84a96b4 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@129ff84a96b4 /]#
docker ps
命令查看正在运行的容器,最后一列name
为刚才指定的别名
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
129ff84a96b4 75835a67d134 "/bin/bash" 18 seconds ago Up 17 seconds mycentos111
[root@localhost java]#
2、docker ps
列出当前docker中 正在运行
的 容器
docker ps
:列出当前docker中 正在运行
的 容器
docker ps
:
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ba0aaaccee9 75835a67d134 "/bin/bash" 11 seconds ago Up 9 seconds pensive_hypatia
2.1、docker ps [option]
:
-a
: 列出当前所有正在运行的容器 + 历史上运行过的容器
-l
: 显示 上一次运行过的容器
-n
: 显示 上 n 次运行过的容器
-q
: 静默模式,只显示容器编号
--no-trunc
: 不截断输出
docker ps -a
:(列出当前所有正在运行的容器 + 历史上运行过的容器)
[root@localhost java]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ba0aaaccee9 75835a67d134 "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago pensive_hypatia
b25d05ece250 centos "/bin/sh -c 'while t…" 3 days ago Exited (255) 15 minutes ago priceless_morse
d4cca0323327 centos "/bin/bash" 3 days ago Exited (0) 3 days ago determined_meninsky
6f0d900f3a0e 75835a67d134 "/bin/bash" 3 days ago Exited (137) 3 days ago mycentos
d38621653e1b 75835a67d134 "/bin/bash" 3 days ago Exited (137) 3 days ago lucid_shtern
8d177f15646c 4ab4c602aa5e "/hello" 3 days ago Exited (0) 3 days ago dreamy_hopper
678219b66f73 4ab4c602aa5e "/hello" 3 days ago Exited (0) 3 days ago suspicious_yonath
docker ps -l
: (显示 上一次运行过的容器)
[root@localhost java]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ba0aaaccee9 75835a67d134 "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago pensive_hypatia
docker ps -lq
: (显示 上一次运行过的容器的 容器id)
[root@localhost java]# docker ps -lq
7ba0aaaccee9
docker ps -aq
: (列出当前所有正在运行的容器 + 历史上运行过的容器的 容器id)
[root@localhost java]# docker ps -aq
7ba0aaaccee9
b25d05ece250
d4cca0323327
6f0d900f3a0e
d38621653e1b
8d177f15646c
678219b66f73
3、docker start
启动容器(已停止运行的容器)
[root@localhost java]# docker ps -l # 查看上一次运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
129ff84a96b4 75835a67d134 "/bin/bash" 20 minutes ago Exited (0) 23 seconds ago mycentos111
[root@localhost java]#
[root@localhost java]# docker start 129ff84a96b4 #重新启动容器,129ff84a96b4是容器的id
129ff84a96b4
[root@localhost java]#
4、docker run
与 docker start
的区别
相同点:
都能启动容器。
不同点:
docker run
:启动的是镜像,通过镜像创建容器,并启动。
docker start
:启动的是历史的容器;
docker run
只在第一次运行容器时,需要通过 镜像 创建
容器。以后再次启动这个容器时,只需要使用命令 docker start
即可。
docker run
相当于执行了两步操作:
- 1.将镜像放入容器中(docker create);
- 2.然后将容器启动,使之变成运行时容器(docker start)。
docker start
:
docker start
的作用是,重新启动已存在的容器。
使用这个命令,我们必须事先知道这个容器的ID,可以使用docker ps
的命令找到这个容器的信息,然后 使用 docker start
命令启动容器。
5、 docker restart
重启容器(正在运行的容器)
[root@localhost java]# docker ps # 查看正在运行的容器,STATUS是7分钟
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
129ff84a96b4 75835a67d134 "/bin/bash" 28 minutes ago Up 7 minutes mycentos111
[root@localhost java]#
[root@localhost java]# docker restart 129ff84a96b4 # 重启容器
129ff84a96b4 # 重启完毕后,返回一个容器id
[root@localhost java]#
[root@localhost java]# docker ps #查看正在运行的容器,STATUS是4秒钟
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
129ff84a96b4 75835a67d134 "/bin/bash" 29 minutes ago Up 4 seconds mycentos111
[root@localhost java]#
6、docker log 容器id
查看容器日志
参数说明:
-t
: 加入时间戳
-f
: 实时打印出最新的日志
--tail
: 显示最后多少条
先运行一段程序
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost java]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
2db1ff5cc3a18cc869e931de7109a34a5fd02a26df610cc1fca12e06e00a96b4
[root@localhost java]#
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2db1ff5cc3a1 centos "/bin/sh -c 'while t…" 15 seconds ago Up 14 seconds elastic_bhaskara
[root@localhost java]#
docker logs 2db1ff5cc3a1
:一次性显示所有的日志
[root@localhost java]# docker logs 2db1ff5cc3a1
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
docker logs -t --tail 5
一次性显示最新的5条日志,并加上时间戳
[root@localhost java]# docker logs -t --tail 5 2db1ff5cc3a1
2018-11-08T09:47:00.808550916Z hello zzyy
2018-11-08T09:47:02.812877422Z hello zzyy
2018-11-08T09:47:04.816929773Z hello zzyy
2018-11-08T09:47:06.821516115Z hello zzyy
2018-11-08T09:47:08.825211232Z hello zzyy
docker logs -t -f --tail 5
:刚开始显示出最新5条日志,并实时动态打印出最新的日志
[root@localhost java]# docker logs -t -f --tail 5 2db1ff5cc3a1
2018-11-08T09:47:04.816929773Z hello zzyy
2018-11-08T09:47:06.821516115Z hello zzyy
2018-11-08T09:47:08.825211232Z hello zzyy
2018-11-08T09:47:10.827242700Z hello zzyy
2018-11-08T09:47:12.831193573Z hello zzyy
2018-11-08T09:47:14.835069567Z hello zzyy
2018-11-08T09:47:16.840180042Z hello zzyy
2018-11-08T09:47:18.841954295Z hello zzyy
2018-11-08T09:47:20.844636084Z hello zzyy
2018-11-08T09:47:22.848753931Z hello zzyy
2018-11-08T09:47:24.851426354Z hello zzyy
2018-11-08T09:47:26.854595560Z hello zzyy
.....(实时动态打印出最新的日志)
前期数据准备
docker run -it centos
[root@localhost java]# docker run -it centos
[root@f809b6f11262 /]#
[root@f809b6f11262 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Ctrl + p + q
:退出不停止容器
[root@f809b6f11262 /]# [root@localhost java]#
[root@localhost java]#
[root@localhost java]#
验证,容器还在运行中
[root@localhost java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f809b6f11262 centos "/bin/bash" 4 minutes ago Up 4 minutes kind_ardinghelli
2db1ff5cc3a1 centos "/bin/sh -c 'while t…" 27 minutes ago Up 27 minutes elastic_bhaskara
[root@localhost java]#
7、重新进入容器
7.1、 docker attach 容器id
docker attach 容器id
:从宿主机 进入容器中
[root@localhost java]# docker attach f809b6f11262
[root@f809b6f11262 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@f809b6f11262 /]#
7.2、docker exec -t 容器id shell命令
在宿主机中,而不是在容器中,对容器执行命令
[root@f809b6f11262 /]# exit
exit
[root@localhost java]# docker run -it centos
[root@81bc97b5bc57 /]#
[root@81bc97b5bc57 /]#
[root@81bc97b5bc57 /]# [root@localhost java]# #【此处是退出不停止容器】
[root@localhost java]#
[root@localhost java]#
[root@localhost java]# docker exec -t 81bc97b5bc57 ls -l /tmp
total 4
-rwx------. 1 root root 836 Oct 6 19:15 ks-script-7RxiSx
-rw-------. 1 root root 0 Oct 6 19:14 yum.log
[root@localhost java]#
docker exec -t 81bc97b5bc57 ls -l /tmp
说明:
docker exec -t 81bc97b5bc57
是docker exec -t 容器id
,在宿主机中,而不是在容器中,对容器执行命令。-t
表示只需要客户端即可。如果是-it
表示 需要与客户端进行交互。ls -l /tmp
是显示目录tmp的结构。
二者联在一块就是在宿主机中执行对容器的tmp目录的显示操作
7.3、docker attach
与 docker exec
的区别
docker attach
:直接进入容器启动命令的终端,不会启动新的进程
docker exec
:是在宿主机中
打开新的终端,并且可以启动新的进程
[root@localhost java]# docker exec -it 81bc97b5bc57 /bin/sh
sh-4.2#
sh-4.2#
sh-4.2# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var