一、Docker 的基本概念
- 镜像 (Image):
- 镜像是一个只读的模板,用于创建 Docker 容器。
- 镜像包含了运行应用程序所需的所有内容:代码、运行时环境、库、配置文件等。
- 可以将镜像看作是应用程序的 “代码”。
- 你可以从 Docker Hub 或其他镜像仓库下载现成的镜像,也可以自己构建镜像。
- 容器 (Container):
- 容器是基于镜像创建的可运行实例。
- 容器是相互隔离的,它有自己的文件系统、进程空间和网络接口。
- 你可以启动、停止、删除容器,并且可以在容器内运行应用程序。
- 可以将容器看作是应用程序的 “运行环境”。
- 仓库 (Registry):
- 仓库是用于存储 Docker 镜像的地方。
- Docker Hub 是最大的公共镜像仓库,你可以在这里找到各种各样的镜像。
- 你也可以创建私有的镜像仓库。
- Dockerfile:
- Dockerfile 是一个文本文件,包含了构建 Docker 镜像的指令。
- 你可以使用 Dockerfile 来定义如何从基础镜像开始,构建自己的应用程序镜像。
- Docker Client:
docker
命令是 Docker 的客户端,用于与 Docker daemon 交互。- 你使用
docker run
,docker ps
等命令,实际是发送命令到 Docker daemon 执行。
- Docker daemon:
- Docker daemon 是一个运行在后台的服务,负责实际的镜像拉取、容器创建、容器运行等操作。
二、Docker 安装
- 下载 Docker:
- 访问 Docker 官网:https://www.docker.com/get-started
- 根据你的操作系统下载 Docker Desktop (macOS, Windows) 或 Docker Engine (Linux)。
- 安装 Docker:
- 按照下载的安装程序中的说明进行安装。
- 验证安装:
- 打开你的终端或命令提示符,输入
docker --version
,如果输出 Docker 版本信息,则表示安装成功。
- 打开你的终端或命令提示符,输入
三、常用 Docker 命令
-
镜像操作:
docker pull <image_name>
: 从镜像仓库拉取镜像到本地。- 例如:
docker pull ubuntu
拉取 ubuntu 镜像。
- 例如:
docker images
: 列出本地已下载的镜像。docker rmi <image_id>
: 删除本地的镜像。- 例如:
docker rmi 234ab5c67de
删除 id 为 234ab5c67de 的镜像。
- 例如:
-
容器操作:
docker run <image_name>
: 基于镜像创建一个新的容器并运行。- 例如:
docker run -it ubuntu /bin/bash
运行 ubuntu 镜像,并进入 bash shell。
- 例如:
docker ps
: 列出当前正在运行的容器。docker ps -a
: 列出所有容器,包括正在运行和已停止的。docker stop <container_id>
: 停止一个正在运行的容器。docker start <container_id>
: 启动一个已停止的容器。docker restart <container_id>
: 重启一个容器。docker rm <container_id>
: 删除一个已停止的容器。- 例如:
docker rm 1a2b3c4d5e
删除 id 为 1a2b3c4d5e 的容器。
- 例如:
docker exec -it <container_id> <command>
: 在正在运行的容器中执行命令。- 例如:
docker exec -it 1a2b3c4d5e /bin/bash
进入正在运行的 id 为 1a2b3c4d5e 的容器的 bash shell。
- 例如:
-
端口映射:
-p <host_port>:<container_port>
: 将宿主机的端口映射到容器的端口。- 例如:
docker run -p 8080:80 -it nginx
将宿主机的 8080 端口映射到容器的 80 端口。
- 例如:
-
目录挂载:
-v <host_dir>:<container_dir>
: 将宿主机的目录挂载到容器的目录。- 例如:
docker run -v /home/user/mydata:/app/data -it ubuntu /bin/bash
将宿主机的/home/user/mydata
目录挂载到容器的/app/data
目录。
- 例如:
-
GPU支持:
--gpus all
: 允许容器使用所有可用的 GPU。--gpus "device=<gpu_id>"
: 允许容器使用指定的 GPU 设备。
四、Docker 镜像的使用
- 拉取镜像:
这将从 Docker Hub 拉取最新的 ubuntu 镜像到你的本地。docker pull ubuntu
- 运行容器:
这将基于 ubuntu 镜像创建一个新的容器,并启动 bash shell。你可以开始在容器内运行 Linux 命令。docker run -it ubuntu /bin/bash
- 退出容器:
- 在容器中输入
exit
并按回车即可退出容器。
- 在容器中输入
- 运行 web 服务
docker run -d -p 8080:80 nginx
-d
后台运行容器。-p 8080:80
将主机的8080端口映射到容器的80端口。nginx
镜像名称。
五、Dockerfile 的使用
-
创建 Dockerfile:
-
在你项目的根目录创建一个名为 Dockerfile (注意没有文件后缀) 的文件。
-
在 Dockerfile 中写入构建镜像的指令。例如:
FROM python:3.9-slim-buster # 基于 Python 镜像 WORKDIR /app # 设置工作目录 COPY requirements.txt . # 拷贝依赖文件 RUN pip install -r requirements.txt # 安装依赖 COPY . . # 拷贝项目代码 CMD ["python", "app.py"] # 运行应用程序
-
-
构建镜像:
-
在你项目根目录下,使用
docker build
命令构建镜像。docker build -t my_app .
-t my_app
指定镜像名称为my_app
,你可以改为你想要的名称。.
表示 Dockerfile 所在的当前目录。
-
-
运行容器:
docker run -p 5000:5000 -it my_app
- 这将运行
my_app
镜像, 并将宿主机的 5000端口映射到容器的5000端口。
- 这将运行
六、基本操作流程
- 选择或创建镜像: 从 Docker Hub 拉取现成的镜像,或者创建自己的 Dockerfile 来构建镜像。
- 运行容器: 使用
docker run
命令创建并运行容器。 - 在容器内部运行应用程序: 使用
docker exec
进入容器内部,或者直接在docker run
命令中执行应用程序。 - 管理容器: 使用
docker ps
,docker stop
,docker start
,docker rm
等命令来管理容器。 - 删除镜像和容器: 使用
docker rmi
删除镜像,使用docker rm
删除容器。
七、进阶使用
- Docker Compose 可以用于管理多个容器,并设置容器的网络,端口, 卷等等,可以使用
docker-compose up
命令运行应用。 - Docker Network 可以用于设置容器之间的网络,可以使得多个容器之间进行通信。
- Docker Volume 可以用于持久化数据,使得容器之间可以共享数据,或使得容器即使删除,数据也可以保留。
八、 学习资源:
- Docker 官方文档: https://docs.docker.com/
- Docker Hub: https://hub.docker.com/
- Docker 教程: 有许多在线课程和教程可以帮助你学习 Docker。 例如:
- 菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html
- 腾讯云:https://cloud.tencent.com/developer/article/1758455