1. Docker CLI入门:从零开始掌握容器管理

第一次接触Docker时,我完全被各种命令搞晕了。直到后来才发现,Docker CLI就像是一个万能遥控器,只要记住几个关键按钮,就能轻松操控整个容器世界。让我们从最基础的安装开始,一步步揭开Docker CLI的神秘面纱。

安装Docker其实比想象中简单得多。在Ubuntu系统上,只需要执行以下命令就能完成安装:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

安装完成后,千万别忘了把当前用户加入docker组,否则每次都要sudo太麻烦了:

sudo usermod -aG docker $USER

验证安装是否成功时,我喜欢用这个组合命令:

docker --version && docker run hello-world

这个命令不仅能显示Docker版本,还会自动下载测试镜像并运行,一次性完成两项验证。第一次看到"Hello from Docker!"的提示时,那种成就感至今难忘。

2. 核心命令实战:镜像与容器操作指南

2.1 镜像管理三板斧

镜像就像容器的模板,管理好镜像是使用Docker的第一步。我常用的镜像操作组合是:

docker pull nginx:latest  # 下载最新版nginx
docker images             # 查看本地镜像列表
docker rmi nginx:latest   # 删除指定镜像

有个小技巧:使用docker image prune -a可以一键清理所有未被使用的镜像,特别适合开发环境定期清理。记得有一次我无意中清理出了20多GB空间,才发现自己积累了这么多临时镜像。

2.2 容器生命周期管理

容器的启停管理是日常最频繁的操作。这是我总结的最佳实践流程:

docker run -d --name my_nginx -p 8080:80 nginx  # 后台运行容器
docker ps                                      # 查看运行中容器
docker exec -it my_nginx bash                  # 进入容器终端
docker stop my_nginx                          # 停止容器
docker start my_nginx                         # 再次启动
docker rm my_nginx                            # 删除容器

特别注意-d参数是让容器在后台运行,而-it组合则允许我们交互式操作容器。曾经我忘记加-d参数,结果终端被占用,不得不另开窗口操作,这个教训让我记住了参数的重要性。

3. 高级应用场景:多容器编排实战

3.1 Docker Compose编排Web服务

单容器操作只是开始,真正的威力在于多容器编排。下面这个docker-compose.yml文件是我在项目中常用的模板:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

启动这个组合服务只需要:

docker-compose up -d

这个配置实现了Nginx和MySQL的联动,还把本地html目录映射到了容器内。有一次项目紧急上线,我就是用这个模板在10分钟内搭建好了测试环境。

3.2 容器网络配置技巧

容器间的网络通信是个重点也是难点。我习惯先创建自定义网络:

docker network create app_network

然后让服务都加入这个网络:

services:
  web:
    networks:
      - app_network
  db:
    networks:
      - app_network

这样web服务中就可以直接用db作为主机名访问数据库了。曾经因为网络配置不当导致容器间无法通信,排查了半天才发现问题,这个经验让我深刻理解了Docker网络的重要性。

4. 生产环境必备:Docker运维技巧

4.1 日志管理与监控

生产环境中,日志就是救命稻草。我常用的日志命令组合是:

docker logs -f --tail 100 container_name  # 实时查看最后100行日志
docker stats                             # 查看容器资源占用

对于重要服务,我还会配置日志驱动:

docker run --log-driver=syslog --log-opt syslog-address=udp://logserver:514 my_app

这样所有日志都会集中到日志服务器,方便统一管理。记得有次线上故障,就是靠集中日志快速定位了问题所在。

4.2 数据持久化方案

容器本身是临时的,数据持久化必须重视。我推荐的使用方式是:

docker volume create db_data
docker run -v db_data:/var/lib/mysql mysql

对于已有目录挂载,我更倾向于使用绝对路径:

docker run -v /host/path:/container/path nginx

曾经因为没做数据卷,容器重启后数据全丢,这个惨痛教训让我养成了必用数据卷的好习惯。现在我的所有数据库容器都会配置数据卷,再也不用担心数据丢失了。

更多推荐