Skip to content

Docker入门

Docker 是什么?

简单来说,Docker 就像是一个轻量级的虚拟机(但它不是虚拟机)。

  • 以前 虚拟机 : 像是在电脑里盖了一栋完全独立的大楼(安装完整的操作系统),很重、启动慢。
  • 现在 Docker : 像是给应用盖了一个“集装箱”,它和宿主机共享地基(内核),但内部环境完全隔离。轻便、秒级启动。

三个名词:

  1. 镜像 Image: 它是只读的模板(比如一个安装好了 Python 和代码的系统盘)。类似于 (Class)。
  2. 容器 Container: 它是镜像运行时的实体。类似于实例 (Object)。你可以通过一个镜像启动 10 个相同的容器。
  3. 仓库 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-app

Docker 常用命令速查表

类别命令说明
镜像管理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 一样)