Docker 容器化技术标准化笔记

📅 2026/7/5 3:06:30
Docker 容器化技术标准化笔记
一、Docker 核心概念1. 什么是容器化技术将应用 应用运行所需的全部依赖环境打包封装成一个镜像文件这个镜像可以在任意安装了 Docker 的系统上直接运行一次打包、到处运行。Docker 是目前最主流的容器化技术实现。2. 容器化 vs 虚拟机VM对比表格对比项虚拟机 VMDocker 容器虚拟化层级硬件级虚拟化基于 Hypervisor系统级虚拟化基于操作系统原理虚拟出整套硬件每个虚拟机有独立的内核系统共享宿主机内核用 namespace 和 cgroup 做隔离资源利用率低虚拟硬件 系统占用大量资源高只有应用本身没有额外系统开销启动速度分钟级秒级安全性 / 稳定性更高硬件级隔离稍低共享内核隔离3. Docker 两大核心底层技术namespace 命名空间实现隔离让每个容器觉得自己有独立的一套系统环境互相看不见PID namespace进程隔离容器里的进程和宿主机不冲突NET namespace网络隔离每个容器有独立的 IP、端口、网卡MNT namespace文件系统隔离容器有自己的根目录UTS namespace主机名隔离容器可以自己设主机名USER namespace用户隔离容器里的 root 和宿主机 root 不是一回事IPC namespace进程间通信隔离cgroup 控制组实现资源限制控制每个容器能用多少硬件资源防止一个容器占满宿主机限制 CPU 使用量限制内存大小限制磁盘 IO限制网络带宽补充容器有优先级优先级高的容器在宿主机资源紧张时不容易被 OOM 杀掉。4. Docker 三要素表格概念解释类比镜像 Image应用 依赖环境打包好的只读文件是模板相当于安装包 / 类 class容器 Container镜像运行起来的实例就是跑起来的应用相当于安装好运行中的程序 / 对象 instance仓库 Repository存放镜像的地方相当于应用商店 / 软件仓库仓库分类公有仓库Docker Hub官方、阿里云镜像仓库、网易云等私有仓库Harbor企业自建私有仓库最常用二、Docker 环境部署CentOS 7 专用1. 先卸载旧版本如果有的话bash运行# 卸载系统自带的旧docker如果有 yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine2. 安装 yum 工具包bash运行# 安装yum-config-manager等工具 yum install -y yum-utils device-mapper-persistent-data lvm23. 配置华为云 Docker yum 源国内下载快bash运行# 添加docker-ce的yum源文件用华为云镜像地址 yum-config-manager --add-repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo # 把源里的官方地址替换成华为云地址加速下载 sed -i sdownload.docker.comrepo.huaweicloud.com/docker-ce /etc/yum.repos.d/docker-ce.repoCentOS 7 不用改 releasever系统变量自动识别是 7。4. 查看可用的 Docker 版本bash运行# 列出所有可安装的docker-ce版本从高到低排序 yum list docker-ce --showduplicates | sort -r5. 安装 Docker方式一安装最新稳定版bash运行# 安装docker引擎、命令行工具、容器运行时 yum install -y docker-ce docker-ce-cli containerd.io方式二安装指定版本生产推荐固定版本更稳定bash运行# 指定版本号安装格式docker-ce-版本号 yum install -y docker-ce-24.0.6-1.el7 docker-ce-cli-24.0.6-1.el7 containerd.io注意版本号后面要带-1.el7CentOS 7 的包都带这个后缀。6. 启动 Docker 并设置开机自启bash运行# 启动docker服务 systemctl start docker # 设置开机自动启动 systemctl enable docker # 验证安装成功查看版本 docker version能看到 Client 和 Server 两部分信息就说明安装成功了。三、配置镜像加速器国内访问 Docker Hub 官方仓库很慢配置加速器从国内镜像站拉取。1. 创建 docker 配置目录如果不存在bash运行mkdir -p /etc/docker2. 编写加速器配置文件bash运行# 用tee命令写入配置daemon.json是docker的主配置文件 tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.m.daocloud.io, https://noohub.ru, https://huecker.io, https://dockerhub.timeweb.cloud ] } EOF3. 重启 Docker 生效bash运行# 重载systemd配置重启docker服务 systemctl daemon-reload systemctl restart docker # 验证加速器是否生效看输出里的 Registry Mirrors docker info输出里找到Registry Mirrors:那一段能看到你配的加速器地址就成功了。四、Docker 镜像操作带案例 注释1. 查看本地所有镜像bash运行docker images # 或者等价命令 docker image ls输出字段说明REPOSITORY镜像名称TAG版本标签latest 表示最新版IMAGE ID镜像唯一 IDSIZE镜像大小2. 搜索镜像从 Docker Hub 找镜像bash运行# 搜索nginx相关的镜像 docker search nginx输出里OFFICIAL列是OK的就是官方镜像优先用官方的安全有保障。3. 下载拉取镜像bash运行# 格式docker pull 镜像名:版本号 # 不写版本号默认拉取 latest 最新版 # 案例1拉取最新版nginx docker pull nginx # 案例2拉取指定版本的nginx docker pull nginx:1.24 # 案例3拉取centos 7镜像 docker pull centos:74. 给镜像改名字打标签bash运行# 格式docker tag 原镜像名:版本 新镜像名:新版本 # 作用给镜像起个别名或者推送到私有仓库前必须改成仓库地址格式 # 案例1给本地nginx镜像改个名 docker tag nginx:latest mynginx:v1 # 案例2改成阿里云仓库格式推送前必须改 docker tag nginx:latest registry.cn-beijing.aliyuncs.com/你的命名空间/nginx:v1注意tag 只是给镜像加了个别名不是复制了一份两个名字指向同一个镜像 ID删一个另一个还在。5. 删除镜像bash运行# 格式docker rmi 镜像名:版本 或者 镜像ID # 案例1按名字删 docker rmi mynginx:v1 # 案例2按ID删ID写前几位就行能唯一识别就可以 docker rmi 605c77 # 案例3强制删除有容器在用也强行删 docker rmi -f nginx:latest注意如果镜像已经被容器使用了不加-f会删不掉要先删容器再删镜像。五、Docker 仓库操作阿里云镜像仓库为例1. 登录私有仓库bash运行# 格式docker login --username用户名 仓库地址 docker login --username你的阿里云账号 registry.cn-beijing.aliyuncs.com执行后输入密码阿里云仓库的访问密码不是登录密码提示Login Succeeded就登录成功了。2. 退出登录bash运行docker logout registry.cn-beijing.aliyuncs.com3. 推送镜像到私有仓库两步走先改名成仓库格式再 push 推送。bash运行# 第一步给本地镜像打标签改成仓库要求的格式 # 格式docker tag 本地镜像 仓库地址/命名空间/仓库名:版本 docker tag nginx:latest registry.cn-beijing.aliyuncs.com/你的命名空间/nginx:v1 # 第二步推送到仓库 docker push registry.cn-beijing.aliyuncs.com/你的命名空间/nginx:v14. 从私有仓库拉取镜像bash运行docker pull registry.cn-beijing.aliyuncs.com/你的命名空间/nginx:v1六、Docker 容器操作重点带案例 注释核心原则容器里必须有一个前台运行的守护进程没有前台进程容器会立刻退出。 容器的生命周期 主进程的生命周期主进程挂了容器就停了。1. 创建并启动容器docker run 最常用命令格式bash运行docker run [参数] 镜像名 [启动命令]常用参数表格参数作用-d后台运行守护进程模式返回容器 ID-i交互式保持标准输入打开-t分配一个伪终端-it一般一起用交互式进入容器--name给容器起个名字不用每次用 ID-p 宿主机端口:容器端口端口映射把容器端口映射到宿主机上外部才能访问-P大写 P随机映射容器所有暴露的端口到宿主机--rm临时容器退出后自动删除测试用-v 宿主机路径:容器路径数据卷挂载容器数据存到宿主机上-e 环境变量值给容器传环境变量实战案例bash运行# 案例1后台运行一个nginx容器起名mynginx把80端口映射到宿主机8080 docker run -d --name mynginx -p 8080:80 nginx # -d 后台跑 # --name 容器名叫mynginx # -p 8080:80 宿主机8080端口映射到容器的80端口 # 用的镜像是nginx:latest # 验证浏览器访问 宿主机IP:8080 能看到nginx默认页面 # 案例2交互式运行一个centos容器进去敲命令退出自动删除 docker run -it --rm centos:7 /bin/bash # -it 交互式终端 # --rm 退出就删 # /bin/bash 启动后执行bash命令进入shell # 输入 exit 退出容器自动删掉 # 案例3随机端口映射 docker run -d -P nginx # 大写P自动随机选个宿主机端口映射到容器80 # 用docker ps看映射了哪个端口2. 查看容器bash运行# 查看正在运行的容器 docker ps # 查看所有容器包括停止的 docker ps -a输出关键字段CONTAINER ID容器 IDIMAGE用的哪个镜像COMMAND容器启动命令STATUS状态Up 是运行中Exited 是已停止PORTS端口映射信息NAMES容器名字3. 进入运行中的容器推荐方式docker exec生产用这个bash运行# 格式docker exec -it 容器名/容器ID /bin/bash docker exec -it mynginx /bin/bash # -it 交互式终端 # mynginx 容器名 # /bin/bash 执行bash命令进入shell特点exit 退出容器容器还在运行不会停。这是和 attach 最大的区别生产环境用 exec。不推荐docker attachbash运行docker attach mynginx特点exit 退出后容器会停止基本不用了解就行。4. 容器启停操作bash运行# 启动一个停止的容器 docker start 容器名/ID # 停止一个运行的容器优雅停止给进程发信号让它保存退出 docker stop 容器名/ID # 强制杀死容器直接发KILL信号不等进程退出 docker kill 容器名/ID # 重启容器 docker restart 容器名/ID # 暂停容器容器还在内存里只是不干活了冻结住 docker pause 容器名/ID # 恢复暂停的容器 docker unpause 容器名/ID区分stop正常停止容器退出资源释放pause暂停挂起还占着内存随时可以恢复5. 删除容器bash运行# 删除一个已停止的容器 docker rm 容器名/ID # 强制删除运行中的容器也能删先杀再删 docker rm -f 容器名/ID # 批量删除所有已停止的容器清理用 docker rm $(docker ps -aq)6. 查看容器日志bash运行# 查看容器的标准输出日志 docker logs 容器名/ID # 持续跟踪日志类似tail -f实时看 docker logs -f 容器名/ID # 看最后100行 docker logs --tail 100 容器名/ID排错必备容器启动失败先看日志找原因。7. 查看容器 / 镜像详细信息bash运行# 查看容器的所有详细配置IP、挂载、网络、环境变量等 docker inspect 容器名/ID # 查看镜像的详细信息 docker inspect 镜像名输出是 JSON 格式信息非常全排错、查 IP 都用这个。8. 宿主机和容器之间互拷文件bash运行# 格式docker cp 源路径 目标路径 # 容器路径写法容器名:容器内路径 # 案例1把宿主机的文件拷进容器里 docker cp /root/index.html mynginx:/usr/share/nginx/html/ # 把宿主机的index.html拷到mynginx容器的网站根目录 # 案例2把容器里的文件拷出来到宿主机 docker cp mynginx:/etc/nginx/nginx.conf /root/ # 把容器里的nginx配置文件拷到宿主机/root下容器里没有 vi、没有 yum改配置就拷出来改完再拷回去。9. 查看容器文件系统的变化bash运行docker diff 容器名/ID输出三种标记AAdded新增的文件 / 目录DDeleted删除的文件 / 目录CChanged修改过的文件 / 目录可以看到容器运行后对文件系统做了哪些改动。七、CentOS 7 注意事项补充内核版本要求CentOS 7 内核 3.10 都支持 Docker默认内核就满足防火墙CentOS 7 默认 firewalldDocker 会自动管理 iptables 规则一般不用手动改SELinux如果开着 SELinux挂载目录可能有权限问题可以临时关了测试setenforce 0docker-composeCentOS 7 上 docker-compose 是单独的二进制文件不是插件需要单独下载安装