Kubernetes认证考试自学系列 | 创建容器

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客


查看当前有多少正在运行的容器。

[root@vms100 ~]# docker ps 
CONTAINER ID   IMAGE COMMAND CREATED STATUS PORTS        NAMES 
[root@vms100 ~]#
复制代码

这个命令显示的仅仅是正在运行的容器,如果要查看所有的(正在运行的和没有运行的)容器,需要写命令docker ps -a,这里需要加上-a选项表示所有的。

1.4.1 创建容器

运行一个最简单的容器。

[root@vms100 ~]# docker run hub.c.163.com/library/centos 
[root@vms100 ~]#
[root@vms100 ~]# docker ps 
CONTAINER ID   IMAGE COMMAND CREATED STATUS PORTS        NAMES 
[root@vms100 ~]# docker ps -a 
CONTAINER ID   IMAGE                        COMMAND      CREATED        STATUS                   PORTS    NAMES 
bfa8fa89f288   hub.c.163.com/library/centos "/bin/bash"  7 seconds ago Exited(0)6 seconds ago          confident_curie
[root@vms100 ~]#
复制代码

从这里可以看到创建出来了一个容器,容器的ID为bfa8fa89f288容,容器名是随机产生的名字,为confident_curie,所使用的镜像是hub.c.163.com/library/centos,容器里运行的进程为/bin/bash(也就是镜像里CMD指定的)。

docker ps看不到,docker ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行一瞬间就关闭了,为什么?那下面来了解一下容器的生命期问题。

1.4.2 容器的生命期

我们把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,则肉体也就宕掉了,只有灵魂正常运行,肉体才能正常运行,如图1-11所示。

同理,只有容器里的进程正常运行,容器才能正常运行,容器里的进程挂了,则容器也就挂掉了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。

删除容器的语法:

docker rm 容器ID/容器名
复制代码

如果删除正在运行的容器,可以使用-f选项:

docker rm -f 容器ID/容器名
复制代码

删除刚才的容器。

[root@vms100 ~]# docker rm bfa8fa89f288
bfa8fa89f288
[root@vms100 ~]#
复制代码

重新创建容器,加上 -i -t选项,可以写作-it或者-i -t,

-t:模拟一个终端。

-i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了。

步骤1:创建一个容器。

[root@vms100 ~]# docker run -it hub.c.163.com/library/centos 
[root@c81c978cdf1f /]# 
[root@c81c978cdf1f /]# exit 
[root@vms100 ~]#
复制代码

创建出容器之后自动进入容器里,以通过exit退出容器。

[root@vms100 ~]# docker ps -q #-q选项可以只显示容器id,不会显示太多信息
[root@vms100 ~]# docker ps-a-q 
c81c978cdf1f
[root@vms100 ~]#
复制代码

但是,一旦退出容器,容器就不再运行了。

步骤2:删除此容器。

[root@vms100 ~]# docker rm c81c978cdf1f 
c81c978cdf1f
[root@vms100 ~]# docker ps -a -q 
[root@vms100 ~]#
复制代码

如果希望创建好容器之后不自动进人容器,可以加上-d选项。

步骤3:再次创建一个容器。

[root@vms100 ~]# docker run -dit hub.c.163.com/library/centos
4aa86357a3df164f985a82e358a1961fe50f7be401bb984d006c09e2957f3175
[root@vms100 ~]#
[root@vms100 ~]# docker ps-q 
4aa86357a3df
[root@vms100 ~]# 
复制代码

因为加了-d选项,所以创建好容器之后并没有自动进入容器里。

[root@vms100 ~]# docker attach 4aa86357a3df 
[root@4aa86357a3df /]# 
[root@4aa86357a3df /]# exit #再执行exit退出
[root@vms100 ~]# docker ps -q 
[root@vms100 ~]# docker ps -a -q 
4aa86357a3df
[root@vms100 ~]#
复制代码

可以看到只要退出来容器就会自动关闭。

步骤4:删除此容器。

[root@vms100 ~]# docker rm 4aa86357a3df 
4aa86357a3df 
[root@vms100 ~]#
复制代码

在运行容器的时候加上--restart=always选项,以解决退出容器自动关闭的问题。

步骤5:创建容器,增加--restart=always选项。

[root@vms100 ~]# docker run -dit --restart=always hub.c.163.com/library/cento
75506e8581955448dfa61f16678d1b364e997fa265947a2ede532c323e501f0e 
[root@vms100 ~]# docker ps -q 
75506e858195
[root@vms100 ~]#
复制代码

进入到容器并退出。

[root@vms100 ~]# docker attach 75506e858195
[root@75506e858195 /]# exit 
exit
[root@vms100 ~]# docker ps-q 
75506e858195
[root@vms100 ~]#
复制代码

可以看到容器依然是存活的。

步骤6:删除此容器。

[root@vms100 ~]# docker rm 75506e858195
Error response from daemon: You cannot remove a running container 75506e8581955448dfa61f16678d1b364e997fa265947a2ede532c323e501f0e. Stop the container before attempting removal or use -f
复制代码

因为容器是活跃的,所以无法直接删除,需要加上-f选项。

[root@vms100 ~]#
[root@vms100 ~]# docker rm -f 75506e85819575506e858195
[root@vms100 ~]#
复制代码

