在部署应用时,常常使用到不止一个容器,那么在部署容器的时候就需要一个一个进行部署,这样的部署过程也相对来说比较繁琐复杂,也容易出问题,那么有没有一种更为简单的方法呢?
Compose 是用于定义和运行多容器 Docker 应用程序的工具。Docker Compose 通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相关联的 Docker 容器的快速部署。
Compose 使用的三个步骤:
-
Linux:执行以下指令即可安装(最新版替换V后面的版本号即可)
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
version : "3.7"
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
web:
image: nginx
ports:
- "80:80"
image: postgres
environment:
POSTGRES_DB: example
在该样例中我们定义了 3 个服务,app、web 和 db。
-
app
服务使用到了
node:18-alpine
会执行一条 Shell 指令,并且进行了端口映射,配置了工作目录,配置了卷。
-
web
服务使用到了
nginx
镜像,并将容器的 80 端口,映射到宿主机的 80 端口。
-
db
服务使用了
postgres
镜像,并设置了一个环境变量。
Docker Compose 的配置本质上就是把部署 Docker 容器的过程集中管理起来,方便用户部署和后续维护。核心就是将 Docker 命令转换为 Yaml 文件。
使用Docker-Compose的常见命令包括:
-
docker-compose up
:启动并运行整个应用。
-
docker-compose down
:停止并移除容器、网络、卷和镜像。
-
docker-compose build
:构建或重建服务。
-
docker-compose logs
:查看服务的日志输出。 这些命令为
Docker-Compose
的日常使用提供了基础。
-
理解docker-compose.yml
docker-compose.yml文件是Docker-Compose项目的核心,它使用YAML格式来描述和配置您的应用服务。这个文件不仅定义了所使用的服务,还包括了这些服务的配置,例如使用的Docker镜像、端口映射、依赖关系、环境变量等。
-
基本组件
-
服务(Services):服务代表一个容器。在docker-compose.yml中,您可以定义一个或多个服务,每个服务可以使用不同的镜像。
-
网络(Networks):Docker-Compose允许您定义和使用自己的网络。
-
卷(Volumes):卷用于数据持久化和共享数据。您可以定义一个卷,并将其挂载到一个或多个容器中。
-
文件示例
下面是一个更复杂的docker-compose.yml文件示例,其中包含了网络和卷的定义:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
networks:
- webnet
image: postgres
environment:
POSTGRES_DB: example
volumes:
- db-data:/var/lib/postgresql/data
networks:
- webnet
volumes:
db-data:
networks:
webnet:
在这个示例中,我们创建了一个名为webnet的网络,并且让web和db服务都连接到这个网络。我们还定义了一个卷db-data用于持久化数据库的数据。
-
配置项解析
-
环境变量(Environment):可以设置环境变量,为服务配置必要的参数。
-
端口映射(Ports):将容器内的端口映射到宿主机的端口,以便外部访问。
-
依赖关系(Depends On):可以指定服务启动的顺序。
-
网络配置
在Docker-Compose中,您可以自定义网络来实现服务间的隔离或通信。例如,您可以创建一个只供数据库和后端服务使用的内部网络。以下是一个网络配置的例子:
version: '3'
services:
web:
image: nginx
networks:
- front-end
api:
image: my-api
networks:
- front-end
- back-end
image: postgres
networks:
- back-end
networks:
front-end:
back-end:
在这个配置中,web和api服务都连接到front-end网络,而db和api服务则连接到back-end网络。
-
卷挂载和数据持久化 卷用于数据持久化和服务间共享数据。在Docker-Compose中,您可以定义卷并将其挂载到服务所需的位置。例如:
version: '3'
services:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
在这个例子中,我们定义了一个名为db-data的卷,并将其挂载到数据库服务的数据目录。
-
环境变量和配置文件 Docker-Compose允许您通过环境变量或.env文件来配置服务。这使得您的配置更加灵活,也更适合不同的环境。例如:
version: '3'
services:
web: