Docker容器技术入门与实战指南
1. Docker 快速入门实操指南刚接触Docker时我被它一次构建到处运行的理念深深吸引。作为从业十年的老码农我见过太多在我机器上能跑的悲剧。Docker就像集装箱标准化了海运一样彻底改变了应用交付的方式。这篇教程将从零开始带你快速掌握Docker的核心操作避开我当年踩过的那些坑。Docker本质上是一个轻量级的虚拟化工具它通过容器技术将应用及其依赖打包成标准单元。与虚拟机不同容器直接共享主机系统内核启动只需毫秒级时间资源占用也少得多。对于开发者这意味着再也不用为环境不一致头疼对于运维则可以像搭积木一样部署服务。2. 基础环境搭建2.1 安装Docker引擎在Ubuntu 22.04上安装Docker只需三条命令sudo apt update sudo apt install docker.io sudo systemctl enable --now docker验证安装是否成功docker --version sudo docker run hello-world注意生产环境建议使用官方Docker CE版本但学习阶段用系统仓库的docker.io更便捷。Windows/macOS用户直接下载Docker Desktop即可。2.2 配置镜像加速国内访问Docker Hub速度较慢修改/etc/docker/daemon.json不存在则新建{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }重启服务生效sudo systemctl restart docker3. 核心概念实战3.1 镜像操作拉取Ubuntu镜像docker pull ubuntu:22.04查看本地镜像docker images删除镜像docker rmi ubuntu:22.04技巧使用docker image prune定期清理悬空镜像节省磁盘空间3.2 容器生命周期启动交互式容器docker run -it --name my_ubuntu ubuntu:22.04 bash后台运行容器docker run -d --name web nginx查看运行中的容器docker ps停止/启动容器docker stop web docker start web进入运行中的容器docker exec -it web bash删除容器docker rm web4. Dockerfile实战4.1 编写第一个Dockerfile创建flask-app目录新建app.pyfrom flask import Flask app Flask(__name__) app.route(/) def hello(): return Hello Docker! if __name__ __main__: app.run(host0.0.0.0, port5000)编写DockerfileFROM python:3.9-slim WORKDIR /app COPY . . RUN pip install flask EXPOSE 5000 CMD [python, app.py]4.2 构建与运行构建镜像docker build -t flask-demo .运行容器docker run -d -p 5000:5000 --name flask-app flask-demo访问http://localhost:5000即可看到结果5. 数据持久化方案5.1 挂载主机目录docker run -v /宿主机路径:/容器路径 -d mysql5.2 使用数据卷创建数据卷docker volume create db_data使用数据卷docker run -v db_data:/var/lib/mysql -d mysql6. 网络配置技巧查看网络列表docker network ls创建自定义网络docker network create my_net连接容器到网络docker network connect my_net container17. 常见问题排查7.1 容器启动失败查看日志docker logs 容器名7.2 端口冲突检查端口占用netstat -tulnp | grep 端口号7.3 磁盘空间不足清理无用资源docker system prune -a8. 生产环境建议永远不要使用latest标签容器应该保持无状态限制容器资源使用docker run -m 512m --cpus1.5使用docker-compose编排多容器应用定期更新基础镜像经过这些年的实践我发现Docker最强大的不是技术本身而是它带来的标准化思维。当所有环境都变成可版本控制的代码整个交付流程就会变得无比顺畅。建议初学者多动手实践从简单的单容器应用开始逐步过渡到复杂架构。