在使用 Docker 时,有两个概念:Image 和 Container。
图像就像存储在一个文件中的迷你操作系统,该文件是专门为我们的应用程序而构建的。可以把它想象成一个自定义操作系统,当您的计算机关闭时,它位于您的硬盘上。
容器正在运行您的图像实例。
想象一下,您有一个共享硬盘(如果您是老派,甚至是 CD/DVD),它的操作系统可以在多台机器上运行。磁盘上的文件是“镜像”,机器上运行的文件是“容器”。
这就是 Docker 的工作方式,机器上的文件称为镜像,而这些文件的运行实例称为容器。图像也可以上传和共享,供其他用户下载并在他们的机器上运行。
这将我们带到 Docker 与 Docker Compose。
Docker 是管理(创建、存储或共享)图像和运行容器的底层技术。
我们提供 Dockerfile 来告诉 Docker 如何创建我们的镜像。比如我们说:从 Python 3 基础镜像开始,然后安装这些需求,然后创建这些文件夹,然后切换到这个用户,等等……(我把实际步骤简化了,但这只是为了解释点)。
完成后,我们可以使用 Docker 创建一个镜像,通过运行 docker build .. 如果你运行它,Docker 将执行我们的 Dockerfile 中的每个步骤,并将结果作为一个镜像存储在系统上。
构建映像后,您可以使用以下方式手动运行它:
docker 运行
但是,如果您需要设置卷,则需要像这样运行它们:
docker run -v /path/to/vol:/path/to/vol -p 8000:8000
应用程序通常需要多个图像才能运行。例如,您可能有一个应用程序和一个数据库,您可能还需要在它们之间设置网络和共享卷。
因此,每次要启动服务时,您都需要为要运行的每个容器编写具有适当配置和 ID 的上述命令...
如您所料,这可能会变得复杂、乏味且难以快速管理...
这就是 Docker Compose 的用武之地...
Docker Compose 是一个用于定义 Docker 如何在 yaml 文件中运行我们的图像的工具,该文件可以与我们的代码一起存储并重复使用。
所以,如果我们需要将我们的应用镜像作为容器运行,共享端口 8000 并映射一个卷,我们可以这样做:
服务:
应用程序:
建造:
语境: 。
端口:
- 8000:8000
卷:
- 应用程序/:/应用程序
然后,每次我们需要启动我们的应用程序时,我们只需运行 docker-compose up,Docker Compose 就会在后台处理所有复杂的 docker 命令。
所以基本上,Docker Compose 的目的是配置我们正在运行的服务应该如何协同工作以服务我们的应用程序。
当我们运行 docker-compose build 时,Docker Compose 将运行所有必要的 docker build 命令,以构建我们项目所需的所有镜像并适当地标记它们以在系统中跟踪它们。
总之,Docker 是用于创建镜像并将它们作为容器运行的底层技术,而 Docker Compose 是一种工具,用于配置 Docker 应如何运行多个容器来服务于我们的应用程序。
我希望这是有道理的?