Docker核心概念与Linux环境部署实战指南

发布时间:2026/7/25 2:58:52
Docker核心概念与Linux环境部署实战指南 1. Docker 部署与核心概念解析第一次接触Docker时我被它一次构建处处运行的理念深深吸引。与传统虚拟机相比Docker容器轻量级、启动快、资源占用少让开发环境的搭建从小时级缩短到分钟级。记得去年接手一个遗留项目时用Docker快速复现了包含MySQLRedisNode.js的复杂环境避免了在我机器上能跑的经典问题。Docker的核心是镜像(Image)和容器(Container)。镜像好比软件的安装包容器则是运行中的实例。就像下载QQ安装包(镜像)后可以登录多个账号(容器)。官方镜像仓库Docker Hub类似手机应用商店存储着超过800万个公共镜像。2. 部署实战Linux环境安装指南2.1 系统准备与依赖安装在Ubuntu 22.04上部署时需要先卸载可能的旧版本sudo apt-get remove docker docker-engine docker.io containerd runc更新apt索引后安装依赖工具sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release关键提示企业内网环境需配置代理时建议在/etc/environment设置HTTP_PROXY变量而非修改docker.service文件2.2 官方源安装Docker Engine添加Docker官方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验证安装成功的经典操作sudo docker run hello-world3. 开发者必知的23个核心命令3.1 镜像生命周期管理搜索远程仓库的Nginx镜像docker search nginx --filter is-officialtrue拉取指定版本镜像不指定tag默认latestdocker pull nginx:1.23-alpine查看本地镜像列表含占用空间docker images --format table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}删除悬空镜像none标签的中间层docker image prune3.2 容器操作黄金命令启动容器并映射端口-d后台运行-p端口映射docker run -d -p 8080:80 --name my_nginx nginx查看运行中容器-a显示所有状态docker ps -a --format table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}进入容器内部shell推荐exec而非attachdocker exec -it my_nginx /bin/bash查看容器日志--tail限制行数-f实时跟踪docker logs -f --tail 100 my_nginx3.3 高级运维技巧限制容器内存使用避免OOM杀死宿主机进程docker run -d -m 512m --memory-swap 1g redis数据卷持久化存储推荐具名卷而非绑定挂载docker volume create mysql_data docker run -d -v mysql_data:/var/lib/mysql mysql查看容器资源占用类似Linux top命令docker stats my_nginx4. 生产环境避坑指南4.1 权限与安全配置避免使用root运行容器使用--user参数docker run -d --user 1000:1000 nginx血泪教训曾经有同事在容器内误执行rm -rf /因未做用户隔离导致宿主机文件被删4.2 网络优化实践创建自定义网络优于默认的bridgedocker network create --driver bridge --subnet 172.28.0.0/16 my_net容器间通过网络别名通信替代IP直连docker run -d --network my_net --network-alias mysql mysql:8.04.3 镜像构建最佳实践多阶段构建示例减小最终镜像体积# 第一阶段构建环境 FROM golang:1.19 as builder WORKDIR /app COPY . . RUN go build -o server . # 第二阶段运行环境 FROM alpine:latest COPY --frombuilder /app/server /usr/local/bin/ CMD [server].dockerignore文件配置加速构建过程.git node_modules *.log5. 企业级应用扩展5.1 Docker Compose编排实战典型web服务编排文件docker-compose.ymlversion: 3.8 services: web: image: nginx:alpine ports: - 8000: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 ps # 查看服务状态 docker-compose down # 停止并清理5.2 私有镜像仓库搭建启动Registry容器带基本认证mkdir auth docker run --entrypoint htpasswd httpd:2 -Bbn admin password auth/htpasswd docker run -d -p 5000:5000 \ --restartalways \ --name registry \ -v $(pwd)/auth:/auth \ -e REGISTRY_AUTHhtpasswd \ -e REGISTRY_AUTH_HTPASSWD_REALMRegistry Realm \ -e REGISTRY_AUTH_HTPASSWD_PATH/auth/htpasswd \ registry:2推送镜像到私有仓库docker tag nginx localhost:5000/my-nginx docker push localhost:5000/my-nginx6. 监控与日志方案6.1 容器日志收集配置JSON日志驱动推荐生产环境使用docker run -d \ --log-driverjson-file \ --log-opt max-size10m \ --log-opt max-file3 \ nginx6.2 资源监控方案使用cAdvisorPrometheus监控docker run -d \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --namecadvisor \ google/cadvisor:latest7. 性能调优经验谈7.1 存储驱动选择查看当前存储驱动docker info | grep Storage Driver推荐配置根据文件系统选择文件系统推荐驱动适用场景ext4/xfsoverlay2通用场景btrfsbtrfs需要快照功能zfszfs企业级存储环境7.2 内核参数优化调整文件描述符限制echo fs.file-max1000000 /etc/sysctl.conf sysctl -pTCP连接回收优化echo net.ipv4.tcp_tw_reuse1 /etc/sysctl.conf echo net.ipv4.tcp_fin_timeout30 /etc/sysctl.conf