写点什么

云原生系列 【轻松入门容器基础操作】

作者:叶秋学长
  • 2022-11-25
    福建
  • 本文字数:6274 字

    阅读完需:约 21 分钟

✅作者简介:

CSDN 内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云 享专家博主,掘金后端评审团成员

💕前言:

最近云原生领域热火朝天,那么云原生是什么?何为云原生?云原生用来干什么的?今天学长通过华为的沙箱实验操作带领大家走进“云”时代~~

目录


4. 容器生命周期管理收起


4.1 容器生命周期


4.2 容器资源限额


4.3 退出当前容器,删除本节实验所涉及到的容器


4.4 C组


4.5 退出当前容器,删除本节实验所涉及到的容器


4.6 命名空间5. 容器网络收起


5.1 容器网络模型


5.2 删除本节实验所涉及到的容器


5.3 Docker bridge网络


5.4 退出当前容器,删除本节实验所涉及到的容器。

4. 容器生命周期管理收起

4.1 容器生命周期

(1)运行一个 centos 容器。


                                docker run -d centos
复制代码



(2)运行另外一个 centos 容器,并在容器内运行命令保持容器运行状态:


                                docker run -d centos sh -c "while true ; do echo hello world ; sleep 10 ; done"                                                            docker container ls
复制代码



(3)docker attach 进入容器。


注意:请使用第(2)步中的标红框的容器 ID 替换命令中的【容器 ID】,后续都用此 ID 进行替换。


                                docker attach 容器ID
复制代码



执行完命令后,可以看到此容器已开始输出“hello world” (4)完成后,在实验室桌面上打开一个新的终端,并参照 1.1 步骤完成弹性云服务器 ECS 的登录。 (5)码头工人暂停和码头工人取消暂停:


                                docker pause 容器ID                                                            docker container ls
复制代码



说明:容器状态变更为 Paused,并且此容器已停止输出“hello world”。


                                docker unpause 容器ID                                                            docker container ls
复制代码



说明:容器状态恢复正常,在第一个终端可以查看到容器恢复输出“hello world”。 (6)码头工人停止和码头工人启动:


                                docker stop 容器ID                                                            docker container ls                                                            docker container ls -a
复制代码



说明:容器状态变更为 Exited,并且已经无法在 docker container ls 命令中查询到该容器,必须配合-a 参数才能查询到。


                                docker start 容器ID                                                            docker container ls
复制代码



(7)docker exec 进入容器。


                                docker exec -it 容器ID sh
复制代码



说明:docker exec 需要配合-it 参数在容器内分配交互式终端,此时需要指明在容器内启动终端类型,常见类型有 sh 和 bash。 可以在容器内完成一些简单的命令操作,最后使用 exit 命令退出容器。


                                exit
复制代码


(8)docker cp 命令实现宿主机与容器之间的文件拷贝。


                                touch 1.txt                                                            docker cp ~/1.txt 容器ID:/home
复制代码


docker exec 进入容器,并验证文件拷贝成功,输入 exit 退出容器。


                                docker exec -it 容器ID sh                                                            cd home                                                            ls                                                            exit
复制代码



(9)docker rm 删除容器。


                                docker container ls                                                            docker stop 容器ID                                                            docker rm 容器ID
复制代码



说明:docker rm 删除容器前,需要停止容器,也可通过-f 参数强制删除容器。 (10)docker rmi 删除容器镜像。


                                docker pull nginx                                                            docker image ls
复制代码


注意:请使用上一个命令的 nginx IMAGE ID 替换该下个命令中的【容器镜像 ID】。


                                docker rmi 容器镜像ID
复制代码


说明:如果容器镜像正在被容器使用时没法删除,需要删除所有关联容器之后才可删除容器镜像。


4.2 容器资源限额

①运行一个压力测试容器,实践容器内存分配限额。


                                docker run -it -m 200M progrium/stress --vm 1 --vm-bytes 150M
复制代码



注意:出现上图,Ctrl+c 结束


                                docker run -it -m 200M progrium/stress --vm 1 --vm-bytes 250M
复制代码



说明:stress 是一个集成 Linux 压测实测工具的容器,可以实现对 CPU、memory、IO 等资源的压力测试。 (2)运行一个压力测试容器,实践容器内存和 swap 分配限额。


                                docker run -it -m 300M --memory-swap=400M progrium/stress --vm 2 --vm-bytes 100M
复制代码


注意:Ctrl+c 结束


