容器技术技术入门与Docker环境部署
目录
一、Docker 概述
1. 什么是 Docker
2. Docker 的优势
3. 容器技术和传统虚拟化区别
4. Dockers 的应用场景
5. Docker 核心概念
(1)镜像
(2)容器
(3)仓库
二、Docker 安装
三、Docker 镜像操作
1. 获取镜像
2. 查看镜像信息
3. 查看镜像的详细信息
4. 修改镜像标签
5. 删除镜像
6. 存出镜像和载入镜像
四、Docker 容器操作
1. 容器的创建与启动
2. 容器的终止
3. 进入容器
4. 容器导出
5. 容器导入生成镜像
6. 容器删除
一、Docker 概述
1. 什么是 Docker
-
本质:开源 容器化平台,将应用及其依赖打包成轻量级、可移植的容器。
-
核心需求与 Docker 价值:创建云平台应用需脱离底层硬件、支持随时随地获取资源,Docker 用容器技术,为应用创建轻量、可移植、自给自足容器,简化部署 / 调试,提升效率 。
-
容器技术基础认知:属主流轻量级虚拟化技术,将应用及依赖打包成含代码、运行环境等的独立 “盒子” ;容器间相互隔离,有独立文件系统、进程空间、网络接口,共享宿主机 OS 内核 ,后续可从概念、原理、与传统虚拟化对比、优势、应用场景深入理解其价值 。
-
核心能力:
-
一次构建,随处运行(解决环境差异问题)
-
进程级隔离(无需完整操作系统
-
2. Docker 的优势
性能高效:秒级启停,接近原生性能,计算损耗几乎为 0,远超传统虚拟机。
资源优用:共享宿主机内核,单机可承载上千容器,大幅节省资源。
隔离可控:容器间相互隔离,通过资源限制保障稳定安全,适配多数场景。
移植便捷:应用及依赖打包成独立单元,支持多环境无缝迁移。
部署灵活:快速启停、创建销毁容器,便于应用快速部署与弹性扩展。
架构轻量:操作系统层虚拟化,无需额外虚拟机 OS 层,减少资源开销 。
3. 容器技术和传统虚拟化区别
维度 | 传统虚拟机 | Docker 容器 |
---|---|---|
虚拟化层 | 通过 Hypervisor 建 VM,含完整 OS | 操作系统层虚拟化,共享宿主机内核 |
资源占用 | 为 VM 配独立 OS,资源占用大 | 仅含应用 + 依赖,资源占用少 |
隔离性 | 独立 OS 实现高隔离 | 隔离性稍弱,合理配置可满足多数场景 |
性能 | 额外虚拟化层带来性能开销 | 直接运行于宿主机内核,性能接近原生 |
启动速度 | 分钟级 | 秒级 |
计算能力损耗 | 损耗 50% 左右 | 几乎无 |
系统支持量(单机) | 几十个 | 上千个 |
隔离性 | 完全隔离 | 资源限制 |
4. Dockers 的应用场景
-
开发环境管理:开发人员可以使用容器来创建一致的开发环境,确保团队成员之间的环境一致性,提高开发效率。
-
持续集成和持续部署(CI/CD):在 CI/CD 流程中,容器可以帮助实现应用的快速打包、测试和部署,实现自动化的软件开发流程。
-
微服务架构:容器技术非常适合做微服务架构,每个微服务可以打包成一个独立的容器,独立开发、测试和部署,提高系统的可伸缩性和容错性。
-
云计算:云服务提供商可以利用容器技术为用户提供更高效、灵活的计算资源,用户可以根据自己的需求快速创建和管理容器化的应用。
5. Docker 核心概念
(1)镜像
-
是什么:只读模板(含应用代码+依赖环境),类似虚拟机镜像。
-
关键特性:
-
分层存储(每步操作生成新层,复用节省空间)
-
通过
Dockerfile
定义构建步骤
-
(2)容器
-
是什么:镜像的 运行时实例(一个镜像可启动多个容器)。
-
关键操作:
docker run -d nginx:latest # 启动容器(后台运行) docker exec -it my-nginx bash # 进入容器终端 docker stop my-nginx # 停止容器
(3)仓库
-
是什么:集中存储和分发镜像的服务。
-
分类:
仓库类型 说明 示例 公共仓库 官方托管,开源镜像 Docker Hub 私有仓库 企业内网部署,保护私有镜像 Harbor, Nexus
二、Docker 安装
本安装方式使用阿里的软件仓库
1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/=enforcing/=disabled' /etc/selinux/config2.下载Docker的repo文件
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.替换仓库地址
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo4.更新索引并安装docker
dnf clean all
dnf makecache
dnf -y install docker-ce5.添加国内镜像
vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
]
}6.优化内核参数
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 # IPv4 IP 转发功能开启
net.bridge.bridge-nf-call-ip6tables = 1 #网桥的 IPv6 防火墙规则调用开启
net.bridge.bridge-nf-call-iptables = 1 #网桥的 IPv4 防火墙规则调用开启
三、Docker 镜像操作
镜像是模板(只读),容器是实例(可写)。
1. 获取镜像
docker pull [镜像名]:[标签]
-
作用:从仓库(默认 Docker Hub)下载镜像
-
关键选项:
-
:标签
:指定镜像版本(如ubuntu:22.04
,不写默认latest
) -
--platform
:指定平台(如linux/amd64
)
-
-
示例:
docker pull ubuntu:22.04 # 下载 Ubuntu 22.04 docker pull nginx:1.23-alpine # 下载 Nginx 的 Alpine 版本
2. 查看镜像信息
docker images [镜像名]
-
作用:列出本地镜像基础信息
-
关键输出:
-
REPOSITORY
:镜像仓库来源 -
TAG
:版本标签 -
IMAGE ID
:镜像唯一标识(前12位) -
CREATED
:创建时间 -
SIZE
:镜像大小
-
-
示例:
# 列出所有镜像 docker images # 只查看 nginx 镜像 docker images nginx
3. 查看镜像的详细信息
docker inspect 名字|ID
-
作用:获取镜像的完整元数据(JSON 格式)
-
关键信息:
-
镜像层级(
RootFS.Layers
) -
环境变量(
Config.Env
) -
启动命令(
Config.Cmd
) -
创建时间(
Created
)
-
- 示例:
# 查看 ubuntu:22.04 的详细信息
docker inspect ubuntu:22.04 # 过滤特定信息(如获取架构)
docker inspect ubuntu:22.04 --format='{{.Architecture}}'
4. 修改镜像标签
docker tag [原镜像名]:[原标签] [新镜像名]:[新标签]
-
作用:为镜像创建新别名(不复制数据,仅新增引用)
-
使用场景:
-
上传镜像到私有仓库前重命名
-
为同一镜像创建多版本标签
-
-
示例:
# 为 ubuntu:22.04 添加私有仓库标签 docker tag ubuntu:22.04 my-registry.com/ubuntu:prod # 为同一镜像创建测试标签 docker tag ubuntu:22.04 ubuntu:test
5. 删除镜像
docker rmi [镜像ID或名称]
-
关键选项:
-
-f
:强制删除(即使有容器依赖) -
--no-prune
:保留被删除镜像的未使用父层
-
-
注意事项:
-
镜像被容器使用时需先停止容器
-
被依赖的镜像需先删除子镜像
-
-
示例:
# 删除单个镜像 docker rmi nginx:alpine # 强制删除(即使有容器运行) docker rmi -f ubuntu:22.04 # 清理所有未被使用的镜像 docker image prune -a
6. 存出镜像和载入镜像
# 导出为 .tar 文件
docker save -o [文件名].tar [镜像名]# 从 .tar 文件导入
docker load -i [文件名].tardocker load<目标导入
-
作用:镜像迁移或备份
-
参数:
-o
:指定输出文件(save)
-i
:指定输入文件(load) -
示例:
docker save -o nginx-backup.tar nginx:latest docker load -i nginx-backup.tar
四、Docker 容器操作
1. 容器的创建与启动
docker run [选项] [镜像名] [启动命令]
核心选项:
选项 | 作用 |
---|---|
-d | 后台运行(守护模式) |
--name | 指定容器名称 |
-it | 交互式终端(通常配合 /bin/bash ) |
-p | 端口映射(格式 主机端口:容器端口 ) |
-v | 数据卷挂载(格式 主机目录:容器目录 ) |
--rm | 容器退出时自动删除 |
-e | 设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123 ) |
示例:
# 启动后台运行的 Nginx
docker run -d --name web -p 8080:80 nginx # 启动临时交互式容器(退出自动删除)
docker run -it --rm ubuntu:22.04 /bin/bash
2. 容器的终止
# 正常停止(发送 SIGTERM)
docker stop [容器名]
# 强制停止(发送 SIGKILL)
docker kill [容器名]
-
区别:
-
stop
:允许进程清理资源(推荐) -
kill
:立即终止进程(进程无响应时使用)
-
-
示例:
# 优雅停止 web 容器 docker stop web # 强制停止卡死的容器 docker kill web
3. 进入容器
docker exec [选项] [容器名] [命令]
-
核心选项:
-
-it
:分配交互式终端(必须) -
-u
:指定用户(如-u root
)
-
-
注意事项:
-
只能进入运行中的容器
-
Alpine 镜像使用
/bin/sh
(非/bin/bash
)
-
-
示例:
# 进入 web 容器的 bash 终端 docker exec -it web /bin/bash # 以 root 身份执行命令 docker exec -u root web apt update
4. 容器导出
docker export -o [文件名].tar [容器名]
-
作用:将容器文件系统导出为 tar 包(不包含历史层)
-
与镜像导出的区别:
操作 导出对象 包含历史层 适合场景 docker save
镜像 是 完整镜像迁移 docker export
容器 否 快速转移运行环境
示例:
# 导出 web 容器
docker export -o web-container.tar web
5. 容器导入生成镜像
docker import [文件名].tar [新镜像名]:[标签]
-
作用:将容器导出文件转换为镜像
-
特点:
-
生成的新镜像无历史层
-
丢失原始镜像的元数据(如 ENV、CMD 等)
-
-
示例:
# 从 tar 文件创建镜像 docker import web-container.tar my-web:latest # 验证新镜像 docker run -d my-web:latest
6. 容器删除
docker rm [容器名]
-
关键选项:
-
-f
:强制删除运行中的容器 -
-v
:同时删除关联的匿名卷
-
-
注意事项:
-
删除前需停止容器(或使用
-f
) -
重要数据务必用
-v
卷挂载避免丢失
-
-
示例:
# 删除已停止的容器 docker rm web # 强制删除运行中的容器及其匿名卷 docker rm -fv web # 删除所有停止的容器 docker container prune