Docker入门
Docker 是什么?
简单来说,Docker 就像是一个轻量级的虚拟机(但它不是虚拟机)。
- 以前
虚拟机: 像是在电脑里盖了一栋完全独立的大楼(安装完整的操作系统),很重、启动慢。 - 现在
Docker: 像是给应用盖了一个“集装箱”,它和宿主机共享地基(内核),但内部环境完全隔离。轻便、秒级启动。
三个名词:
- 镜像
Image: 它是只读的模板(比如一个安装好了 Python 和代码的系统盘)。类似于类(Class)。 - 容器
Container: 它是镜像运行时的实体。类似于实例(Object)。你可以通过一个镜像启动 10 个相同的容器。 - 仓库
Repository: 存放镜像的地方(类似于 GitHub 存放代码)。最大的仓库是 Docker Hub。
第一个docker流程
打包一个 Python 应用
python
# app.py
print("Hello! Docker 正在运行我的 Python 代码!")1.编写 Dockerfile
在项目根目录下创建一个名为 Dockerfile 的文件(没有后缀名)
Dockerfile
# 1. 指定基础镜像 (Base Image) - 我们基于官方 Python 镜像开始
FROM python:3.9-slim
# 2. 设置工作目录 (Working Directory) - 容器里的“当前文件夹”
WORKDIR /app
# 3. 复制文件 (Copy) - 把电脑里的当前目录文件,拷贝到容器的 /app 目录
COPY . .
# 4. 运行命令 (Command) - 容器启动时默认执行什么
CMD ["python", "app.py"]2.构建镜像 (Build)
告诉 Docker 把这个配方做成一个镜像,名字叫 my-python-app
bash
# 注意最后有个点 ".",代表使用当前目录的 Dockerfile
docker build -t my-python-app .3.运行容器(Run)
bash
docker run my-python-app你会看到终端输出了 Hello! Docker 正在运行我的 Python 代码!。
拓展
端口映射 (Port Mapping)
通常我们做 Web 开发(比如 Flask, Django, Next.js)需要通过浏览器访问。 假设你的程序运行在 localhost:5000。 在 Docker 中,容器内部的端口和外部电脑的端口是隔离的。你需要“打通”它们。
命令格式: docker run -p [外部端口]:[容器内部端口] [镜像名]
bash
# 例子:把电脑的 8080 端口,映射到容器内部的 5000 端口
docker run -p 8080:5000 my-web-appDocker 常用命令速查表
| 类别 | 命令 | 说明 |
|---|---|---|
| 镜像管理 | docker images | 列出本地所有镜像 |
docker rmi [镜像ID] | 删除某个镜像 | |
docker build -t [名字] . | 构建镜像 | |
| 容器操作 | docker ps | 查看正在运行的容器 |
docker ps -a | 查看所有容器(包括已停止的) | |
docker stop [容器ID] | 停止容器 | |
docker rm [容器ID] | 删除容器 | |
| 调试/查看 | docker logs [容器ID] | 查看容器打印的日志(最常用) |
docker exec -it [容器ID] bash | 进入正在运行的容器内部(像 SSH 一样) |