一、 核心概念:快速理解 Docker 是什么
-
Docker 的定义与核心价值
-
是什么 :一个用于开发、发布和运行应用程序的开放平台。它允许你将应用程序及其所有依赖项(库、环境变量、配置文件等)打包到一个标准化的单元中,这个单元就是镜像。
-
解决了什么痛点:环境不一致问题。"在我的机器上能跑,为什么在你的机器上就跑不起来?" Docker 通过容器化技术,确保了应用在任何拥有 Docker 环境的机器上都能以完全相同的方式运行。
-
-
镜像与容器的关系(核心!)
-
镜像 :一个只读的模板 ,类似于面向对象编程中的"类"。它包含了运行应用所需的文件系统、代码、库和环境变量。例如:
nginx镜像、python:3.8-slim镜像。 -
容器 :镜像的一个运行实例,类似于由"类"创建出来的"对象"。容器是隔离的、可执行的进程。你可以创建、启动、停止、移动或删除一个容器。容器在镜像的基础上,增加了一个可写的薄薄一层。
-
-
Docker 与虚拟机的本质区别
特性 Docker 容器 虚拟机 虚拟化层级 操作系统级 硬件级 启动速度 秒级 分钟级 性能损耗 极低,接近原生 较高 磁盘占用 通常为 MB 级别 通常为 GB 级别 隔离性 进程级别隔离 完整的系统隔离 运行原理 共享主机操作系统内核 每个 VM 都有自己的完整操作系统
二、 环境准备:快速搭建你的 Docker 游乐场
-
安装 Docker
-
Windows/macOS :前往 Docker Desktop 官网 下载安装包。安装后可能需要重启电脑。
-
Linux (Ubuntu 示例):
-
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 apt-key add -
# 添加 Docker 软件源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装 Docker
sudo apt update
sudo apt install docker-ce
# 将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
# 注销并重新登录使组权限生效
验证安装与配置加速器
- 验证安装:
bash
docker --version
# 运行经典 hello-world 容器
docker run hello-world
-
如果看到欢迎信息,说明安装成功!
-
配置国内镜像加速器(重要!提升拉取镜像速度)
-
阿里云:注册阿里云账号,进入"容器镜像服务" -> "镜像工具" -> "镜像加速器",按照操作文档配置。
-
DaoCloud :
https://docker.m.daocloud.io -
配置方法:编辑 Docker 配置文件(以 Linux 为例,Docker Desktop 在设置中直接修改)
-
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、 基础操作:从拉取到运行你的第一个容器
docker pull nginx:latest
-
运行容器
bash# -d: 后台运行 # -p 80:80: 将主机的 80 端口映射到容器的 80 端口 # --name my_nginx: 给容器起一个名字 docker run -d -p 80:80 --name my_nginx nginx现在,打开浏览器访问
http://localhost,你应该能看到 Nginx 的欢迎页面! -
管理容器
-
查看运行中的容器 :
docker ps -
查看所有容器(包括已停止的) :
docker ps -a -
查看容器日志 :
docker logs my_nginx -
进入容器内部(就像 SSH 到一台服务器):
bashdocker exec -it my_nginx /bin/bash # 现在你就在容器的 Linux 环境里了,可以执行 ls, cat 等命令 # 输入 'exit' 退出 -
停止容器 :
docker stop my_nginx -
启动已停止的容器 :
docker start my_nginx -
删除容器 :
docker rm my_nginx(需先停止) 或docker rm -f my_nginx(强制删除运行中的容器)
-
四、 实战案例:将你的 Python Flask 应用容器化
-
准备应用文件
创建一个项目目录,例如my_flask_app,并在其中创建两个文件:-
app.py(你的 Flask 应用)pythonfrom flask import Flask app = Flask(__name__) @app.route('/') def hello(): return '<h1>Hello, Dockerized Flask App!</h1>' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) # 注意:必须绑定到 0.0.0.0 -
requirements.txt(声明依赖)pythonflask==2.0.1
-
-
编写 Dockerfile(构建镜像的蓝图)
在同一个目录下创建Dockerfile文件(无后缀):python# 使用官方的 Python 轻量级镜像作为基础 FROM python:3.8-slim # 设置容器内的工作目录 WORKDIR /app # 先将依赖文件复制到工作目录(利用 Docker 缓存层) COPY requirements.txt . # 安装 Python 依赖 RUN pip install --no-cache-dir -r requirements.txt # 将当前目录下的所有文件复制到容器的 /app 目录 COPY . . # 声明容器运行时暴露的端口 EXPOSE 5000 # 定义容器启动时执行的命令 CMD ["python", "app.py"] -
构建镜像并运行
-
构建镜像 (注意最后有一个点
.,表示当前目录是构建上下文):bashdocker build -t my_flask_app:latest . -
运行容器:
bashdocker run -d -p 5000:5000 --name my_running_flask_app my_flask_app -
访问应用 :打开浏览器访问
http://localhost:5000,你将看到你的 Flask 应用在容器中运行了!
-
五、 数据与网络管理
-
数据持久化:挂载数据卷
容器内的数据是临时的,容器删除数据就没了。数据卷用于持久化数据。-
挂载主机目录:
bash# 将主机的 /path/on/host 目录挂载到容器的 /path/in/container 目录 docker run -v /path/on/host:/path/in/container nginx -
使用命名卷(Docker 管理路径):
bashdocker volume create my_volume docker run -v my_volume:/path/in/container nginx
-
-
网络:容器互联
-
创建自定义网络:
bashdocker network create my_app_net -
将容器连接到指定网络:
bashdocker run -d --name my_web --network my_app_net nginx docker run -d --name my_db --network my_app_net redis现在,
my_web容器可以直接通过主机名my_db来访问redis容器,无需知道其 IP 地址。
-
六、 常用命令速查表
| 命令 | 说明 |
|---|---|
docker images |
列出所有本地镜像 |
docker rmi <image_id> |
删除指定镜像 |
docker stop <container> |
停止容器 |
docker start <container> |
启动容器 |
docker rm -f <container> |
强制删除容器 |
docker system prune |
清理所有停止的容器、未使用的网络和构建缓存 |
docker logs -f <container> |
实时查看容器日志 |
docker stats |
实时查看容器资源占用(CPU、内存) |
七、 进阶学习路径建议
-
Docker Compose :用于定义和运行多容器应用。用一个
docker-compose.yml文件就能管理整个应用栈(Web、DB、Cache 等),是开发环境的利器。 -
生产环境部署:
-
Docker Swarm:Docker 原生的集群管理工具,相对简单。
-
Kubernetes:容器编排领域的事实标准,功能强大,学习曲线较陡。
-
-
安全最佳实践:
-
尽量使用官方认证的基础镜像。
-
在 Dockerfile 中使用非 root 用户运行应用进程。
-
定期扫描镜像中的安全漏洞。
-
最小化镜像体积,减少攻击面。
-