一、Docker 是什么?
一句话解释 :Docker 是一种容器化技术,你可以把它想象成"应用程序的集装箱",将代码、环境、依赖打包成一个标准化的"箱子",在任何地方都能快速运行。
官方定义:Docker 是一个开源平台,用于开发、部署和运行应用程序。它通过容器(Container)实现环境隔离,确保应用在不同环境中行为一致。
二、为什么用 Docker?
1. 传统部署的痛点
- 环境不一致:开发环境能跑,生产环境报错。
- 依赖冲突:多个应用依赖不同版本的库,难以共存。
- 部署复杂:手动配置服务器,费时费力。
2. Docker 的优势
- 一致性:容器内包含所有依赖,环境与宿主机隔离。
- 轻量高效:容器共享操作系统内核,资源占用远低于虚拟机(VM)。
- 快速启动:秒级启动,适合动态扩缩容。
三、Docker 核心概念
概念 | 说明 | 比喻 |
---|---|---|
镜像(Image) | 只读模板,包含运行应用所需的代码、库、环境(如一个"安装包")。 | 类似"光盘镜像" |
容器(Container) | 镜像的运行实例,相当于一个轻量级虚拟机(实际是进程)。 | 类似"运行中的程序" |
仓库(Registry) | 存储和分发镜像的平台(如 Docker Hub)。 | 类似"应用商店" |
四、Docker 安装与验证
1. 安装 Docker(以 Ubuntu 为例)
bash
# 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加仓库
echo "deb [arch=$(dpkg --print-architecture) 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
# 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world # 运行测试容器,看到输出即成功!
2. 配置用户组(避免每次用 sudo
)
bash
sudo groupadd docker # 创建 docker 用户组(如果不存在)
sudo usermod -aG docker $USER # 将当前用户加入组
newgrp docker # 刷新用户组
五、Docker 基础操作
1. 镜像管理
-
拉取镜像 :从仓库下载镜像(默认 Docker Hub)。
bashdocker pull nginx:latest # 下载最新版 Nginx 镜像
-
查看镜像 :
bashdocker images
-
删除镜像 :
bashdocker rmi nginx:latest
2. 容器管理
-
运行容器 :
bashdocker run -d --name my-nginx -p 80:80 nginx:latest # -d:后台运行 # --name:容器名称 # -p 宿主机端口:容器端口
-
查看容器 :
bashdocker ps # 查看运行中的容器 docker ps -a # 查看所有容器(包括已停止的)
-
停止/删除容器 :
bashdocker stop my-nginx # 停止容器 docker rm my-nginx # 删除容器
-
进入容器 :
bashdocker exec -it my-nginx /bin/bash # 进入容器内的 Bash 终端
3. 构建镜像(Dockerfile)
-
创建
Dockerfile
文件:dockerfileFROM ubuntu:20.04 # 基础镜像 RUN apt-get update && apt-get install -y python3 # 安装 Python3 COPY app.py /app # 复制本地文件到镜像 CMD ["python3", "/app/app.py"] # 容器启动命令
-
构建镜像:
bashdocker build -t my-python-app .
六、Docker 实际应用场景
1. 环境隔离
- 同时运行不同版本的 MySQL(5.7 和 8.0),互不干扰。
2. 快速部署
-
一键部署 WordPress + MySQL:
bashdocker run --name wordpress -p 8080:80 -d wordpress docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
3. 持续集成(CI/CD)
- 在 GitLab CI 中,使用 Docker 镜像作为构建环境,确保每次构建一致。
七、注意事项与常见问题
-
数据持久化 :
-
容器内数据默认随容器删除而丢失,需挂载宿主机目录:
bashdocker run -v /宿主机目录:/容器目录 nginx
-
-
容器权限 :
-
避免容器以 root 权限运行,需指定用户:
dockerfileUSER nobody
-
-
资源限制 :
-
限制容器内存和 CPU 使用:
bashdocker run -m 512m --cpus=1 nginx
-
八、学习资源推荐
- 官方文档 :Docker 官方文档
- 交互式教程 :Play with Docker
- 书籍:《Docker 技术入门与实战》
总结
Docker 让应用部署像搭积木一样简单,记住三个核心:
- 镜像 是模板,容器 是实例,仓库是仓库。
- 常用命令:
docker run
、docker build
、docker ps
。
动手运行一个 Nginx 容器,访问 http://localhost:80
,感受 Docker 的便捷吧!