Appearance
Docker
什么是 Docker
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后在任何环境中运行。Docker 容器提供了隔离的运行环境,确保应用程序在不同环境中一致运行。
Docker 的特点
1. 轻量级
- 容器共享宿主机的内核
- 比虚拟机更轻量
- 启动速度快
2. 可移植性
- 容器可以在任何支持 Docker 的环境中运行
- 消除了环境差异
- 简化了部署流程
3. 隔离性
- 容器之间相互隔离
- 资源限制和隔离
- 提高安全性
4. 可扩展性
- 快速创建和销毁容器
- 支持集群管理
- 适合微服务架构
5. 版本控制
- 镜像版本管理
- 回滚能力
- 一致性部署
Docker 的基本概念
1. 镜像(Image)
- 容器的模板
- 包含应用程序及其依赖项
- 分层存储
2. 容器(Container)
- 镜像的运行实例
- 隔离的运行环境
- 可读写的文件系统
3. 仓库(Repository)
- 存储镜像的地方
- 公共或私有
- Docker Hub 是最大的公共仓库
4. Dockerfile
- 定义如何构建镜像的文件
- 包含一系列命令
- 自动化构建过程
5. Docker Compose
- 定义和运行多容器应用的工具
- 使用 YAML 文件配置应用服务
- 简化多容器管理
安装 Docker
Windows
- 访问 Docker 官网
- 下载 Docker Desktop
- 运行安装程序
- 按照向导完成安装
macOS
- 访问 Docker 官网
- 下载 Docker Desktop
- 运行安装程序
- 按照向导完成安装
Linux
bash
# Ubuntu/Debian
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# CentOS/RHEL
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable dockerDocker 基本操作
镜像操作
bash
# 拉取镜像
docker pull ubuntu:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi ubuntu:latest
# 构建镜像
docker build -t myapp:latest .容器操作
bash
# 运行容器
docker run -d --name mycontainer -p 8080:80 ubuntu:latest
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 停止容器
docker stop mycontainer
# 启动容器
docker start mycontainer
# 删除容器
docker rm mycontainer
# 进入容器
docker exec -it mycontainer bashDockerfile 示例
dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]Docker Compose 示例
yaml
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:Docker 在 CI/CD 中的应用
1. 构建环境
- 提供一致的构建环境
- 隔离构建过程
- 快速创建和销毁
2. 测试环境
- 模拟生产环境
- 隔离测试过程
- 并行运行测试
3. 部署
- 容器化应用
- 简化部署流程
- 确保环境一致性
4. 持续集成
- 与 Jenkins、GitHub Actions 等集成
- 自动化构建和测试
- 快速反馈
Docker 最佳实践
1. 镜像优化
- 使用 Alpine 基础镜像
- 减少镜像层数
- 清理不必要的文件
2. 安全
- 使用官方镜像
- 定期更新镜像
- 扫描镜像漏洞
3. 性能
- 合理使用缓存
- 限制容器资源
- 优化存储驱动
4. 管理
- 使用 Docker Compose 管理多容器应用
- 使用 Docker Swarm 或 Kubernetes 管理集群
- 监控容器状态
Docker 常见问题
1. 权限问题
- 使用 sudo 命令
- 添加用户到 docker 组
2. 网络问题
- 检查网络配置
- 确保端口映射正确
- 检查防火墙设置
3. 存储问题
- 合理使用卷
- 定期清理未使用的容器和镜像
- 监控磁盘使用情况
4. 性能问题
- 限制容器资源
- 优化应用程序
- 使用适当的存储驱动
学习资源
实践练习
- 安装和配置 Docker
- 创建一个 Dockerfile
- 构建和运行容器
- 使用 Docker Compose 管理多容器应用
- 集成 Docker 到 CI/CD 流水线