Docker 讲解CentOS 8 版一、容器生态系统Docker 所处完整技术圈容器生态分为核心技术、平台技术、支持技术三层Docker 是生态基石完善生态决定容器技术健康发展。1. 容器核心技术单主机运行容器的基础作用让容器能在单台宿主机操作系统上正常运行。容器规范OCI全称Open Container Initiative开放容器倡议由 Docker、CoreOS、Google 等公司联合成立。 核心规范Runtime Spec运行时规范、Image Format Spec镜像格式规范。 意义保障不同容器Docker、rkt 等、不同 runtime 兼容实现跨平台可移植。容器 Runtime运行时容器真正运行的“环境”类比 Java 的 JVM主流 3 种Runtime特点关系runcDocker 自研默认 runtime100% 符合 OCIDocker 现在默认使用lxcLinux 老牌容器 runtime轻量Docker 早期用现已替换rktCoreOS 开发符合 OCI兼容 Docker 镜像独立容器 runtime容器管理工具对接 runtime给用户提供 CLI/API实现容器启停、管理lxdlxc 配套管理工具Docker EngineDocker 管理工具含 daemon 后台服务 docker 客户端rkt clirkt 配套管理工具容器定义工具定义容器内容、属性用于构建镜像Dockerfile文本文件记录镜像构建指令Docker 镜像容器运行的只读模板ACIrkt 容器镜像格式类比 Docker 镜像Registry镜像仓库统一存放镜像的仓库分公共/私有Docker HubDocker 官方公共仓库阿里云 ACR、华为云 SWR国内公共镜像仓库企业私有仓库自建存放内部镜像容器 OS专为容器定制的极简操作系统体积小、启动快、效率高CoreOS、Atomic、Ubuntu Core2. 容器平台技术容器集群化、分布式管理作用让容器从“单主机”升级为集群/分布式环境运行。容器编排引擎核心管理大规模容器集群调度、扩容、服务发现KubernetesK8sGoogle 主导行业标准Docker SwarmDocker 原生编排轻量MesosMarathon通用集群调度平台容器管理平台基于编排引擎提供可视化/简化管理Rancher、ContainerShip基于容器的 PaaS面向开发者屏蔽底层专注应用开发Deis、Flynn、Dokku3. 容器支持技术容器运维必备配套作用保障容器稳定、安全、高效运行。容器网络docker network、flannel、weave、calico服务发现etcd、consul、zookeeper监控docker ps/top/stats、sysdig、cAdvisor/Heapster、Weave Scope数据管理Flocker容器数据持久化/迁移日志管理docker logs、logspout安全性OpenSCAP镜像漏洞扫描二、Docker 基础认知What/Why/How1. 容器发展史时间线1979Unix V7 引入Chroot Jail最早容器化雏形2000FreeBSD Jail增强隔离2008LXCLinux Containers首个完整容器管理器2013Docker 首次发布基于 LXC简化容器使用2014Docker 自研 libcontainer替换 LXCGoogle 推出 LMCTFY2014.12CoreOS 发布 rkt2. What什么是容器容器是轻量级、可移植、自包含的软件打包技术。打包内容应用程序 所有依赖库、配置、运行时核心特性共享宿主机内核、进程级隔离、秒级启动、低资源消耗类比现实中的集装箱标准化、可跨环境运输3. Why为什么用容器解决核心痛点传统开发/部署痛点环境不一致、依赖冲突、迁移难、部署慢。容器优势Build Once, Run Anywhere一次打包到处运行开发/测试/生产环境一致轻量高效共享内核秒级启动一台服务器跑上千容器隔离安全进程级隔离容器间互不干扰快速部署/扩容镜像复用一键启停微服务适配天然适配微服务架构4. 容器 vs 虚拟机核心区别·超详细对比维度容器虚拟机VMware/KVM内核共享宿主机内核独立内核每个 VM 一个隔离级别进程级隔离资源/网络隔离系统级隔离完整操作系统隔离启动速度秒级/毫秒级分钟级镜像大小MB 级几十~几百GB 级几十资源消耗极低仅占用进程资源高完整系统开销运行密度单主机可跑 1000 容器单主机一般几十台 VM性能接近原生弱虚拟化损耗适用场景微服务、DevOps、云原生传统应用、操作系统级隔离5. Docker 架构C/S 架构·核心Docker 采用客户端-服务器C/S架构客户端与服务端可同机/跨机通信。客户端Docker Client工具docker 命令CLI 作用用户交互入口发送请求build/pull/run给 Docker Daemon。服务端Docker Daemon/dockerd后台进程Docker 核心管理镜像、容器、网络、数据卷。镜像Image只读模板创建容器的基础包含应用依赖配置。容器Container镜像的可运行实例唯一可写层隔离运行应用。Registry镜像仓库存储/分发镜像Docker Hub 是默认公共仓库。6. Docker 三大核心概念必记镜像Image只读、分层、可共享、不可修改容器Container镜像运行实例、可读写、独立进程、可启停仓库Repository镜像存储中心分公共/私有三、Docker 安装与配置CentOS Stream 81. 环境准备虚拟机配置基于 CentOS Stream 8 模板克隆虚拟机命名docker配置静态 IP192\.168\.108\.30网关192\.168\.2DNS192\.168\.2修改主机名hostnamectl set-hostname docker重启网卡生效nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.30/24 ipv4.gateway 192.168.2 ipv4.dns 192.168.2 autoconnect yes nmcli con up ens1602. 安装 Docker CE社区版步骤1卸载旧版本可选yum remove docker-ce步骤2安装依赖配置阿里云 Docker 源# 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 vim # 添加阿里云 Docker 仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 刷新缓存 yum makecache步骤3安装 Docker CEyum install -y docker-ce步骤4启动开机自启systemctl enable docker --now步骤5验证安装# 查看版本 docker --version # 查看运行状态 systemctl status docker3. 配置镜像加速器必做·加速拉取镜像默认 Docker Hub 国内慢配置阿里云/华为云加速器。阿里云加速器配置# 1. 创建配置目录 mkdir -p /etc/docker # 2. 写入加速器配置替换为自己的阿里云加速器地址 tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://spcqvmfn.mirror.aliyuncs.com] } EOF # 3. 生效配置 systemctl daemon-reload systemctl restart docker # 4. 验证查看 Registry Mirrors docker info华为云加速器配置tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://054b8ac70e80.mirror.swr.myhuaweicloud.com] } EOF systemctl daemon-reload systemctl restart docker4. Docker C/S 分离部署跨机管理架构Server192.168.108.30安装完整 Docker开放 2375 端口Client192.168.108.31仅安装客户端远程管理 ServerServer 端配置修改 Docker 服务开放 2375 端口vim /usr/lib/systemd/system/docker.service # 在 ExecStart 末尾添加-H tcp://0.0.0.0:2375 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd -H tcp://0.0.0.0:2375生效配置重启systemctl daemon-reload systemctl restart docker关闭防火墙systemctl stop firewalld验证端口监听yum install lsof lsof -i :2375Client 端配置仅安装 Docker 客户端yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache yum install -y docker-ce-cliClient 远程操作 Server# 远程执行 docker runServer 端创建容器 docker -H 192.168.108.30 run hello-world # 查看 Server 端镜像 docker -H 192.168.108.30 images5. 运行第一个容器hello-world# 拉取运行 hello-world 镜像 docker run hello-world # 清空实验环境 docker rm -f $(docker ps -aq) # 删除所有容器 docker rmi -f hello-world # 删除镜像6. 运行 Web 容器httpd# 后台运行主机 80 端口映射容器 80 端口 docker run -d -p 80:80 --name my-httpd httpd # 验证浏览器/ curl 访问主机 IP curl 192.168.108.30 # 输出It works!四、Docker 镜像核心·分层原理构建1. 镜像本质分层只读文件系统1内核与 rootfsbootfs系统启动文件内核加载后卸载rootfs用户空间文件/bin、/etc、/usr 等镜像仅包含 rootfs共享宿主机内核2分层结构核心优势镜像由多层只读文件系统叠加而成每一层对应一个构建指令共享特性多个镜像共用基础层节省磁盘/内存写时复制Copy-on-Write容器仅在最上层添加可写层镜像层只读修改仅在可写层生效不影响原镜像3镜像类型最小镜像scratch空镜像如 hello-world仅 13KBBase 镜像无父镜像精简系统镜像CentOS、Ubuntu、Alpine2. 镜像构建2 种方式方式1docker commit临时镜像·不推荐步骤运行容器 → 修改容器 → 提交为新镜像# 1. 启动 ubuntu 容器 docker run -it ubuntu # 2. 容器内安装 vim apt-get update apt-get install -y vim # 3. 退出容器查看容器 ID exit docker ps -a # 4. 提交为新镜像 docker commit 容器ID ubuntu-with-vim:1.0 # 查看新镜像 docker images缺点手动、不可复用、无版本、无法审计方式2Dockerfile推荐·自动化可复用Dockerfile文本格式构建脚本记录镜像所有构建指令1Dockerfile 语法规则指令大写参数小写指令从上到下顺序执行\#表示注释每条指令生成一个新镜像层2Dockerfile 常用指令语法示例指令作用示例FROM指定基础镜像第一条FROM centos:8MAINTAINER镜像作者MAINTAINER 张三RUN构建时执行命令生成新层RUN yum install \-y vimCOPY复制本地文件到镜像COPY \./file\.txt /root/ADD复制自动解压压缩包ADD jdk\.tar\.gz /usr/local/WORKDIR设置工作目录WORKDIR /appENV设置环境变量ENV JAVA\_HOME/usr/local/jdkEXPOSE声明容器端口EXPOSE 80CMD容器启动默认命令可覆盖CMD \[\\#34;nginx\\#34;, \\#34;\-g\\#34;\]ENTRYPOINT容器启动固定命令不可覆盖ENTRYPOINT \[\\#34;/bin/bash\\#34;\]3RUN/CMD/ENTRYPOINT 核心区别RUN构建镜像时执行安装软件、配置环境生成新镜像层CMD容器启动默认命令docker run 镜像 命令可覆盖ENTRYPOINT容器启动必执行CMD 仅作为参数传递4构建命令# -t镜像名:标签.构建上下文当前目录 docker build -t my-centos:1.0 . # 构建不使用缓存 docker build -t my-centos:1.0 --no-cache .3. 镜像缓存机制Docker 会缓存已构建的镜像层指令不变复用缓存加速构建指令变更/顺序调整缓存失效重新构建4. 镜像命名与标签Tag1镜像格式\[仓库地址/命名空间/\]镜像名:标签示例docker\.io/library/httpd:2\.4Docker Hub 官方、swr\.cn\-east\-3/gaoqiaodong/centos:1\.0华为云2latest 标签默认标签不代表最新版本生产环境必须指定具体标签3标签最佳实践版本迭代时多标签映射1.9.1具体版本1.91.9.x 最新11.x 最新latest所有版本最新# 打标签 docker tag myapp:1.9.1 myapp:1.9 docker tag myapp:1.9.1 myapp:1 docker tag myapp:1.9.1 myapp:latest5. 镜像常用命令# 查看镜像列表 docker images # 搜索镜像Docker Hub docker search nginx # 拉取镜像 docker pull nginx:1.24 # 删除镜像-f 强制 docker rmi -f nginx:1.24 # 查看镜像分层历史 docker history nginx:1.24 # 保存镜像为 tar docker save nginx:1.24 -o nginx.tar # 加载 tar 镜像 docker load -i nginx.tar五、Docker 容器操作数据卷网络1. 容器生命周期创建 → 启动 → 运行 → 暂停/停止 → 删除2. 容器常用命令高频# 1. 启动容器 # -d后台运行-p端口映射--name命名 docker run -d -p 80:80 --name my-nginx nginx # 2. 查看容器 docker ps # 运行中 docker ps -a # 所有含停止 docker ps -q # 仅显示容器 ID # 3. 进入容器 # -it交互模式终端 docker exec -it my-nginx bash # 4. 启停/重启容器 docker start my-nginx docker stop my-nginx docker restart my-nginx # 5. 删除容器-f 强制删除运行中 docker rm -f my-nginx docker rm -f $(docker ps -aq) # 批量删除所有容器 # 6. 查看容器日志 docker logs my-nginx docker logs -f my-nginx # 实时跟踪 # 7. 查看容器资源 docker stats my-nginx3. 容器数据卷数据持久化容器删除默认数据丢失数据卷实现持久化宿主机共享1数据卷挂载# 宿主机目录容器目录 docker run -d -p 80:80 -v /data/nginx:/usr/share/nginx/html my-nginx2数据卷特点数据卷独立于容器容器删除数据不丢宿主机与容器双向读写支持多个容器共享4. 容器网络Docker 内置网络驱动bridge默认桥接网络host共享宿主机网络none无网络overlay跨主机网络K8s六、Docker 仓库公共私有1. 公共仓库1Docker Hub官方公共仓库注册账号后上传/下载镜像# 登录 docker login # 打标签账号/镜像名 docker tag myapp:1.0 用户名/myapp:1.0 # 上传 docker push 用户名/myapp:1.0 # 下载 docker pull 用户名/myapp:1.02华为云 SWR/阿里云 ACR国内公共仓库步骤同上仅替换仓库地址2. 私有仓库1简易私有仓库registry# 启动私有仓库端口 5000挂载宿主机目录 docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2 # 打标签仓库地址/镜像名 docker tag myapp:1.0 localhost:5000/myapp:1.0 # 上传 docker push localhost:5000/myapp:1.0 # 下载 docker pull localhost:5000/myapp:1.02企业级私有仓库Harbor功能Web UI、权限管理、镜像扫描、日志审计、多项目管理1安装步骤下载离线包wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz解压移动tar -xvf harbor-offline-installer-v2.9.1.tgz mv harbor /opt/配置 Harborcd /opt/harbor cp harbor.yml.tmpl harbor.yml vim harbor.yml # 修改 hostname192.168.108.30 # 修改 harbor_admin_password自定义密码安装./prepare ./install.sh访问http://192\.168\.108\.30账号 admin密码自定义2Harbor 使用创建用户/项目配置 Docker 信任 Harborvim /etc/docker/daemon.json { insecure-registries: [192.168.108.30] } systemctl daemon-reload systemctl restart docker登录上传docker login 192.168.108.30 docker tag myapp:1.0 192.168.30/cloud/myapp:1.0 docker push 192.168.30/cloud/myapp:1.0七、Dockerfile 实操案例案例1自定义 CentOSSSH 镜像FROM centos:8 MAINTAINER test # 安装 ssh 服务 RUN yum install -y openssh-server # 生成 ssh 密钥 RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 设置 root 密码为 123456 RUN echo root:123456 | chpasswd # 暴露 22 端口 EXPOSE 22 # 启动 ssh 服务 CMD [/usr/sbin/sshd, -D]案例2自定义 CentOSJava8 镜像FROM centos:8 MAINTAINER test # 设置工作目录 WORKDIR /usr/local # 安装基础工具 RUN yum install -y vim net-tools # 解压 jdk 压缩包提前放在构建目录 ADD jdk-8u461-linux-x64.tar.gz /usr/local/ # 配置环境变量 ENV JAVA_HOME/usr/local/jdk1.8.0_461 ENV JRE_HOME$JAVA_HOME/jre ENV PATH$JAVA_HOME/bin:$PATH # 启动命令 CMD [/bin/bash]
云计算,docker详细讲解,运维
Docker 讲解CentOS 8 版一、容器生态系统Docker 所处完整技术圈容器生态分为核心技术、平台技术、支持技术三层Docker 是生态基石完善生态决定容器技术健康发展。1. 容器核心技术单主机运行容器的基础作用让容器能在单台宿主机操作系统上正常运行。容器规范OCI全称Open Container Initiative开放容器倡议由 Docker、CoreOS、Google 等公司联合成立。 核心规范Runtime Spec运行时规范、Image Format Spec镜像格式规范。 意义保障不同容器Docker、rkt 等、不同 runtime 兼容实现跨平台可移植。容器 Runtime运行时容器真正运行的“环境”类比 Java 的 JVM主流 3 种Runtime特点关系runcDocker 自研默认 runtime100% 符合 OCIDocker 现在默认使用lxcLinux 老牌容器 runtime轻量Docker 早期用现已替换rktCoreOS 开发符合 OCI兼容 Docker 镜像独立容器 runtime容器管理工具对接 runtime给用户提供 CLI/API实现容器启停、管理lxdlxc 配套管理工具Docker EngineDocker 管理工具含 daemon 后台服务 docker 客户端rkt clirkt 配套管理工具容器定义工具定义容器内容、属性用于构建镜像Dockerfile文本文件记录镜像构建指令Docker 镜像容器运行的只读模板ACIrkt 容器镜像格式类比 Docker 镜像Registry镜像仓库统一存放镜像的仓库分公共/私有Docker HubDocker 官方公共仓库阿里云 ACR、华为云 SWR国内公共镜像仓库企业私有仓库自建存放内部镜像容器 OS专为容器定制的极简操作系统体积小、启动快、效率高CoreOS、Atomic、Ubuntu Core2. 容器平台技术容器集群化、分布式管理作用让容器从“单主机”升级为集群/分布式环境运行。容器编排引擎核心管理大规模容器集群调度、扩容、服务发现KubernetesK8sGoogle 主导行业标准Docker SwarmDocker 原生编排轻量MesosMarathon通用集群调度平台容器管理平台基于编排引擎提供可视化/简化管理Rancher、ContainerShip基于容器的 PaaS面向开发者屏蔽底层专注应用开发Deis、Flynn、Dokku3. 容器支持技术容器运维必备配套作用保障容器稳定、安全、高效运行。容器网络docker network、flannel、weave、calico服务发现etcd、consul、zookeeper监控docker ps/top/stats、sysdig、cAdvisor/Heapster、Weave Scope数据管理Flocker容器数据持久化/迁移日志管理docker logs、logspout安全性OpenSCAP镜像漏洞扫描二、Docker 基础认知What/Why/How1. 容器发展史时间线1979Unix V7 引入Chroot Jail最早容器化雏形2000FreeBSD Jail增强隔离2008LXCLinux Containers首个完整容器管理器2013Docker 首次发布基于 LXC简化容器使用2014Docker 自研 libcontainer替换 LXCGoogle 推出 LMCTFY2014.12CoreOS 发布 rkt2. What什么是容器容器是轻量级、可移植、自包含的软件打包技术。打包内容应用程序 所有依赖库、配置、运行时核心特性共享宿主机内核、进程级隔离、秒级启动、低资源消耗类比现实中的集装箱标准化、可跨环境运输3. Why为什么用容器解决核心痛点传统开发/部署痛点环境不一致、依赖冲突、迁移难、部署慢。容器优势Build Once, Run Anywhere一次打包到处运行开发/测试/生产环境一致轻量高效共享内核秒级启动一台服务器跑上千容器隔离安全进程级隔离容器间互不干扰快速部署/扩容镜像复用一键启停微服务适配天然适配微服务架构4. 容器 vs 虚拟机核心区别·超详细对比维度容器虚拟机VMware/KVM内核共享宿主机内核独立内核每个 VM 一个隔离级别进程级隔离资源/网络隔离系统级隔离完整操作系统隔离启动速度秒级/毫秒级分钟级镜像大小MB 级几十~几百GB 级几十资源消耗极低仅占用进程资源高完整系统开销运行密度单主机可跑 1000 容器单主机一般几十台 VM性能接近原生弱虚拟化损耗适用场景微服务、DevOps、云原生传统应用、操作系统级隔离5. Docker 架构C/S 架构·核心Docker 采用客户端-服务器C/S架构客户端与服务端可同机/跨机通信。客户端Docker Client工具docker 命令CLI 作用用户交互入口发送请求build/pull/run给 Docker Daemon。服务端Docker Daemon/dockerd后台进程Docker 核心管理镜像、容器、网络、数据卷。镜像Image只读模板创建容器的基础包含应用依赖配置。容器Container镜像的可运行实例唯一可写层隔离运行应用。Registry镜像仓库存储/分发镜像Docker Hub 是默认公共仓库。6. Docker 三大核心概念必记镜像Image只读、分层、可共享、不可修改容器Container镜像运行实例、可读写、独立进程、可启停仓库Repository镜像存储中心分公共/私有三、Docker 安装与配置CentOS Stream 81. 环境准备虚拟机配置基于 CentOS Stream 8 模板克隆虚拟机命名docker配置静态 IP192\.168\.108\.30网关192\.168\.2DNS192\.168\.2修改主机名hostnamectl set-hostname docker重启网卡生效nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.30/24 ipv4.gateway 192.168.2 ipv4.dns 192.168.2 autoconnect yes nmcli con up ens1602. 安装 Docker CE社区版步骤1卸载旧版本可选yum remove docker-ce步骤2安装依赖配置阿里云 Docker 源# 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 vim # 添加阿里云 Docker 仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 刷新缓存 yum makecache步骤3安装 Docker CEyum install -y docker-ce步骤4启动开机自启systemctl enable docker --now步骤5验证安装# 查看版本 docker --version # 查看运行状态 systemctl status docker3. 配置镜像加速器必做·加速拉取镜像默认 Docker Hub 国内慢配置阿里云/华为云加速器。阿里云加速器配置# 1. 创建配置目录 mkdir -p /etc/docker # 2. 写入加速器配置替换为自己的阿里云加速器地址 tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://spcqvmfn.mirror.aliyuncs.com] } EOF # 3. 生效配置 systemctl daemon-reload systemctl restart docker # 4. 验证查看 Registry Mirrors docker info华为云加速器配置tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://054b8ac70e80.mirror.swr.myhuaweicloud.com] } EOF systemctl daemon-reload systemctl restart docker4. Docker C/S 分离部署跨机管理架构Server192.168.108.30安装完整 Docker开放 2375 端口Client192.168.108.31仅安装客户端远程管理 ServerServer 端配置修改 Docker 服务开放 2375 端口vim /usr/lib/systemd/system/docker.service # 在 ExecStart 末尾添加-H tcp://0.0.0.0:2375 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd -H tcp://0.0.0.0:2375生效配置重启systemctl daemon-reload systemctl restart docker关闭防火墙systemctl stop firewalld验证端口监听yum install lsof lsof -i :2375Client 端配置仅安装 Docker 客户端yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache yum install -y docker-ce-cliClient 远程操作 Server# 远程执行 docker runServer 端创建容器 docker -H 192.168.108.30 run hello-world # 查看 Server 端镜像 docker -H 192.168.108.30 images5. 运行第一个容器hello-world# 拉取运行 hello-world 镜像 docker run hello-world # 清空实验环境 docker rm -f $(docker ps -aq) # 删除所有容器 docker rmi -f hello-world # 删除镜像6. 运行 Web 容器httpd# 后台运行主机 80 端口映射容器 80 端口 docker run -d -p 80:80 --name my-httpd httpd # 验证浏览器/ curl 访问主机 IP curl 192.168.108.30 # 输出It works!四、Docker 镜像核心·分层原理构建1. 镜像本质分层只读文件系统1内核与 rootfsbootfs系统启动文件内核加载后卸载rootfs用户空间文件/bin、/etc、/usr 等镜像仅包含 rootfs共享宿主机内核2分层结构核心优势镜像由多层只读文件系统叠加而成每一层对应一个构建指令共享特性多个镜像共用基础层节省磁盘/内存写时复制Copy-on-Write容器仅在最上层添加可写层镜像层只读修改仅在可写层生效不影响原镜像3镜像类型最小镜像scratch空镜像如 hello-world仅 13KBBase 镜像无父镜像精简系统镜像CentOS、Ubuntu、Alpine2. 镜像构建2 种方式方式1docker commit临时镜像·不推荐步骤运行容器 → 修改容器 → 提交为新镜像# 1. 启动 ubuntu 容器 docker run -it ubuntu # 2. 容器内安装 vim apt-get update apt-get install -y vim # 3. 退出容器查看容器 ID exit docker ps -a # 4. 提交为新镜像 docker commit 容器ID ubuntu-with-vim:1.0 # 查看新镜像 docker images缺点手动、不可复用、无版本、无法审计方式2Dockerfile推荐·自动化可复用Dockerfile文本格式构建脚本记录镜像所有构建指令1Dockerfile 语法规则指令大写参数小写指令从上到下顺序执行\#表示注释每条指令生成一个新镜像层2Dockerfile 常用指令语法示例指令作用示例FROM指定基础镜像第一条FROM centos:8MAINTAINER镜像作者MAINTAINER 张三RUN构建时执行命令生成新层RUN yum install \-y vimCOPY复制本地文件到镜像COPY \./file\.txt /root/ADD复制自动解压压缩包ADD jdk\.tar\.gz /usr/local/WORKDIR设置工作目录WORKDIR /appENV设置环境变量ENV JAVA\_HOME/usr/local/jdkEXPOSE声明容器端口EXPOSE 80CMD容器启动默认命令可覆盖CMD \[\\#34;nginx\\#34;, \\#34;\-g\\#34;\]ENTRYPOINT容器启动固定命令不可覆盖ENTRYPOINT \[\\#34;/bin/bash\\#34;\]3RUN/CMD/ENTRYPOINT 核心区别RUN构建镜像时执行安装软件、配置环境生成新镜像层CMD容器启动默认命令docker run 镜像 命令可覆盖ENTRYPOINT容器启动必执行CMD 仅作为参数传递4构建命令# -t镜像名:标签.构建上下文当前目录 docker build -t my-centos:1.0 . # 构建不使用缓存 docker build -t my-centos:1.0 --no-cache .3. 镜像缓存机制Docker 会缓存已构建的镜像层指令不变复用缓存加速构建指令变更/顺序调整缓存失效重新构建4. 镜像命名与标签Tag1镜像格式\[仓库地址/命名空间/\]镜像名:标签示例docker\.io/library/httpd:2\.4Docker Hub 官方、swr\.cn\-east\-3/gaoqiaodong/centos:1\.0华为云2latest 标签默认标签不代表最新版本生产环境必须指定具体标签3标签最佳实践版本迭代时多标签映射1.9.1具体版本1.91.9.x 最新11.x 最新latest所有版本最新# 打标签 docker tag myapp:1.9.1 myapp:1.9 docker tag myapp:1.9.1 myapp:1 docker tag myapp:1.9.1 myapp:latest5. 镜像常用命令# 查看镜像列表 docker images # 搜索镜像Docker Hub docker search nginx # 拉取镜像 docker pull nginx:1.24 # 删除镜像-f 强制 docker rmi -f nginx:1.24 # 查看镜像分层历史 docker history nginx:1.24 # 保存镜像为 tar docker save nginx:1.24 -o nginx.tar # 加载 tar 镜像 docker load -i nginx.tar五、Docker 容器操作数据卷网络1. 容器生命周期创建 → 启动 → 运行 → 暂停/停止 → 删除2. 容器常用命令高频# 1. 启动容器 # -d后台运行-p端口映射--name命名 docker run -d -p 80:80 --name my-nginx nginx # 2. 查看容器 docker ps # 运行中 docker ps -a # 所有含停止 docker ps -q # 仅显示容器 ID # 3. 进入容器 # -it交互模式终端 docker exec -it my-nginx bash # 4. 启停/重启容器 docker start my-nginx docker stop my-nginx docker restart my-nginx # 5. 删除容器-f 强制删除运行中 docker rm -f my-nginx docker rm -f $(docker ps -aq) # 批量删除所有容器 # 6. 查看容器日志 docker logs my-nginx docker logs -f my-nginx # 实时跟踪 # 7. 查看容器资源 docker stats my-nginx3. 容器数据卷数据持久化容器删除默认数据丢失数据卷实现持久化宿主机共享1数据卷挂载# 宿主机目录容器目录 docker run -d -p 80:80 -v /data/nginx:/usr/share/nginx/html my-nginx2数据卷特点数据卷独立于容器容器删除数据不丢宿主机与容器双向读写支持多个容器共享4. 容器网络Docker 内置网络驱动bridge默认桥接网络host共享宿主机网络none无网络overlay跨主机网络K8s六、Docker 仓库公共私有1. 公共仓库1Docker Hub官方公共仓库注册账号后上传/下载镜像# 登录 docker login # 打标签账号/镜像名 docker tag myapp:1.0 用户名/myapp:1.0 # 上传 docker push 用户名/myapp:1.0 # 下载 docker pull 用户名/myapp:1.02华为云 SWR/阿里云 ACR国内公共仓库步骤同上仅替换仓库地址2. 私有仓库1简易私有仓库registry# 启动私有仓库端口 5000挂载宿主机目录 docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2 # 打标签仓库地址/镜像名 docker tag myapp:1.0 localhost:5000/myapp:1.0 # 上传 docker push localhost:5000/myapp:1.0 # 下载 docker pull localhost:5000/myapp:1.02企业级私有仓库Harbor功能Web UI、权限管理、镜像扫描、日志审计、多项目管理1安装步骤下载离线包wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz解压移动tar -xvf harbor-offline-installer-v2.9.1.tgz mv harbor /opt/配置 Harborcd /opt/harbor cp harbor.yml.tmpl harbor.yml vim harbor.yml # 修改 hostname192.168.108.30 # 修改 harbor_admin_password自定义密码安装./prepare ./install.sh访问http://192\.168\.108\.30账号 admin密码自定义2Harbor 使用创建用户/项目配置 Docker 信任 Harborvim /etc/docker/daemon.json { insecure-registries: [192.168.108.30] } systemctl daemon-reload systemctl restart docker登录上传docker login 192.168.108.30 docker tag myapp:1.0 192.168.30/cloud/myapp:1.0 docker push 192.168.30/cloud/myapp:1.0七、Dockerfile 实操案例案例1自定义 CentOSSSH 镜像FROM centos:8 MAINTAINER test # 安装 ssh 服务 RUN yum install -y openssh-server # 生成 ssh 密钥 RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 设置 root 密码为 123456 RUN echo root:123456 | chpasswd # 暴露 22 端口 EXPOSE 22 # 启动 ssh 服务 CMD [/usr/sbin/sshd, -D]案例2自定义 CentOSJava8 镜像FROM centos:8 MAINTAINER test # 设置工作目录 WORKDIR /usr/local # 安装基础工具 RUN yum install -y vim net-tools # 解压 jdk 压缩包提前放在构建目录 ADD jdk-8u461-linux-x64.tar.gz /usr/local/ # 配置环境变量 ENV JAVA_HOME/usr/local/jdk1.8.0_461 ENV JRE_HOME$JAVA_HOME/jre ENV PATH$JAVA_HOME/bin:$PATH # 启动命令 CMD [/bin/bash]