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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 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
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
44 2
|
8天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
9天前
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
3天前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
4天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
10天前
|
Cloud Native 持续交付 云计算
云原生技术入门与实践
【10月更文挑战第37天】本文旨在为初学者提供云原生技术的基础知识和实践指南。我们将从云原生的概念出发,探讨其在现代软件开发中的重要性,并介绍相关的核心技术。通过实际的代码示例,我们展示了如何在云平台上部署和管理应用,以及如何利用云原生架构提高系统的可伸缩性、弹性和可靠性。无论你是云原生领域的新手,还是希望深化理解的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
|
10天前
|
存储 Cloud Native 持续交付
云原生入门:从理论到实践
【10月更文挑战第38天】云原生技术正在重塑软件开发和运维的面貌。本文将带你走进云原生的世界,理解其核心理念,并探索如何将这些理念应用于实际项目中。我们将一起学习容器化、微服务架构、持续集成与持续部署(CI/CD)等关键概念,并通过代码示例加深理解。无论你是云原生新手还是希望深化知识的开发者,这篇文章都将为你提供宝贵的知识和启示。
19 3
|
9天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!