在CentOS 7上验证Docker命令
首先
为了复习Docker命令,我整理了一篇文章。
前提
我使用VirtualBox进行了CentOS7的Guest OS验证。
执行的命令
我查阅了以下网址作为参考:
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/docker/
Docker镜像
最近生成的图像列表
以下是一个执行示例。
[root@localhost overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest 291bf168077c 2 weeks ago 124MB
jasonrivers/nagios latest 0c33dd4f2c3e 3 months ago 794MB
我查找了Docker镜像的存储位置。
以下的Qiita文章对我很有参考价值。
https://qiita.com/tifa2chan/items/b9607d80fb58476e4ef5
以下是执行示例:
下面记载了容器(debian)和容器(jasonrivers/nagios)的图像信息。
[root@localhost overlay2]# cat /var/lib/docker/image/overlay2/repositories.json | python -mjson.tool
{
"Repositories": {
"debian": {
"debian:latest": "sha256:291bf168077c554abde831d52178c76aa8d7dad0e55a2e37a68c2b55a5d92e64",
"debian@sha256:a288aa7ad0e4d443e86843972c25a02f99e9ad6ee589dd764895b2c3f5a8340b": "sha256:291bf168077c554abde831d52178c76aa8d7dad0e55a2e37a68c2b55a5d92e64"
},
"jasonrivers/nagios": {
"jasonrivers/nagios:latest": "sha256:0c33dd4f2c3e98dceada3974cffb2333c4fe4c5a6d53742f7aa1078e3451a7eb",
"jasonrivers/nagios@sha256:d7696a34ac0508268ddd104a9ddc102c198c9ce567531ad6e876e9572c0a64fb": "sha256:0c33dd4f2c3e98dceada3974cffb2333c4fe4c5a6d53742f7aa1078e3451a7eb"
}
}
}
列出运行中的Docker容器。
我参考了以下的网址:
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/ps/
显示正在运行的容器。以下是一个示例。由于没有运行中的容器,所以没有显示。
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost overlay2]#
在展示所有容器时,包括停止中的容器。
由于容器名称(debian)已变为Exited 5天前,因此容器在5天前被停止。
[root@localhost overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Exited (0) 5 days ago debian
fb470a7a23a7 jasonrivers/nagios:latest "/usr/local/bin/star…" 2 months ago Exited (255) 4 days ago 5667/tcp, 0.0.0.0:8888->80/tcp nagios4
启动docker
我参考了以下的URL:
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/start/
如果容器的名称像jasonrivers/nagios:latest这样,如果直接运行会出错。
docker start <コンテナ名>
[root@localhost overlay2]# docker start jasonrivers/nagios:latest
Error response from daemon: No such container: jasonrivers/nagios:latest
Error: failed to start containers: jasonrivers/nagios:latest
在上述情况下,通过指定容器ID来启动容器。
[root@localhost overlay2]# docker start fb470a7a23a7
fb470a7a23a7
[root@localhost overlay2]#
以下是指定容器名称并启动容器的示例。
[root@localhost overlay2]# docker start debian
debian
[root@localhost overlay2]#
已经启动了两台容器。
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 42 seconds debian
fb470a7a23a7 jasonrivers/nagios:latest "/usr/local/bin/star…" 2 months ago Up 6 seconds 5667/tcp, 0.0.0.0:8888->80/tcp nagios4
[root@localhost overlay2]#
使用Docker附加
使用docker attach命令,可以将标准输入、标准输出和标准错误输出(或其组合)附加到正在运行的容器中。看起来就像进入了容器内的shell中一样。
以下是一个参考网站:https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/attach/
Docker attach和exec的区别对我很有帮助。据说它们都是用于连接到正在运行的容器的命令。
已连接到容器”debian”。
[root@localhost overlay2]# docker attach c10cd2800f5a
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# cat /etc/debian_version
11.5
root@c10cd2800f5a:/#
注意事项:
在连接容器时执行”exit”命令将会导致容器停止。
这是在生产环境中需要注意的操作!!
参考链接:https://www.tohoho-web.com/docker/docker_exec.html
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 23 seconds debian
コンテナ「debian」へ接続する
[root@localhost overlay2]# docker attach c10cd2800f5a
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# cat /etc/debian_version
11.5
root@c10cd2800f5a:/# exit
exit
コンテナ「debian」が停止したため、何も表示されていません
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost overlay2]#
在容器内执行Docker命令
docker attach命令是用于连接到指定容器的命令,与docker exec相似。根据以下验证结果,即使在连接到容器后执行exit命令,容器本身也不会停止,因此是安全的。
就我个人而言,我建议使用 “docker exec”。
docker exec -it <コンテナID指定> /bin/bash
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 2 minutes debian
コンテナ「debian」へ接続する
[root@localhost overlay2]# docker exec -it c10cd2800f5a /bin/bash
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# exit
exit
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 2 minutes debian
执行docker运行
使用docker run命令可以创建一个处于运行状态的容器。以下网站提供了参考信息:
https://www.tohoho-web.com/docker/docker_run.html
使用nginx映像时,我们指定容器内的80端口,并使用8080端口来访问本地主机,以启动并创建容器。
[root@localhost overlay2]# docker run --name nginx -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
3f4ca61aafcd: Pull complete
50c68654b16f: Pull complete
3ed295c083ec: Pull complete
40b838968eea: Pull complete
88d3ab68332d: Pull complete
5f63362a3fa3: Pull complete
Digest: sha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286
Status: Downloaded newer image for nginx:latest
e820c2036ef0a12e62fe1c5823af802722066f9d6e81d427ad92a1cbed80306e
[root@localhost overlay2]#
#作成したnginxのコンテナが起動しました
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e820c2036ef0 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx
c10cd2800f5a debian "bash" 5 days ago Up 8 minutes debian

总结
最好事先验证并了解容器命令的操作。连接到容器的命令中若按退出(exit),有些容器会停止,因此需要注意。
我在本文中列出了必需的容器命令。