Docker3小时入门:从零到精通容器化技术

引言

随着云计算和微服务架构的普及,Docker已经成为现代软件开发不可或缺的工具。本文将带您在3小时内快速掌握Docker的核心概念和实用技巧,包括安装配置、基础命令、存储与网络管理,以及使用Docker Compose编排复杂应用。

一、Docker安装与配置

1.1 环境准备

在开始之前,您需要准备以下环境:

  • 操作系统:推荐使用CentOS 7.9
  • 终端工具:WindTerm(下载地址 )
  • 云平台:阿里云、腾讯云、华为云等国内主流云服务商

1.2 安装Docker

Docker的安装过程非常简单,以下是常见Linux系统的安装命令:


bash

# 卸载旧版本
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

# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 验证安装
sudo docker run hello-world

二、Docker基础命令

掌握Docker的基本命令是使用容器的第一步。以下是常用命令速查表:

命令 描述 示例
docker run 创建并运行容器 docker run -d -p 80:80 nginx
docker ps 查看运行中的容器 docker ps -a
docker stop 停止容器 docker stop <容器ID>
docker rm 删除容器 docker rm <容器ID>
docker images 查看镜像列表 docker images
docker rmi 删除镜像 docker rmi <镜像ID>
docker exec 进入运行中的容器 docker exec -it <容器ID> bash
docker logs 查看容器日志 docker logs -f <容器ID>

三、Docker存储管理

Docker提供了两种主要的数据持久化方式:

3.1 目录挂载

将主机目录直接挂载到容器内部:


bash

docker run -v /app/nginx/html:/usr/share/nginx/html nginx

3.2 卷映射

使用Docker管理的卷进行数据存储:


bash

docker run -v nginx-conf:/etc/nginx nginx

两种方式的对比:

特性 目录挂载 卷映射
管理方式 手动管理主机目录 Docker自动管理
性能 直接访问主机文件系统,性能高 略低于目录挂载
备份 需要手动备份 可通过Docker命令备份
移植性 依赖主机目录结构 与主机无关,移植性好

四、Docker网络配置

4.1 自定义网络

创建自定义网络可以实现容器间通过主机名通信:


bash

docker network create my-network
docker run --network my-network --name container1 my-image
docker run --network my-network --name container2 my-image

4.2 常见网络模式

模式 描述 适用场景
bridge 默认网络模式,容器通过虚拟网桥连接 单主机容器通信
host 容器直接使用主机网络 需要高性能网络的应用
none 无网络配置 特殊安全需求
overlay 跨主机容器网络 Swarm集群环境

五、Docker Compose编排

Docker Compose允许您使用YAML文件定义和运行多容器应用。

5.1 基本命令


bash

# 启动服务
docker compose up -d

# 停止服务
docker compose down

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f

5.2 compose.yaml示例


yaml

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend

volumes:
  db-data:

networks:
  frontend:
  backend:

5.3 Compose特性

  1. 增量更新:修改Compose文件后重新启动,只会更新变更的部分
  2. 数据持久化:默认情况下,down命令不会删除挂载的卷
  3. 环境变量支持:可以通过.env文件管理环境变量

六、一键部署中间件集群

文档提供了一个完整的compose.yaml文件,可以一键部署包括Redis、MySQL、Kafka、Nacos、OpenSearch等在内的多种常用中间件。

6.1 部署步骤

  1. 下载或复制提供的compose.yaml文件
  2. 修改文件中的IP地址(将kafka的119.45.147.122改为自己的服务器IP)
  3. 执行命令启动所有服务:

bash

docker compose up -d

6.2 各组件访问信息

组件(容器名) 介绍 访问地址 账号/密码 特性
Redis(redis) k-v库 你的ip:6379 单密码模式: 123456 已开启AOF
MySQL(mysql) 数据库 你的ip:3306 root/123456 默认utf8mb4字符集
OpenSearch(opensearch-node1/2) 检索引擎 你的ip:9200 - 内存512mb;两个节点
opensearch-dashboards search可视化 你的ip:5601 - -
Zookeeper(zookeeper) 分布式协调 你的ip:2181 - 允许匿名登录
kafka(kafka) 消息队列 你的ip:9092 外部访问:9094 - 占用内存512mb
kafka-ui(kafka-ui) kafka可视化 你的ip:8080 - -
nacos(nacos) 注册/配置中心 你的ip:8848 nacos/nacos 持久化数据到MySQL
prometheus(prometheus) 时序数据库 你的ip:9090 - -
grafana(grafana) 监控可视化 你的ip:3000 admin/admin -

6.3 可视化工具下载

  • Zookeeper可视化工具:PrettyZoo
  • Redis可视化工具:Another Redis Desktop Manager

七、Dockerfile基础

虽然文档中没有详细展开Dockerfile的内容,但作为Docker的重要组成部分,这里简单介绍:


dockerfile

# 基础镜像
FROM node:14-alpine

# 工作目录
WORKDIR /app

# 复制文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制源代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["npm", "start"]

八、常见问题与解决方案

  1. 容器启动失败:如果重启服务器后某些容器启动失败,只需再次执行docker compose up -d即可
  2. 数据丢失:所有挂载的卷默认不会随容器删除而移除,数据安全有保障
  3. 端口冲突:确保主机端口没有被其他服务占用
  4. 资源不足:调整容器的内存限制(如OpenSearch的JVM参数)

结语

通过本文的学习,您应该已经掌握了Docker的核心概念和实用技巧。从基础的安装配置到复杂的多容器编排,Docker为现代应用开发提供了强大的支持。建议您在实际项目中多加练习,逐步深入理解Docker的更多高级特性。

希望这篇《Docker3小时入门》能帮助您快速上手Docker技术,为您的开发工作带来便利。如有任何问题,欢迎在评论区留言讨论。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