多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Docker容器化部署与核心命令实战指南

Docker容器化部署与核心命令实战指南 1. Docker部署与常用命令实战指南作为现代应用开发和运维的核心工具Docker已经彻底改变了软件交付的方式。记得我第一次在生产环境部署Docker容器时那种一次构建到处运行的体验简直让人上瘾——再也不用为环境差异导致的诡异问题熬夜调试了。本文将分享我在多个项目中积累的Docker实战经验从基础部署到高效使用技巧帮你避开那些我踩过的坑。2. Docker核心概念与部署准备2.1 为什么选择Docker传统虚拟化技术如VMware需要模拟完整的操作系统而Docker容器直接共享主机内核这使得容器启动速度极快毫秒级 vs 分钟级资源占用极小MB级 vs GB级性能损耗几乎可以忽略1%在实际项目中我曾用一台16G内存的服务器运行了30个容器同样的硬件如果使用虚拟机可能连5个都跑不起来。2.2 部署前的系统检查安装Docker前务必检查# 检查内核版本需3.10 uname -r # 检查虚拟化支持必须有输出 grep -E vmx|svm /proc/cpuinfo # 检查cgroups挂载确保所有条目为yes mount | grep cgroup注意Windows/macOS用户直接安装Docker Desktop即可它会自动配置所需环境。但Windows家庭版需要先安装WSL2。2.3 多平台安装指南Ubuntu/Debian系# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 设置仓库 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 添加GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 验证安装 sudo docker run hello-worldCentOS/RHEL系# 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 设置仓库 sudo yum install -y yum-utils 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 docker-compose-plugin # 启动服务 sudo systemctl start docker # 验证安装 sudo docker run hello-world避坑提示国内用户建议立即配置镜像加速器否则拉取镜像时会非常慢。创建或修改/etc/docker/daemon.json{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }然后执行sudo systemctl restart docker3. Docker核心操作全解析3.1 镜像管理实战技巧搜索和拉取镜像# 搜索官方Redis镜像 docker search redis # 拉取指定版本不指定tag默认latest docker pull redis:6.2-alpine镜像管理命令# 列出本地镜像-a显示所有包括中间层 docker images # 查看镜像详情 docker inspect redis:6.2-alpine # 删除镜像强制删除加-f docker rmi redis:6.2-alpine # 导出镜像到文件 docker save -o redis.tar redis:6.2-alpine # 从文件导入镜像 docker load -i redis.tar构建自定义镜像# 示例Dockerfile FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [python, app.py]构建命令# -t指定标签.表示当前目录 docker build -t my-python-app . # 带缓存清理的构建适合CI环境 docker build --no-cache -t my-python-app .3.2 容器生命周期管理启动容器# 基本启动-d后台运行--name指定名称 docker run -d --name my-redis redis:6.2-alpine # 带端口映射 docker run -d -p 6379:6379 --name my-redis redis:6.2-alpine # 带数据卷挂载 docker run -d -v /host/path:/container/path --name my-redis redis:6.2-alpine # 带环境变量 docker run -d -e REDIS_PASSWORDsecret --name my-redis redis:6.2-alpine容器操作# 列出运行中的容器-a显示所有 docker ps # 启动/停止/重启容器 docker start/stop/restart my-redis # 进入容器shell推荐使用exec docker exec -it my-redis /bin/sh # 查看容器日志-f实时跟踪 docker logs -f my-redis # 删除容器-f强制删除运行中的 docker rm -f my-redis资源限制# 限制CPU1.5个核心 docker run -d --cpus1.5 --name my-redis redis:6.2-alpine # 限制内存512MB docker run -d -m 512m --name my-redis redis:6.2-alpine3.3 网络与存储配置网络管理# 创建自定义网络 docker network create my-network # 容器加入网络 docker run -d --network my-network --name my-redis redis:6.2-alpine # 查看网络详情 docker network inspect my-network数据持久化# 创建命名卷 docker volume create my-data # 使用数据卷 docker run -d -v my-data:/data --name my-redis redis:6.2-alpine # 清理无用卷 docker volume prune4. 生产环境最佳实践4.1 容器编排基础使用Docker Composeversion: 3.8 services: web: image: nginx:alpine ports: - 80:80 volumes: - ./html:/usr/share/nginx/html db: image: postgres:13 environment: POSTGRES_PASSWORD: example volumes: - pg-data:/var/lib/postgresql/data volumes: pg-data:操作命令# 启动服务 docker compose up -d # 停止服务 docker compose down # 查看服务状态 docker compose ps4.2 监控与日志收集容器监控# 查看资源使用情况 docker stats # 查看进程树 docker top my-redis # 导出容器状态快照 docker inspect my-redis container_state.json日志处理技巧# 按时间过滤日志 docker logs --since 2023-01-01 --until 2023-01-02 my-redis # 限制日志大小全局配置 { log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }4.3 安全加固措施最小权限原则# 以非root用户运行 docker run -d --user 1000:1000 --name my-redis redis:6.2-alpine # 只读文件系统 docker run -d --read-only --name my-redis redis:6.2-alpine安全扫描# 使用docker scan需登录Docker Hub docker scan redis:6.2-alpine5. 疑难问题排查指南5.1 常见错误解决方案问题1端口冲突Error response from daemon: driver failed programming external connectivity on endpoint my-redis: Bind for 0.0.0.0:6379 failed: port is already allocated解决方案# 查找占用进程 sudo lsof -i :6379 # 或者停止冲突容器 docker stop $(docker ps -q --filter ancestorredis)问题2存储驱动问题Error response from daemon: failed to create shim task: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting /var/lib/docker/overlay2/... to rootfs at /... caused: no such file or directory解决方案# 清理docker系统 docker system prune -a # 重启docker服务 sudo systemctl restart docker5.2 性能优化技巧镜像构建优化使用.dockerignore文件排除无关文件多阶段构建减少最终镜像大小合并RUN命令减少镜像层数使用Alpine等精简基础镜像容器运行时优化# 限制CPU优先级 docker run -d --cpu-shares512 --name my-redis redis:6.2-alpine # 禁用swap docker run -d --memory-swappiness0 --name my-redis redis:6.2-alpine6. 高级应用场景6.1 CI/CD集成示例GitLab CI配置stages: - build - test - deploy build: stage: build image: docker:20.10 services: - docker:dind script: - docker build -t my-app . - docker tag my-app registry.example.com/my-group/my-app:$CI_COMMIT_SHA - docker push registry.example.com/my-group/my-app:$CI_COMMIT_SHA6.2 多架构支持构建x86和ARM镜像# 创建构建器实例 docker buildx create --name mybuilder --use # 启动构建器 docker buildx inspect --bootstrap # 构建多平台镜像 docker buildx build --platform linux/amd64,linux/arm64 -t my-app . --push在实际项目中我曾用这套方案成功为树莓派集群和云服务器部署同一套镜像省去了大量架构适配工作。
返回列表