前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生系列 【轻松入门容器基础操作】

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

原创
作者头像
叶秋学长
发布2022-11-25 10:33:37
3410
发布2022-11-25 10:33:37
举报
文章被收录于专栏:全栈学习专栏全栈学习专栏

✅作者简介:

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容器。

代码语言:javascript
复制
                                docker run -d centos

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

代码语言:javascript
复制
                                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进行替换。

代码语言:javascript
复制
                                docker attach 容器ID

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

代码语言:javascript
复制
                                docker pause 容器ID
                            
                                docker container ls

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

代码语言:javascript
复制
                                docker unpause 容器ID
                            
                                docker container ls

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

代码语言:javascript
复制
                                docker stop 容器ID
                            
                                docker container ls
                            
                                docker container ls -a

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

代码语言:javascript
复制
                                docker start 容器ID
                            
                                docker container ls

(7)docker exec进入容器。

代码语言:javascript
复制
                                docker exec -it 容器ID sh

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

代码语言:javascript
复制
                                exit

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

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

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

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

(9)docker rm删除容器。

代码语言:javascript
复制
                                docker container ls
                            
                                docker stop 容器ID
                            
                                docker rm 容器ID

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

代码语言:javascript
复制
                                docker pull nginx
                            
                                docker image ls

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

代码语言:javascript
复制
                                docker rmi 容器镜像ID

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

4.2 容器资源限额

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

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

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

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

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

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

注意:Ctrl+c结束

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

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

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

代码语言:javascript
复制
                                top

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

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

代码语言:javascript
复制
                                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利用率满足权重比例。

代码语言:javascript
复制
                                top

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

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

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

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

代码语言:javascript
复制
                                time dd if=/dev/zero of =test.out bs=1M count=200 oflag=direct
4.3 退出当前容器,删除本节实验所涉及到的容器
代码语言:javascript
复制
                                exit
                            
                                docker container ls

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

代码语言:javascript
复制
                                docker rm 容器ID -f
4.4 C组

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

代码语言:javascript
复制
                                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】

代码语言:javascript
复制
                                cd /sys/fs/cgroup/memory/docker/容器长ID/

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

代码语言:javascript
复制
                                docker run -itd --cpus=0.7 progrium/stress --vm 1
                            
                                docker container ls
代码语言:javascript
复制
                                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】

代码语言:javascript
复制
                                cd /sys/fs/cgroup/cpu/docker/容器长ID/

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

代码语言:javascript
复制
                                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】

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

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

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

代码语言:javascript
复制
                                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文件内。

代码语言:javascript
复制
                                cat /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device 

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

代码语言:javascript
复制
                                lsblk

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

4.5 退出当前容器,删除本节实验所涉及到的容器
代码语言:javascript
复制
                                exit
                            
                                docker container ls

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

代码语言:javascript
复制
                                docker rm 容器ID -f
4.6 命名空间

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

代码语言:javascript
复制
                                docker run -d -t -h container centos

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

代码语言:javascript
复制
                                docker exec -it 容器ID bash
                            
                                hostname

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

代码语言:javascript
复制
                                exit
                            
                                hostname

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

代码语言:javascript
复制
                                docker exec -it 容器ID sh
                            
                                ps

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

代码语言:javascript
复制
                                exit
                            
                                ps -aux

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

代码语言:javascript
复制
                                docker run -it centos
                            
                                useradd container
                            
                                su - container

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

代码语言:javascript
复制
                                exit
                            
                                exit
                            
                                su - container

\5. 容器网络收起

5.1 容器网络模型

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

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

在容器内查看网络信息。

代码语言:javascript
复制
                                ip addr

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

代码语言:javascript
复制
                                exit
                            
                                ip addr

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

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

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

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

代码语言:javascript
复制
                                exit
                            
                                docker network inspect bridge docker0
5.2 删除本节实验所涉及到的容器
代码语言:javascript
复制
                                docker container ls

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

代码语言:javascript
复制
                                docker rm 容器ID -f
5.3 Docker bridge网络

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

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

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

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

代码语言:javascript
复制
                                docker network inspect 网络ID

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

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

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

代码语言:javascript
复制
                                docker run -itd centos

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

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

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

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

代码语言:javascript
复制
                                exit
                            
                                docker exec -it 容器ID bash
                            
                                ping 容器IP
5.4 退出当前容器,删除本节实验所涉及到的容器。
代码语言:javascript
复制
                                exit
                            
                                docker container ls

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

代码语言:javascript
复制
                                docker rm 容器ID -f

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ✅作者简介:
  • CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云 享专家博主,掘金后端评审团成员
  • 💕前言:
  • 最近云原生领域热火朝天,那么云原生是什么?何为云原生?云原生用来干什么的?今天学长通过华为的沙箱实验操作带领大家走进“云”时代~~
    • 4. 容器生命周期管理收起
      • 4.1 容器生命周期
        • 4.2 容器资源限额
          • 4.3 退出当前容器,删除本节实验所涉及到的容器
            • 4.4 C组
              • 4.5 退出当前容器,删除本节实验所涉及到的容器
                • 4.6 命名空间
                  • 5.1 容器网络模型
                    • 5.2 删除本节实验所涉及到的容器
                      • 5.3 Docker bridge网络
                        • 5.4 退出当前容器,删除本节实验所涉及到的容器。
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档