Docker3小时入门:从零到精通容器化技术
·
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特性
- 增量更新:修改Compose文件后重新启动,只会更新变更的部分
- 数据持久化:默认情况下,
down命令不会删除挂载的卷 - 环境变量支持:可以通过
.env文件管理环境变量
六、一键部署中间件集群
文档提供了一个完整的compose.yaml文件,可以一键部署包括Redis、MySQL、Kafka、Nacos、OpenSearch等在内的多种常用中间件。
6.1 部署步骤
- 下载或复制提供的
compose.yaml文件 - 修改文件中的IP地址(将kafka的119.45.147.122改为自己的服务器IP)
- 执行命令启动所有服务:
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"]
八、常见问题与解决方案
- 容器启动失败:如果重启服务器后某些容器启动失败,只需再次执行
docker compose up -d即可 - 数据丢失:所有挂载的卷默认不会随容器删除而移除,数据安全有保障
- 端口冲突:确保主机端口没有被其他服务占用
- 资源不足:调整容器的内存限制(如OpenSearch的JVM参数)
结语
通过本文的学习,您应该已经掌握了Docker的核心概念和实用技巧。从基础的安装配置到复杂的多容器编排,Docker为现代应用开发提供了强大的支持。建议您在实际项目中多加练习,逐步深入理解Docker的更多高级特性。
希望这篇《Docker3小时入门》能帮助您快速上手Docker技术,为您的开发工作带来便利。如有任何问题,欢迎在评论区留言讨论。
更多推荐


所有评论(0)