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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 云原生系列 三【轻松入门容器基础操作】

✅作者简介:

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
                            

img

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

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

img

(3)docker attach 进入容器。

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

                                docker attach 容器ID
                            

img

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

                                docker pause 容器ID
                            
                                docker container ls
                            

img

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

                                docker unpause 容器ID
                            
                                docker container ls
                            

img

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

                                docker stop 容器ID
                            
                                docker container ls
                            
                                docker container ls -a
                            

img

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

                                docker start 容器ID
                            
                                docker container ls
                            

img

(7)docker exec进入容器。

                                docker exec -it 容器ID sh
                            

img

说明: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
                            

img

(9)docker rm删除容器。

                                docker container ls
                            
                                docker stop 容器ID
                            
                                docker rm 容器ID
                            

img

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

                                docker pull nginx
                            
                                docker image ls
                            

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

                                docker rmi 容器镜像ID
                            

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

img

4.2 容器资源限额

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

                                docker run -it -m 200M progrium/stress --vm 1 --vm-bytes 150M
                            

img

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

                                docker run -it -m 200M progrium/stress --vm 1 --vm-bytes 250M
                            

img

说明: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
                            

img

(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
                            

img

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

(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
                            

img

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

                                exit
                            
                                docker container ls
                            

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

                                docker rm 容器ID -f
                            

img

4.4 C组

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

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

img

按照容器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
                            

img

                                top
                            

img

按照容器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
                            

img

依次运行三个压力测试容器,让宿主机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
                            

img

查询三次不同的结果分别显示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)。

img

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
                            

img

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

                                docker exec -it 容器ID sh
                            
                                ps
                            

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

                                exit
                            
                                ps -aux
                            

img

img

(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
                            

img

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

                                exit
                            
                                ip addr
                            

img

说明:当容器使用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
                            

img

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
                            

img

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

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

                                docker network inspect 网络ID
                            

img

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

                                docker run -itd --network=servicebridge01 centos
                            
                                docker inspect 容器ID
                            

img

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

                                docker run -itd centos
                            

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

                                docker network connect 网络ID 容器ID
                            
                                docker exec -it 容器ID bash
                            
                                ip addr
                            

img

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

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

                                exit
                            
                                docker exec -it 容器ID bash
                            
                                ping 容器IP
                            

img

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

                                exit
                            
                                docker container ls
                            

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

                                docker rm 容器ID -f
相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
337 2
|
4月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
165 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
6月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
220 0
|
9月前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
9月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
11月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
439 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
11月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
11月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
10月前
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。