千家信息网

Docker架构、镜像和容器

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,一、Docker概述Docker是在Linux容器里面运行的开源工具,是一种轻量级的虚拟机。其设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应组件的封装、发
千家信息网最后更新 2025年12月02日Docker架构、镜像和容器

一、Docker概述

Docker是在Linux容器里面运行的开源工具,是一种轻量级的虚拟机。其设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应组件的封装、发布、部署、运行等生命周期的管理,达到组件级别的"一次封装,到处运行"的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
Docker的三大核心概念:镜像、容器、仓库,安装Docker以及围绕镜像和容器的具体操作。

二、相比传统虚拟机Dokcer的优势

1、Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多。
2、Docker核心解决的问题是利用容器来时实现类似VM的功能,从而以更加节省的硬件资源提供给用户更多的计算资源,所以Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证性能的同时,减小了系统开销,使得在一台主机上同时运行数千个Docker容器成为可能。
3、Docker操作方便,还可以通过Dockerfile配置文件支持灵活的自动化创建和部署。

三、Docker和传统虚拟机的架构

Docke之所以拥有众多优势,跟操作系统虚拟化自身的特点是分不开的。传统虚拟机需要拥有额外的虚拟机管理程序。

四、Docker核心概念及安装

1、镜像(Image)
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如:一个镜像可以是一个完整的CentOS操作系统环境,成为一个CentOS镜像;可以是一个安装了MySQL的应用程序,称之为一个MySQL镜像等等。
Docker提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用。
2、容器(container)
Docker的容器是从镜像创建的运行实列,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互补可见的,可以保证平台的安全性。还可以把容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。
3、仓库(Repository)
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公共仓库(Pulic)或者私有仓库(Private),这样一来当下次要在另一台机器上使用这个镜像的时候,只需要从仓库上pull下来就可以了。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库,每个仓库几种存放某一类镜像,并且使用不同的标签来区分它们。目前最大的公共仓库是DockerHUb,其中存放了数量庞大的镜像供用户下载使用。

4、Docker的安装
vi /etc/yum.repos.d/CentOS-Base.repo //配置yum源
在末行添加以下内容:
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

yum install -y docker-engine    //安装Docker引擎systemctl enable docker     //开机自启systemctl start docker      //启动docker

五、Docker镜像操作

Docker运行容器前需要本地存在对应的镜像,如果不存在本地镜像Docker就会尝试从默认镜像仓库https://hub.docker.com 下载,这是由Docker官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。
1、搜索镜像(默认从Docker Hub查询)
获取镜像的三种方式:
1)下载镜像(默认从Docker Hub下载)
2)把容器转换为镜像
3)制作镜像(通过dockerfile生成镜像)
docker search httpd //查找所有httpd相关的镜像

2、下载镜像(默认从Docker Hub下载)
docker pull httpd //拉取apache镜像

3、查看镜像
docker images //查看本地镜像列表

各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:表示镜像的标签
IMAGE ID:表示镜像的ID
CREATED:表示镜像创建时间
SIZE:表示镜像大小

docker tag httpd apache:test //给镜像添加新的标签

4、删除镜像

docker rmi 仓库名:标签docker rmi -f 镜像ID  //永久删除镜像docker rmi -f $(docker images | grep "none" | awk "{print \$3}")       //删除没有使用的镜像

5、导出和导入镜像

docker save -o 导出文件名 导出的镜像docker save -o httpd01 httpd        //导出镜像


docker load <导出的文件

注意:导入之前要将原先的httpd镜像删除,否则不执行导入操作
6、上传镜像
docker push 镜像名称 //上传镜像到共有仓库

六、Docker容器的操作

容器时Docker的另一个核心概念。简单说,容器时镜像的一个运行实例,是独立运行的一个或一组应用以及他们所需的运行环境,包括文件系统、系统类库、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。
1、容器的创建和启动
docker create -it httpd /bin/bash //创容器,默认时没有运行的
-i:让容器的输入保持打开
-t:让Docker分配一个伪终端

docker ps  //查看正在运行的容器docker ps -a    //查看所有容器

docker start 容器ID   //启动容器docker stop 容器ID    //停止容器


