Docker详细学习
Docker 详解:从零开始全面理解容器化技术
什么是 Docker?一个生动的比喻
想象一下您要搬家:
传统方式:把家具、电器、日用品一个个打包,搬到新家后重新拆包、布置,可能还会发现有些东西不兼容(比如电源插座不匹配)
Docker方式:直接把整个房间(包括所有家具、装饰、电器)做成一个可移动的"集装箱",搬到任何地方都能立即使用,环境完全一致
Docker 就是这个"应用集装箱"系统,它让应用程序及其所有依赖项被打包在一起,可以在任何支持 Docker 的环境中一致地运行。
Docker和容器是两个不同的概念,Docker只是一个容器化的解决方案和平台。容器是一种虚拟化技术,和虚拟机类似,也是一个独立的环境,可以在这个环境中运行应用程序,和虚拟机不同的是,它并不需要运行一个完整的操作系统,而是使用宿主机的操作系统
Docker是cs架构模式
容器化:将应用程序打包成容器,然后再容器中运行应用程序的过程
容器化过程 :1.创建一个dockerfile,来告诉Docker构建应用程序镜像所需要的步骤和配置
2.使用Dockerfile来构建镜像 Dockerfile:包含一条条指令,用来告诉Docker如何来构建镜像,这个镜像中包括了我们应用程序执行的所有命令,各种依赖,配置环境和运行应用程序所需要的所有内容,一般包括:精简版的操作系统,比如Alpine,应用程序的运行时环境比如Nodejs,java,python,应用程序比如SpringBoot打包好的jar包,应用程序的第三方库或者包,应用程序的配置文件,环境变量等等,一般会在项目的根目录下,创建一个叫Dockerfile的文件,Docker就会根据Dockerfile文件来构建一个镜像
3.使用镜像来创建和运行容器,
Docker可视化软件
Docker Compose是由Docker官方开源的项目,是一个用来定义和运行多个Docker容器应用程序的工具,如果想要搭建一个网站的话,可能会使用到前端,后端,数据库,缓存,负载均衡多个服务器,这些服务器是独立的,但是它们之间是有关联的,需要相互配合来工作,前端需要连接后端,后端要连接数据库。Docker Compose通过一个单独的docker-compose.yaml的配置文件。来将这一组互相关联的容器组合在一起。形成一个项目,然后使用一条命令就可以就启动,停止或者重建这些服务。只需要执行下docker compose up命令,就可以自动安装各种依赖和配置运行环境,然后在本地运行项目
Docker 的核心概念
1. 镜像 (Image) 相当于c++中的类,是一个模板
就像应用程序的"模板"或"蓝图"
包含运行应用程序所需的一切:代码、运行时、库、环境变量和配置文件
类似于虚拟机的 ISO 安装镜像,但更轻量级
可以基于其他镜像构建,形成层次结构
2. 容器 (Container) 相当于c++中的实例,可以创建多个
是镜像的运行实例
就像基于蓝图建造的实际房屋
是轻量级、可执行的软件包
相互隔离,但共享主机操作系统内核
可以启动、停止、移动和删除
3. Dockerfile
构建镜像的"食谱"或"说明书"
文本文件,包含一系列构建镜像的指令
每条指令在镜像中创建一个层
4. Docker Compose
用于定义和运行多容器应用程序的工具
使用 YAML 文件配置应用程序的服务
一条命令就可以启动和运行整个应用栈
Docker 与传统虚拟机的区别
特性 | 传统虚拟机 | Docker 容器 |
---|---|---|
隔离级别 | 操作系统级别 | 进程级别 |
启动时间 | 分钟级 | 秒级 |
性能损耗 | 高(15-20%) | 低(1-5%) |
磁盘占用 | GB 级 | MB 级 |
隔离性 | 完全隔离 | 进程隔离 |
镜像大小 | 大 | 小 |
部署速度 | 慢 | 快 |
图示对比:
text
传统虚拟机架构: ┌─────────────────────────────────┐ │ 应用程序 1 │ ├─────────────────────────────────┤ │ Guest OS │ ├─────────────────────────────────┤ │ Hypervisor │ ├─────────────────────────────────┤ │ Host OS │ ├─────────────────────────────────┤ │ Hardware │ └─────────────────────────────────┘Docker 容器架构: ┌─────────────────┬─────────────────┐ │ 应用程序 1 │ 应用程序 2 │ ├─────────────────┴─────────────────┤ │ Docker Engine │ ├───────────────────────────────────┤ │ Host OS │ ├───────────────────────────────────┤ │ Hardware │ └───────────────────────────────────┘
为什么您的聊天服务器项目使用 Docker?
您的项目需要多个服务协同工作:
MySQL - 存储用户数据、聊天记录
Redis - 处理会话缓存、消息队列
Kafka (可选) - 消息队列系统
Nginx - 负载均衡和反向代理
聊天服务器本身 - 处理业务逻辑
不使用 Docker 的挑战:
需要手动安装和配置每个服务
解决依赖冲突和版本兼容性问题
不同的环境(开发、测试、生产)配置可能不一致
服务之间的网络连接需要手动配置
使用 Docker 的优势:
一键启动所有服务,自动配置网络连接
环境一致性,避免"在我机器上能运行"的问题
依赖隔离,避免污染主机系统
快速重建和恢复环境
Docker 详细使用指南
1. 在 Ubuntu 上安装 Docker
bash
# 更新软件包索引 sudo apt update# 安装依赖包 sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加 Docker 仓库 echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 更新软件包索引(再次) sudo apt update# 安装 Docker Engine sudo apt install docker-ce docker-ce-cli containerd.io# 验证 Docker 是否安装成功 sudo docker run hello-world# 将当前用户添加到 docker 组,避免每次使用 sudo sudo usermod -aG docker $USER# 需要注销并重新登录使组更改生效
2. 安装 Docker Compose
bash
# 下载 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 添加执行权限 sudo chmod +x /usr/local/bin/docker-compose# 验证安装 docker-compose --version
3. 使用 Docker 运行您的聊天服务器
bash
# 进入项目目录 cd /home/song/workspace/chatserver# 使用 Docker Compose 启动所有服务(在后台运行) docker-compose up -d# 查看运行中的容器 docker-compose ps# 查看容器日志 docker-compose logs# 停止所有服务 docker-compose down
4. 常用 Docker 命令
bash
# 查看 Docker 信息 docker info# 列出正在运行的容器 docker ps# 列出所有容器(包括已停止的) docker ps -a# 查看镜像列表 docker images# 运行一个容器 docker run [选项] 镜像名 [命令]# 停止容器 docker stop 容器名或ID# 启动已停止的容器 docker start 容器名或ID# 进入运行中的容器 docker exec -it 容器名或ID /bin/bash# 查看容器日志 docker logs 容器名或ID# 删除容器 docker rm 容器名或ID# 删除镜像 docker rmi 镜像名或ID# 构建镜像(需要在 Dockerfile 所在目录) docker build -t 镜像名:标签 .
Docker 在您项目中的具体工作流程
定义服务:在
docker-compose.yml
文件中定义 MySQL、Redis 等服务配置环境:设置环境变量、端口映射、数据卷等
一键启动:使用
docker-compose up -d
启动所有服务自动配置:Docker 会自动:
下载所需的镜像(如果本地没有)
创建容器并配置网络
设置服务之间的连接
初始化数据库和数据
运行应用:编译并运行您的聊天服务器,它会自动连接到 Docker 启动的服务
实际示例:查看您的聊天服务器 Docker 配置
如果您想查看项目的 Docker 配置,可以:
bash
# 查看 docker-compose.yml 文件内容 cat /home/song/workspace/chatserver/docker-compose.yml# 查看可能存在的 Dockerfile find /home/song/workspace/chatserver -name "Dockerfile"
典型的 docker-compose.yml
文件可能包含如下内容:
yaml
version: '3.8' services:mysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: mypasswordMYSQL_DATABASE: chatports:- "3306:3306"volumes:- mysql_data:/var/lib/mysqlredis:image: redis:alpineports:- "6379:6379"volumes:- redis_data:/datavolumes:mysql_data:redis_data:
学习 Docker 的建议路径
初级阶段:学会基本命令,运行现有容器
中级阶段:学习编写 Dockerfile,构建自定义镜像
高级阶段:掌握 Docker Compose,编排多容器应用
专家阶段:学习 Docker Swarm 或 Kubernetes,管理容器集群
总结
对于您的聊天服务器项目,使用 Docker 确实只需要在 Ubuntu 上安装 Docker 和 Docker Compose,然后运行提供的配置即可。Docker 会自动处理所有依赖服务的安装和配置,让您专注于应用程序本身的开发和测试。
Docker 的优势在于:
环境一致性:开发、测试、生产环境完全一致
快速部署:一键启动所有依赖服务
隔离性:服务之间互不干扰,也不会影响主机系统
可移植性:可以在任何支持 Docker 的系统上运行
版本控制:Dockerfile 和 docker-compose.yml 可以纳入版本控制
即使您之前没有接触过 Docker,按照上述步骤安装并使用项目提供的配置,应该能够顺利运行您的聊天服务器。Docker 的学习曲线相对平缓,一旦掌握,将极大提高您的开发效率。