书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客
容器就是镜像在物理机运行的一个实例,大家把容器理解为一个气球,气球里运行了一个进程。这个进程透过气球吸收物理机的内存和CPU资源。
查看当前有多少正在运行的容器。
##########实操验证########## [root@vms100 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@vms100 ~]#
这个命令显示的仅仅是正在运行的容器,如果要查看所有的(正在运行的和没有运行的)容器,需要写命令docker ps -a,这里需要加上-a选项表示所有的。
创建容器
运行一个最简单的容器。
##########实操验证########## [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 a8eb4d9d5805 hub.c.163.com/library/centos "/bin/bash" 11 seconds ago Exited (0) 10 seconds ago blissful_almeida [root@vms100 ~]#
从这里可以看到创建出来了一个容器,容器的ID为a8eb4d9d5805,容器名是随机产生的名字,为confident_curie,所使用的镜像是
http://hub.c.163.com/library/centos,容器里运行的进程为/bin/bash(也就是镜像里CMD指定的)。
docker ps看不到,docker ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行一瞬间就关闭了,为什么?那下面来了解一下容器的生命期问题。
容器的生命期
我们把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,则肉体也就宕掉了,只有灵魂正常运行,肉体才能正常运行,如图1-11所示。
同理,只有容器里的进程正常运行,容器才能正常运行,容器里的进程挂了,则容器也就挂掉了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。
如果把这个bash附着到一个终端上,这个终端一直存在的话,bash就一直存在,那么是不是容器就能一直存活了呢?
删除容器的语法:
docker rm 容器ID/容器名
如果删除正在运行的容器,可以使用-f选项:
docker rm -f 容器ID/容器名
删除刚才的容器。
##########实操验证########## [root@vms100 ~]# docker rm a8eb4d9d5805 a8eb4d9d5805 [root@vms100 ~]#
重新创建容器,加上 -i -t选项,可以写作-it或者-i -t,
-t:模拟一个终端。
-i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了。
步骤1:创建一个容器。
##########实操验证########## [root@vms100 ~]# docker run -it hub.c.163.com/library/centos [root@f83af978dcd9 /]# [root@f83af978dcd9 /]# exit exit [root@vms100 ~]#
创建出容器之后自动进入容器里,以通过exit退出容器。
##########实操验证########## [root@vms100 ~]# docker ps -a -q f83af978dcd9 [root@vms100 ~]#
但是,一旦退出容器,容器就不再运行了。
步骤2:删除此容器。
##########实操验证########## [root@vms100 ~]# docker rm f83af978dcd9 f83af978dcd9 [root@vms100 ~]# docker ps -a -q [root@vms100 ~]#
如果希望创建好容器之后不自动进入容器,可以加上-d选项。
步骤3:再次创建一个容器。
##########实操验证########## [root@vms100 ~]# docker run -dit hub.c.163.com/library/centos 4ca1114102fe334813d06c065b8a40ab0ee06fabb735b29c884b4e59b38b7fb5 [root@vms100 ~]# docker ps -q 4ca1114102fe [root@vms100 ~]#
因为加了-d选项,所以创建好容器之后并没有自动进入容器里。
##########实操验证########## [root@vms100 ~]# docker attach 4ca1114102fe [root@4ca1114102fe /]# exit exit [root@vms100 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ca1114102fe hub.c.163.com/library/centos "/bin/bash" 21 seconds ago Exited (0) 5 seconds ago recursing_dhawan [root@vms100 ~]#
可以看到只要退出来容器就会自动关闭。
步骤4:删除此容器。
##########实操验证########## [root@vms100 ~]# docker rm 4ca1114102fe 4ca1114102fe [root@vms100 ~]#
在运行容器的时候加上–restart=always选项,以解决退出容器自动关闭的问题。
步骤5:创建容器,增加–restart=always选项。
##########实操验证########## [root@vms100 ~]# docker run -dit --restart=always hub.c.163.com/library/centos 73fe69336c42341d44ef32dc8aaab6869140b2a7ffe1243919571e246158f73e [root@vms100 ~]# docker ps -q 73fe69336c42 [root@vms100 ~]#
进入到容器并退出。
##########实操验证########## [root@vms100 ~]# docker attach 73fe69336c42 [root@73fe69336c42 /]# exit exit [root@vms100 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73fe69336c42 hub.c.163.com/library/centos "/bin/bash" 54 seconds ago Up 24 seconds frosty_jang [root@vms100 ~]#
可以看到容器依然是存活的。
步骤6:删除此容器。
##########实操验证########## [root@vms100 ~]# docker rm 73fe69336c42 Error response from daemon: You cannot remove a running container 73fe69336c42341d44ef32dc8aaab6869140b2a7ffe1243919571e246158f73e. Stop the container before attempting removal or force remove [root@vms100 ~]#
因为容器是活跃的,所以无法直接删除,需要加上-f选项。
##########实操验证########## [root@vms100 ~]# docker rm -f 73fe69336c42 73fe69336c42 [root@vms100 ~]#
每次删除容器的时候都使用容器ID的方式比较麻烦,在创建容器的时候可以使用–name指定容器名。
步骤7:创建容器,使用–name指定容器的名字。
##########实操验证########## [root@vms100 ~]# docker run -dit --restart=always --name=c1 hub.c.163.com/library/centos fbecb6e5da92be3e9ae12aad55480a618223d68f84171a74ea38a8beb2669b5e [root@vms100 ~]# [root@vms100 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fbecb6e5da92 hub.c.163.com/library/centos "/bin/bash" 5 seconds ago Up 4 seconds c1 [root@vms100 ~]#
这样容器的名字为c1,以后管理起来比较方便,比如切换到容器,然后退出。
##########实操验证########## [root@vms100 ~]# docker attach c1 [root@fbecb6e5da92 /]# exit exit [root@vms100 ~]#
步骤8:删除此容器。
##########实操验证########## [root@vms100 ~]# docker rm -f c1 c1 [root@vms100 ~]# docker ps -q -a [root@vms100 ~]#
创建临时容器
如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上–rm选项。
创建临时容器。
##########实操验证########## [root@vms100 ~]# docker run -it --name=c1 --rm hub.c.163.com/library/centos [root@02bb28d481cd /]# exit exit [root@vms100 ~]#
创建容器时加了–rm,退出容器之后容器会被自动删除。
##########实操验证########## [root@vms100 ~]# docker ps -a -q [root@vms100 ~]#
可以看到此容器被自动删除了,注意–rm和–restart=always不可以同时使用。
指定容器里运行的命令
前面在创建容器的时候,容器里运行的是什么进程,是由镜像里的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 10 [root@vms100 ~]#
容器里运行的命令是sleep 10,10s之后命令结束,则容器也会关闭,此时容器的生命期也就是10s。
创建容器的时候使用变量
在利用一些镜像创建容器的时候需要传递变量,比如使用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@fd7e9c4718d3 /]# [root@fd7e9c4718d3 /]# echo $aa 123 [root@fd7e9c4718d3 /]# echo $bb 456 [root@fd7e9c4718d3 /]# exit exit [root@vms100 ~]#
在创建容器的时候,通过-e指定了2个变量aa和bb,进入容器可以看到具有这两个变量。
把容器端口映射到物理机
外部主机(即本机之外的其他主机)是不能和容器进行通信的,如果希望外部主机能访问到容器的内容,就需要使用-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 77fa2e07f93c3b78b4ef1cffe7820e7a85f93e023b7df9047f04f7b2385420d3 [root@vms100 ~]#
这里把容器web的80端口映射到物理机的随机端口,这个端口号可以通过如下命令查询。
##########实操验证########## [root@vms100 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77fa2e07f93c nginx "/docker-entrypoint.…" 19 seconds ago Up 18 seconds 0.0.0.0:32768->80/tcp, :::32768->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 a493938aa6a1d7d1d9be0d4eaf41c533187bea1037f9196bb06d745a2dce6eb5 [root@vms100 ~]#
此处把容器的端口80映射到物理机的88端口(可以自行指定端口,比如80),那么访问物理机的端口88即可访问到web容器的端口80,如图1-14所示。
自行删除此容器。
原文链接:https://blog.csdn.net/guolianggsta/article/details/131386431?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168994674516800222842391%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168994674516800222842391&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-17-131386431-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81