创建并启动容器用docker run命令,等与先执行docker create命令,在执行docker start命令。
docker run来创建容器时过程如下:
1)首先检查本地是否存在指定的镜像,当镜像不存在时,会从公共仓库下载
2)再利用镜像创建并启动一个容器
3)接着分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层
4)从宿主主机配置的网桥结构中桥接一个虚拟接口到容器中
5)分配一个地址池中的IP地址给容器
6)执行用户指定的应用程序
7)指定完毕后容器被终止运行

docker run 镜像名 /bin/bash -c ls //创建并启动容器指定一条shell命令
-c:指定的命令

docker ps -a //查看centos状态,发现执行完shell命令之后停止了

docker run -d centos /bin/bash -c "while true;do echo hello;done" //创建并启动容器,在后台持续运行

-d:让容器以守护形态在后台运行,但是注意的是后台必须要有正运行的程序,否则容器会停止。
2、容器的进入
docker exec -it 容器ID/名称 /bin/bash //进入容器

exit或ctrl+d退出伪终端
3、容器导出和导入
docker export 容器ID/名称 > 文件名 //容器的导出

cat 文件名 | docker import - 生成的镜像名:标签 //将容器文件导入成镜像

4、容器的删除

docker ps -adocker rm 容器ID      //删除容器,无法删除正在运行的容器docker rm -f d4e863a654aa   //强制删除运行中的容器,不建议。docker container prune      //删除所有停止的容器docker rm $(docker ps -qf status=exited)    //删除指定状态的容器

七、Docker的仓库

docker login //登录共有仓库,通过注册账号登录

八、Docker资源控制(优化)

1、限制CPU的使用速率
在Docker中可以通过--cpu-quota选项来限制CPU的使用使用率,CPU的百分比是以1000为单位的。
docker run --cpu-quota 20000 镜像名 //CPU的使用率限定为20%
2、多任务按比例分享CPU
当由多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源,可以通过--cpu-shares选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。
以下实现三个容器A、B、C,占用CPU资源的比列为1:1:2

docker run --cpu-shares 1024 镜像名     //对应容器Adocker run --cpu-shares 1024 镜像名  //对应容器Bdocker run --cpu-shares 2048 镜像名  //对应容器C

3、限制CPU内核使用
在Docker中可以使用--cpuset-cpus选项来使某些程序独享CPU内核,以便提高其处理速度,对应的Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。选项后直接跟参数0、1、2......表示第1个内核、第2个内核、第3个内核,与/proc/cpuinfo中的CPU编号(processer)相同。
如果服务器有16个核心,那么CPU编号为0~15,使容器绑定第1~4个内核使用。
docker run --cpuset-cpus 0,1,2,3 镜像名
4、对内存使用的限制
在Docker中可以通过docker run -m命令来限制容器的内存使用量,相应的Cgroup配置文件为/sys/fs/cgroup/memory/memory.limit_in_bytes。但是需要注意:一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存使用在限制范围之内,进程就会杀死。
docker run -m 512m 镜像名 //限制容器的内存为512M
5、对blkio的限制
如果时在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以通过--device-write-iops选项来限制写入的iops,相应的还有--device-read-bps选项可以限制读取的iops。但是这种方法只能针对blkio限制的设备(device),而不是分区。相应Cgroup写配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.throttle.write_iops_device。
docker run --device-write-bps /dev/sda1:1mb 镜像名 //限制/dev/sdb1的写入iops为1MB

容器 镜像 仓库 运行 限制 文件 命令 系统 内核 资源 应用 配置 可以通过 用户 程序 内存 标签 核心 传统 使用率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据仓库是什么数据库集合 全民参与宣传网络安全 查数据库q绑手机 四川大学的网络安全是一流学科吗 上海财务软件开发流程 未转变者看不到服务器怎么办 不是面向对象的软件开发方法 怎样用网络技术促进学生学习 石河子仕牢网络技术有限公司 网易版战斗服务器 荣耀v40弹窗服务器异常请重试 网络安全宣传周如何防范 服务器安装是什么意思 沙宣视频软件开发 互联网 诞生的科技企业 医院搭建一个服务器多少钱 深圳市江夏网络技术有限公司 数据库数据读excel 苹果怎么备份上一次数据库 个人买个服务器能干嘛 网络技术标准化工作小组 加强水利网络安全管理 微信小程序实现查询数据库 textbox数据库增删改 北京酷划在线网络技术公司 隆回警方维护网络安全再添战果 地图软件开发最新官方版 我的世界时空之城手机版服务器 高科技软件开发注意事项 5g智能工厂软件开发成本
0