每次删除容器的时候都使用容器ID的方式比较麻烦,在创建容器的时候可以使用--name指定容器名。

步骤7:创建容器,使用--name指定容器的名字。

[root@vms100 ~]# docker run -dit --restart=always --name=c1 hub.c.163.com/library/centos
798a43c4f26cda49653c292a4566097a9344c8c20fd00938ce9f5a8do1abdd61
[root@vms100 ~]# 
[root@vms100 ~]# docker ps 
CONTAINER ID   IMAGE                        COMMAND      CREATED        STATUS                   PORTS    NAMES       
798a43c4f26c   hub.c.163.com/library/centos "/bin/bash"  2 seconds ago  Up 1second                        c1
[root@vms100 ~]#
复制代码

这样容器的名字为c1,以后管理起来比较方便,比如切换到容器,然后退出。

[root@vms100 ~]# docker attach c1
[root@798a43c4f26c /]# exit 
exit
[root@vms100 ~]#
复制代码

步骤8:删除此容器。

[root@vms100 ~]# docker rm -f c1
c1
[root@vms100 ~]# 
[root@vms100 ~]# docker ps -q -a 
[root@vms100 ~]#
复制代码

1.4.3 创建临时容器

如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项。

创建临时容器。

[root@vms100 ~]# docker run -it --name=c1 --rm hub.c.163.com/library/centos 
[root@4067418eebf0 /]# 
[root@4067418eebfo /]# exit 
exit
[root@vms100 ~]#
复制代码

创建容器时加了--rm,退出容器之后容器会被自动删除。

[root@vms100 ~]# docker ps -a -q 
[root@vms100 ~]#
复制代码

可以看到此容器被自动删除了,注意--rm和--restart=always不可以同时使用。

1.4.4 指定容器里运行的命令

前面在创建容器的时候,容器里运行的是什么进程,是由镜像里的CMD指令定义好的,关于如何构建镜像,后面有专门章节详细讲解。如果想自定义容器里运行的进程,可以在创建容器的命令最后面指定,比如:

[root@vms100 ~]# docker run -it --name=c1 --rm hub.c.163.com/library/centos sh
sh-4.2#
sh-4.2#
sh-4.2# exit 
exit
[root@vms100 ~]#
复制代码

这里就是以sh方式运行,而不是以bash运行的。

在容器里运行sleep 10。

[root@vms100 ~]# docker run -it --name=c1 --rm hub.c.163.com/library/centos sleep
[root@vms100 ~]# 
复制代码

容器里运行的命令是sleep 10,10s之后命令结束,则容器也会关闭,此时容器的生命期也就是10s。

1.4.5 创建容器的时候使用变量

在利用一些镜像创建容器的时候需要传递变量,比如使用mysql的像,wordpress的镜像创建容器时,都需要通过变量来指定一些必备的信息。需要变量的话用-e来指定,可以多次使用-e来指定多个变量。

创建一个容器c1,里面传递两个变量。

[root@vms100 ~]# docker run -it --name=c1 --rm -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@13a417ebc9c3 /]#
[root@13a417ebc9c3 /]# echo $aa
123
[root@13a417ebc9c3 /]# echo $bb
456
[root@13a417ebc9c3 /]# exit
exit
[root@vms100 ~]#
复制代码

在创建容器的时候,通过-e指定了2个变量aa和bb,进入容器可以看到具有这两个变量。

1.4.6 把容器端口映射到物理机

外部主机(即本机之外的其他主机)是不能和容器进行通信的,如果希望外部主机能访问到容器的内容,就需要使用-p把容器的端口映射到物理机上,以后访问物理机对应的端口就可以访问到容器了,如图1-12所示。

语法:

-p N:物理机随机生成一个端口映射到容器的端口N上。

-p M:N:把容器的端口N映射到物理机指定的端口M上。

步骤1:创建一个容器,把容器端口80映射到物理机的一个随机端口。

[root@vms100 ~]# docker run -d --name=web --restart=always -p 80 docker.io/nginx
d267651019fdf1475d444cd43b01826958b4a5fb691024567bb7991d4a606339
[root@vms100 ~]#
复制代码

这里把容器web的80端口映射到物理机的随机端口,这个端口号可以通过如下命令查询。

[root@vms100 ~]# docker ps
CONTAINER ID   IMAGE                        COMMAND                 CREATED         STATUS            PORTS                   NAMES       
d207651019fd   docker.io/nginx              "nginx -g 'daemon ..."  42 seconds ago  Up 42 seconds     0.0.0.0:32770->80/tcp   web  
[root@vms100 ~]#
复制代码

可以看到映射到物理机的端口32770上了,访问物理机的端口32770,即可访问到web容器,如图1-13所示。

自行删除此容器:docker rm -f web。

如果想映射到物理机指定的端口,请使用如下命令。

[root@vms100 ~]# docker run -d --name=web --restart=always -p 88:80 docker.io/nginx 
305500d7b5008f7a41de5c6415991b2788a932e744c74d3ba5cb0f71b1a5fb31
[root@vms100 ~]#
复制代码

此处把容器的端口80映射到物理机的88端口(可以自行指定端口,比如80),那么访问物理机的端口88即可访问到web容器的端口80,如图1-14所示。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130180219
今日推荐