(3)运行一个压力测试容器,实践容器 CPU 使用限额。


                                docker run -it --cpus=0.6 progrium/stress --vm 1
复制代码


运行压力容器后,从实验室桌面再打开一个新的操作终端(参考 1.1 步骤重新登录弹性云服务器 ECS),运行 top 命令,可以看到该容器的 CPU 利用率被限制在 60%。


                                top
复制代码



(4)在新终端 Ctrl+c 后,然后运行压力测试容器,实践容器 CPU 权重限额。


依次运行三个压力测试容器,让宿主机 CPU 使用出现竞争。


                                docker run -itd --cpu-shares 2048 progrium/stress --cpu 1                                                            docker run -itd --cpu-shares 1024 progrium/stress --cpu 1                                                            docker run -itd --cpu-shares 512 progrium/stress --cpu 1
复制代码


如果在操作终端运行 top 命令, 可以看到三个容器的 CPU 利用率满足权重比例。


                                top
复制代码



注意:后续在此终端上操作,请关闭其他已打开终端!


(5)ctrl+c 结束后,运行一个测试容器,实践容器 IO 限额。


                                docker run -it --device-write-bps /dev/vda:50MB centos
复制代码


运行测试容器,同时利用-it 参数在运行容器同时分配操作终端。在容器内利用 dd 命令测试磁盘的写能力,可以看到容器内磁盘写入带宽满足 IO 限额。


                                time dd if=/dev/zero of =test.out bs=1M count=200 oflag=direct
复制代码


4.3 退出当前容器,删除本节实验所涉及到的容器

                                exit                                                            docker container ls
复制代码


依次删除该步骤涉及到的容器。


                                docker rm 容器ID -f
复制代码


4.4 C 组

(1)运行压力测试容器,验证内存限额 cgroup 配置。 运行压力测试容器,配置其内存和 swap 分配限额。


                                docker run -itd -m 300M --memory-swap=400M progrium/stress --vm 2 --vm-bytes 100M                                                            docker container ls
复制代码



按照容器 ID,查询 cgroup 内存子系统验证其内存限额配置。(cgroup 内存子系统所在路径为/sys/fs/cgroup/memory/docker/容器长 ID/)内存限额配置在 memory.limit_in_bytes 和 memory.memsw.limit_in_bytes 文件内。


注意:请使用上图中红框内 ID 替换命令中的【容器长 ID】


                                cd /sys/fs/cgroup/memory/docker/容器长ID/
复制代码


(2)运行压力测试容器,验证 CPU 使用限额 cgroup 配置。


                                docker run -itd --cpus=0.7 progrium/stress --vm 1                                                            docker container ls
复制代码



                                top
复制代码



按照容器 ID,查询 cgroup cpu 子系统验证其 CPU 使用限额配置。(cgroup cpu 子系统所在路径为/sys/fs/cgroup/cpu/docker/容器长 ID/)CPU 使用限额配置在 cpu.cfs_quota_us 和 cpu.cfs_period_us 文件内。


注意:请使用第 2 步查询到的容器长 ID 替换命令中的【容器长 ID】


                                cd /sys/fs/cgroup/cpu/docker/容器长ID/
复制代码


(3)运行压力测试容器,验证 CPU 权重限额 cgroup 配置。


                                docker run -itd --cpu-shares 2048 progrium/stress --cpu 1                                                            docker run -itd --cpu-shares 1024 progrium/stress --cpu 1                                                            docker run -itd --cpu-shares 512 progrium/stress --cpu 1
复制代码



依次运行三个压力测试容器,让宿主机 CPU 使用出现竞争,并配置其各自 CPU 权重。


按照容器 ID,查询 cgroup cpu 子系统验证其 CPU 权重限额配置。(cgroup cpu 子系统所在路径为/sys/fs/cgroup/cpu/docker/容器长 ID/)CPU 权重限额配置在 cpu.shares 文件内。


注意:请依次替换容器长 ID 替换命令中的【容器长 ID】


                                cat /sys/fs/cgroup/cpu/docker/容器长ID/cpu.shares
复制代码



查询三次不同的结果分别显示 2048,1024,512。


(4)运行测试容器,验证 IO 限额 cgroup 配置。


                                docker run -it --device-write-bps /dev/vda:70MB centos
复制代码


