查看“使用Docker Compose”的源代码
←
使用Docker Compose
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
Docker Compose是一个帮助你定义和共享多容器应用程序的工具。使用Compose,你可以创建一个YAML文件来定义服务,并且通过一个简单的命令,你可以启动或关闭所有服务。 使用Compose的一个重要优势是你可以在一个文件中定义应用程序的堆栈,并将其保存在项目仓库的根目录下(现在已经进行版本控制),并且轻松地允许其他人为你的项目做出贡献。其他人只需要克隆你的仓库,并使用Compose启动应用程序。事实上,你可能会在GitHub/GitLab上看到很多项目正在这样做。 <span id="创建compose文件"></span> == 创建Compose文件 == 在getting-started-app目录中,创建一个名为compose.yaml的文件。 <pre> ├── getting-started-app/ │ ├── Dockerfile │ ├── compose.yaml │ ├── node_modules/ │ ├── package.json │ ├── spec/ │ ├── src/ │ └── yarn.lock </pre> == 定义应用程序服务 == 你使用下面的命令启动数据库服务。 <pre> docker run -dp 127.0.0.1:3000:3000 \ -w /app -v "$(pwd):/app" \ --network todo-app \ -e MYSQL_HOST=mysql \ -e MYSQL_USER=root \ -e MYSQL_PASSWORD=secret \ -e MYSQL_DB=todos \ node:18-alpine \ sh -c "yarn install && yarn run dev" </pre> 现在,你将在compose.yaml文件中定义这个服务。 # 在文本或代码编辑器中打开compose.yaml,并首先定义你想要作为应用程序一部分运行的第一个服务(或容器)的名称和镜像。该名称将自动成为网络别名,在定义MySQL服务时非常有用。 <pre> services: app: image: node:18-alpine </pre> <ol start="2" style="list-style-type: decimal;"> <li>通常,在镜像定义附近会看到command命令,尽管没有顺序要求。将命令添加到你的compose.yaml文件中。</li></ol> <pre> services: app: image: node:18-alpine command: sh -c "yarn install && yarn run dev" </pre> <ol start="3" style="list-style-type: decimal;"> <li>现在,通过定义服务的端口,迁移命令中的-p 127.0.0.1:3000:3000部分。</li></ol> <pre> services: app: image: node:18-alpine command: sh -c "yarn install && yarn run dev" ports: - 127.0.0.1:3000:3000 </pre> <ol start="4" style="list-style-type: decimal;"> <li>接下来,通过使用working_dir和volumes定义,迁移工作目录(-w /app)和卷映射(-v “$(pwd):/app”)。</li></ol> Docker Compose卷定义的一个优势是你可以使用相对于当前目录的相对路径。 <pre> 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 </pre> <ol start="5" style="list-style-type: decimal;"> <li>最后,你需要使用环境变量键迁移环境变量的定义。</li></ol> <pre> 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 environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: secret MYSQL_DB: todos </pre> 现在,是时候定义MySQL服务了。你之前使用的容器命令如下: <pre> docker run -d \ --network todo-app --network-alias mysql \ -v todo-mysql-data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=secret \ -e MYSQL_DATABASE=todos \ mysql:8.0 </pre> # 首先,定义一个新的服务,并将其命名为mysql,这样它就会自动获得网络别名。同时指定要使用的镜像。 <pre> services: app: # The app service definition mysql: image: mysql:8.0 </pre> <ol start="2" style="list-style-type: decimal;"> <li>接下来,定义卷映射。当你使用docker run命令运行容器时,Docker会自动创建命名卷。但是,使用Compose时不会自动创建。你需要在顶层的volumes:部分中定义卷,然后在服务配置中指定挂载点。通过只提供卷名称,将使用默认选项。</li></ol> <pre> services: app: # The app service definition mysql: image: mysql:8.0 volumes: - todo-mysql-data:/var/lib/mysql volumes: todo-mysql-data: </pre> <ol start="3" style="list-style-type: decimal;"> <li>最后,你需要指定环境变量。</li></ol> </pre> services: app: # The app service definition mysql: image: mysql:8.0 volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: todos volumes: todo-mysql-data: </pre> <ol start="4" style="list-style-type: decimal;"> <li>此时,你的完整compose.yaml文件应该是这样的:</li></ol> <pre> 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 environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: secret MYSQL_DB: todos mysql: image: mysql:8.0 volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: todos volumes: todo-mysql-data: </pre> == 运行应用程序堆栈 == 现在,你已经有了compose.yaml文件,可以启动你的应用程序。 # 首先确保没有其他容器的副本正在运行。使用docker ps列出容器,并使用docker rm -f <ids>删除它们。 # 使用docker compose up命令启动应用程序堆栈。添加-d标志以在后台运行所有服务。 <pre> docker compose up -d </pre> 运行上述命令后,你应该会看到以下输出: <pre> Creating network "app_default" with the default driver Creating volume "app_todo-mysql-data" with default driver Creating app_app_1 ... done Creating app_mysql_1 ... done </pre> 你会注意到,Docker Compose创建了卷以及一个网络。默认情况下,Docker Compose会自动为应用程序堆栈创建一个专用的网络(这就是为什么你在Compose文件中没有定义网络的原因)。 <ol start="3" style="list-style-type: decimal;"> <li>使用docker compose logs -f命令查看日志。你将看到每个服务的日志交错在一个流中。当你想要观察与时间相关的问题时,这非常有用。-f标志会跟踪日志,因此会实时输出。</li></ol> 如果你已经运行过该命令,你会看到以下输出: <pre> mysql_1 | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections. mysql_1 | Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) app_1 | Connected to mysql db at host mysql app_1 | Listening on port 3000 </pre> 服务名称显示在行首(通常带有颜色),以帮助区分不同的消息。如果你想查看特定服务的日志,可以在日志命令的末尾添加服务名称(例如,docker compose logs -f app)。 <ol start="4" style="list-style-type: decimal;"> <li>此时,你应该能够在浏览器中打开http://localhost:3000,看到应用程序正在运行。</li></ol> <span id="在docker仪表板中查看应用程序堆栈"></span> == 在Docker仪表板中查看应用程序堆栈 == 如果你查看Docker仪表板,你会看到一个名为getting-started-app的分组。这是来自Docker Compose的项目名称,用于将容器分组在一起。默认情况下,项目名称只是compose.yaml所在目录的名称。 展开堆栈,你会看到在Compose文件中定义的两个容器。名称也更具描述性,遵循<service-name>-<replica-number>的模式。因此,你可以很容易地快速查看哪个容器是你的应用程序,哪个容器是MySQL数据库。 == 关闭应用程序堆栈 == 当你准备关闭应用程序堆栈时,只需运行docker compose down命令,或在Docker仪表板中点击整个应用程序的垃圾桶图标。容器将停止,网络将被删除。 <blockquote>警告:默认情况下,compose文件中的命名卷在运行docker compose down时不会被删除。如果你想删除这些卷,需要添加–volumes标志。 </blockquote> Docker仪表板不会在删除应用程序堆栈时删除卷。
返回至“
使用Docker Compose
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息