Linux 容器技术
学习 Docker 和容器化技术,掌握现代应用部署和管理方法
容器技术概述
容器技术是现代软件开发和部署的核心技术,它提供了轻量级、可移植的应用程序打包和运行环境。 Docker 是最流行的容器平台,让应用程序能够在任何环境中一致运行。
Docker 基础
镜像、容器和仓库管理
容器编排
Docker Compose 和 Kubernetes
微服务架构
容器化微服务部署
Docker 基础操作
Docker 安装
# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# CentOS/RHEL
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
基本命令
# 查看版本
docker --version
docker info
# 镜像操作
docker images
docker pull nginx
docker rmi nginx
# 容器操作
docker ps
docker ps -a
docker run -d --name web nginx
docker stop web
docker rm web
Dockerfile 编写
基础 Dockerfile
# 使用官方 Node.js 镜像
FROM node:16-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY package*.json ./
# 安装依赖
RUN npm ci --only=production
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用
CMD ["npm", "start"]
构建和运行
# 构建镜像
docker build -t myapp:latest .
# 运行容器
docker run -d -p 3000:3000 --name myapp myapp:latest
# 查看日志
docker logs myapp
docker logs -f myapp
# 进入容器
docker exec -it myapp /bin/sh
Docker Compose
多容器应用
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
db:
image: postgres:13
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Compose 命令
# 启动服务
docker-compose up -d
# 查看状态
docker-compose ps
docker-compose logs
# 停止服务
docker-compose down
# 重建服务
docker-compose up --build
容器管理和监控
资源限制
# 限制内存和CPU
docker run -d --name web \
--memory=512m \
--cpus=0.5 \
nginx
# 查看资源使用
docker stats
docker stats web
数据卷管理
# 创建数据卷
docker volume create mydata
# 使用数据卷
docker run -d --name db \
-v mydata:/var/lib/mysql \
mysql:8.0
# 绑定挂载
docker run -d --name web \
-v /host/path:/container/path \
nginx
网络配置
# 创建网络
docker network create mynetwork
# 连接到网络
docker run -d --name web \
--network mynetwork \
nginx
# 查看网络
docker network ls
docker network inspect mynetwork
最佳实践
推荐做法
- 使用多阶段构建减小镜像大小
- 使用 .dockerignore 排除不必要文件
- 设置合适的资源限制
- 使用健康检查确保容器状态
- 定期更新基础镜像
避免的问题
- 在容器中运行多个进程
- 在镜像中存储敏感数据
- 使用 latest 标签部署生产环境
- 忽略容器安全扫描
- 不设置资源限制