运行测试容器,配置 IO 写入带宽限额。按照容器 ID,查询 cgroup blkio 子系统验证其 IO 写入带宽限额配置。(cgroup blkio 子系统所在路径为/sys/fs/cgroup/blkio/)IO 写入带宽限额配置在 blkio.throttle.write_bps_device 文件内。


                                cat /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device 
复制代码


说明:此文件内的 253:0 是/dev/VDA 的设备号,可以在宿主机通过 lsblk 命令查询。


                                lsblk
复制代码


其中 MAJ 为主设备号(Major),MIN 为次设备号(Minor)。


4.5 退出当前容器,删除本节实验所涉及到的容器

                                exit                                                            docker container ls
复制代码


依次删除该步骤涉及到的容器。


                                docker rm 容器ID -f
复制代码

4.6 命名空间

(1)UTS Namespace 创建测试容器,分别在容器和宿主机验证主机名。


                                docker run -d -t -h container centos
复制代码


说明:此处-h 参数设置容器主机名。 docker exec 进入容器验证容器主机名。


                                docker exec -it 容器ID bash                                                            hostname
复制代码


退出容器,验证宿主机主机名。


                                exit                                                            hostname
复制代码



(2)PID Namespace docker exec 命令进入容器验证容器进程信息。


                                docker exec -it 容器ID sh                                                            ps
复制代码


退出容器,验证宿主机进程信息。


                                exit                                                            ps -aux
复制代码




(3)User Namespace 运行测试容器,在容器内创建用户。退出容器,然后在宿主机验证用户名信息。


                                docker run -it centos                                                            useradd container                                                            su - container
复制代码


退出容器,在宿主机验证该用户名信息。


                                exit                                                            exit                                                            su - container
复制代码


\5. 容器网络收起

5.1 容器网络模型

(1)运行一个容器,配置其网络模型为 host 并验证。


                                docker run -itd --network=host centos                                                            docker exec -it 容器ID bash
复制代码


在容器内查看网络信息。


                                ip addr
复制代码



退出容器,在宿主机验证网络信息。


                                exit                                                            ip addr
复制代码



说明:当容器使用 host 网络模型,容器和宿主机共享网络命名空间,因此网络信息完全一致。


(2)运行一个容器,配置其网络模型为 bridge 并验证。


                                docker run -itd --network=bridge centos                                                            docker exec -it 容器ID bash                                                            ip addr
复制代码


说明:当使用默认 docker0 网桥时,--network=bridge 可省略不写。 (3)查看 docker0 网桥信息,验证容器网络信息配置。


                                exit                                                            docker network inspect bridge docker0
复制代码


5.2 删除本节实验所涉及到的容器

                                docker container ls
复制代码


依次删除该步骤涉及到的容器。


                                docker rm 容器ID -f
复制代码

5.3 Docker bridge 网络

①创建用户自定义网桥并指定子网和网关。


                                docker network create --driver bridge --subnet 173.18.0.0/16 --gateway 173.18.0.1 servicebridge01
复制代码



如图所示,返回网络 ID。 查看网桥信息。


注意:请使用前一步返回的网络 ID 替换命令中的【网络 ID】。


                                docker network inspect 网络ID
复制代码



②运行容器并挂载到第一步的自定义网桥。


                                docker run -itd --network=servicebridge01 centos                                                            docker inspect 容器ID
复制代码



(3)运行一个容器挂载在默认 docker0 网桥,再挂载到第一步的自定义网桥。


                                docker run -itd centos
复制代码


注意:请使用第一步返回的网络 ID 替换命令中的【网络 ID】,使用第三步返回的容器 ID 替换命令中的容器 ID。


                                docker network connect 网络ID 容器ID                                                            docker exec -it 容器ID bash                                                            ip addr
复制代码



④验证第三步中的容器和第二步中的容器互通性。


注意:请使用第三步返回的容器 ID 替换命令中的【容器 ID】,使用第二步中的 IP Address 替换命令中的【容器 IP】。


                                exit                                                            docker exec -it 容器ID bash                                                            ping 容器IP
复制代码


5.4 退出当前容器,删除本节实验所涉及到的容器。

                                exit                                                            docker container ls
复制代码


依次删除该步骤涉及到的容器。


                                docker rm 容器ID -f
复制代码


发布于: 刚刚阅读数: 3
用户头像

叶秋学长

关注

还未添加个人签名 2022-07-01 加入

全栈JAVA领域创作者

评论

发布
暂无评论
云原生系列 【轻松入门容器基础操作】_云原生_叶秋学长_InfoQ写作社区