Docker Compose 批处理
Compose 适用于所有环境:生产、暂存、开发、测试及 CI 工作流。还具有用于管理应用程序整个生命周期的命令:
docker-compose.yml
以便它们可以在隔离环境中一起运行docker compose up
,Docker compose 命令启动并运行整个应用程序。也可docker-compose up使用 Compose 独立运行(
docker-compose二进制)
已有三个版本,建议使用version3。
一个service代表一个container,这个container可以从dockerhub的image来创建或从本地的Dockerfile build出来的image来创建。
Service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和Volume的引用。
services:
db:
image: postgres:9.4
volumes:
-"db-data:/var/lib/postgresql/data'
networks:
- back-tier
等价于
docker run -d
--networks back-tier
-v db-data:/var/lib/postgresql/data
postgres:9.4
services:
worker:
# 不是从 dockerhub 拉取的,而是从本地 build 的。即指定 dockerfile 的位置
build: ./worker
# worker 会和哪几个容器关联
links:
- db
- redis
networks:
- back-tier
用于连接容器,实现容器间的通信。
我们都会通过 compose,创建新的 docker-bridge,若所有 container都连接在该 bridge,则根本不需要 links。只有当连接的是默认的 docker-0 时才需要links 做 dns-name 的翻译。
所以,若一个 Docker Compose 文件定义了网络,并将所有容器加入该网络,则这些容器间可以直接通过 DNS 自动发现和访问。此时 links 标签就没有太大作用了。只有在少数情况下,当容器连接默认网络,又需要和其他容器通信时,links 才需要作为一个手动配置的备选方案。但 links 方式相比 Docker 网络存在诸多限制,所以 Docker 一直在推荐使用自定义网络来连接容器,而非 links。所以,总体来说,这个说法正确。
compose 帮我们创建的网络使容器间可以自动发现和访问,大部分情况 links 的作用就不大了。
但links方式有如下缺点:
所以,links的缺点及限制性使其大多数时候都不是一个理想的容器间通信方案。Docker更推荐使用如下替代方案:
所以,总体来说,Links 的使用已经被 Docker 网络、服务发现工具等更高级的机制所替代。在新项目中,优先考虑使用 Docker 自身网络或第三方服务发现、负载均衡工具实现容器间通信。Links 现在只适用于非常简单的容器化应用或用于兼容旧的 Docker Compose 文件。所以大部分时候来说Links 标签都没用。
services:
db:
image: postgres:9.4
volumes:
db-data:
networks:
- back-tier
docker volume create db-data
services:
db:
image: postgres:9.4
volumes:
db-data:
networks:
back-tier:
driver: bridge
front-tier:
driver: bridge
docker network create -d bridge back-tier
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge
这段 Docker Compose 文件定义了一个 WordPress 应用由两个容器组成:
这个 Compose 文件实现了 WordPress 和 MySQL 的组合部署,两者连接到同一个网络,WordPress 通过环境变量连接 MySQL,并使用数据卷实现数据库文件持久化。
第一次启动时,会:
以后启动只会重新启动容器,网络和卷会保持不变。
[root@icv-monitor-platform-dev ~]# yum install -y docker-compose
Loaded plugins: langpacks, versionlock
base | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
yum_bcm | 2.5 kB 00:00:00
epel/x86_64/updateinfo FAILED
http://mirrors.agilecloud.com/epel/7/x86_64/repodata/e06414b68d54c610e042619ea9ed5efb25bb5a6d31e42dfdd38699029423209b-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not FoundTA
Trying other mirror.
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/
epel/x86_64/primary_db FAILED
http://mirrors.agilecloud.com/epel/7/x86_64/repodata/a80f23383e955fc3c9c1874dcf2619d8abff2bd6c8dd2062923cdf91d1dcb464-primary.sqlite.bz2: [Errno 14] HTTP Error 404 - Not FoundTA
Trying other mirror.
(1/3): docker-ce-stable/7/x86_64/primary_db | 106 kB 00:00:00
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
Resolving Dependencies
--> Running transaction check
---> Package docker-compose.noarch 0:1.18.0-4.el7 will be installed
...
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================================
Installing:
docker-compose noarch 1.18.0-4.el7 epel 222 k
Installing for dependencies:
... epel 59 k
Transaction Summary
==================================================================================================================================================================================
Install 1 Package (+15 Dependent packages)
Total download size: 1.4 M
Installed size: 7.5 M
Downloading packages:
...
(16/16): python36-websocket-client-0.47.0-2.el7.noarch.rpm | 59 kB 00:00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 8.8 MB/s | 1.4 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
...
Verifying : python36-websocket-client-0.47.0-2.el7.noarch 16/16
Installed:
docker-compose.noarch 0:1.18.0-4.el7
Dependency Installed:
python36-PyYAML.x86_64 0:3.13-1.el7 python36-cached_property.noarch 0:1.5.1-2.el7 python36-chardet.noarch 0:3.0.4-1.el7 python36-docker.noarch 0:2.6.1-3.el7
python36-docker-pycreds.noarch 0:0.2.1-2.el7 python36-dockerpty.noarch 0:0.4.1-18.el7 python36-docopt.noarch 0:0.6.2-8.el7 python36-idna.noarch 0:2.7-2.el7
python36-jsonschema.noarch 0:2.5.1-4.el7 python36-pysocks.noarch 0:1.6.8-7.el7 python36-requests.noarch 0:2.14.2-2.el7 python36-six.noarch 0:1.14.0-2.el7
python36-texttable.noarch 0:1.6.2-1.el7 python36-urllib3.noarch 0:1.25.6-1.el7 python36-websocket-client.noarch 0:0.47.0-2.el7
Complete!
[root@icv-monitor-platform-dev ~]# docker compose version
Docker Compose version v2.17.3
[root@icv-monitor-platform-dev docker]# docker-compose up
Recreating docker_wordpress_1 ...
Recreating docker_wordpress_1 ... done
Attaching to docker_mysql_1, docker_wordpress_1
wordpress_1 | WordPress not found in /var/www/html - copying now...
mysql_1 | 2023-05-06 09:11:25+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql_1 | 2023-05-06 09:11:25+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql_1 | 2023-05-06 09:11:25+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql_1 | 2023-05-06 09:11:25+00:00 [Note] [Entrypoint]: Initializing database files
mysql_1 | 2023-05-06T09:11:25.184821Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.27) initializing of server in progress as process 42
mysql_1 | 2023-05-06T09:11:25.194319Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_1 | 2023-05-06T09:11:26.099933Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_1 | 2023-05-06T09:11:27.476271Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:27.476300Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:27.627812Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
mysql_1 | 2023-05-06 09:11:30+00:00 [Note] [Entrypoint]: Database files initialized
mysql_1 | 2023-05-06 09:11:30+00:00 [Note] [Entrypoint]: Starting temporary server
mysql_1 | 2023-05-06T09:11:31.071379Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 91
mysql_1 | 2023-05-06T09:11:31.091286Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_1 | 2023-05-06T09:11:31.350282Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_1 | 2023-05-06T09:11:31.544377Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:31.544407Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:31.545449Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
mysql_1 | 2023-05-06T09:11:31.545492Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
mysql_1 | 2023-05-06T09:11:31.547265Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql_1 | 2023-05-06T09:11:31.564869Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
mysql_1 | 2023-05-06T09:11:31.565054Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
mysql_1 | 2023-05-06 09:11:31+00:00 [Note] [Entrypoint]: Temporary server started.
mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
mysql_1 | 2023-05-06 09:11:33+00:00 [Note] [Entrypoint]: Creating database wordpress
mysql_1 |
mysql_1 | 2023-05-06 09:11:33+00:00 [Note] [Entrypoint]: Stopping temporary server
mysql_1 | 2023-05-06T09:11:33.250603Z 11 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.27).
mysql_1 | 2023-05-06T09:11:34.554923Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27) MySQL Community Server - GPL.
mysql_1 | 2023-05-06 09:11:35+00:00 [Note] [Entrypoint]: Temporary server stopped
mysql_1 |
mysql_1 | 2023-05-06 09:11:35+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
mysql_1 |
mysql_1 | 2023-05-06T09:11:35.539635Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
mysql_1 | 2023-05-06T09:11:35.551731Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_1 | 2023-05-06T09:11:35.804326Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_1 | 2023-05-06T09:11:36.004188Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:36.004221Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
mysql_1 | 2023-05-06T09:11:36.005212Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
mysql_1 | 2023-05-06T09:11:36.005253Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
mysql_1 | 2023-05-06T09:11:36.008635Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql_1 | 2023-05-06T09:11:36.026993Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
mysql_1 | 2023-05-06T09:11:36.027899Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html
wordpress_1 | No 'wp-config.php' found in /var/www/html, but 'WORDPRESS_...' variables supplied; copying 'wp-config-docker.php' (WORDPRESS_DB_HOST WORDPRESS_DB_PASSWORD)
wordpress_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
wordpress_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
wordpress_1 | [Sat May 06 09:52:36.197040 2023] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.56 (Debian) PHP/8.0.28 configured -- resuming normal operations
wordpress_1 | [Sat May 06 09:52:36.197088 2023] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
[root@icv-monitor-platform-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08538a461949 wordpress "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:8083->80/tcp, :::8083->80/tcp docker_wordpress_1
fceb9e329624 mysql "docker-entrypoint.s…" 43 minutes ago Up 42 minutes 3306/tcp, 33060/tcp docker_mysql_1
28888809ef74 redis:myredis-1.0 "docker-entrypoint.s…" 8 days ago Up 8 days 0.0.0.0:32768->6379/tcp, :::32768->6379/tcp redisABC
[root@icv-monitor-platform-dev docker]# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
docker_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8083->80/tcp,:::8083->80/tcp
[root@icv-monitor-platform-dev docker]#
docker-compose stop
和 docker-compose down
都是用于停止 Docker Compose 中运行的容器。
停止正在运行的容器,但不删除容器和网络:
[root@icv-monitor-platform-dev docker]# docker-compose stop
Stopping docker_wordpress_1 ... done
Stopping docker_mysql_1 ... done
[root@icv-monitor-platform-dev docker]#
[root@icv-monitor-platform-dev docker]# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------
docker_mysql_1 docker-entrypoint.sh mysqld Exit 0
docker_wordpress_1 docker-entrypoint.sh apach ... Exit 0
[root@icv-monitor-platform-dev docker]#
容器处于停止状态,可通过 start
命令重启:
[root@icv-monitor-platform-dev docker]# docker-compose start
Starting wordpress ... done
Starting mysql ... done
[root@icv-monitor-platform-dev docker]#
停止并删除容器、网络和数据卷:
所以,总结来说:
举例来说:项目日常开发环境,可使用 stop/start
用于临时重启容器。
项目发布新版本前,需要使用 down
停止开发环境,然后 up
启动生产环境。所以,按需求选择不同的停止方式:
stop
保留数据down
确保干净的环境基于 2.2 节中的 yaml实例:
[root@icv-monitor-platform-dev docker]# docker-compose exec mysql bash
root@fceb9e329624:/# ls
bin dev entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr
root@fceb9e329624:/# exit
exit
[root@icv-monitor-platform-dev docker]#
[root@icv-monitor-platform-dev docker]# docker network ls
NETWORK ID NAME DRIVER SCOPE
64ad1eca60f7 bridge bridge local
4689aefb8f9b docker_my-bridge bridge local
f2f555bed377 host host local
d02380dd3da4 none null local
[root@icv-monitor-platform-dev docker]#
可见,docker-compose 机制会自动帮我们在my-bridge之前增加 docker_ 前缀。
Compose 使用项目名称将环境彼此隔离。可在几个不同的上下文中使用此项目名称:
默认项目名称是项目目录的基本名称:
-p
可使用命令行选项COMPOSE_PROJECT_NAME
环境变量来设置自定义项目名称默认项目目录是 Compose 文件的基目录。--project-directory
可以使用命令行选项为其定义自定义值。
Compose 会保留您的服务使用的所有卷。运行时docker compose up
,若它发现之前运行的任何容器,它会将卷从旧容器复制到新容器。此过程可确保您在卷中创建的任何数据都不会丢失。
Compose 缓存用于创建容器的配置。当您重新启动未更改的服务时,Compose 会重新使用现有容器。重新使用容器意味着您可以非常快速地更改您的环境。
Compose 支持 Compose 文件中的变量。可使用这些变量为不同的环境或不同的用户定制您的组合。
详细信息参阅变量替换
可使用该字段或通过创建多个 Compose 文件来扩展 Compose 文件extends
。
Compose 可以多种不同方式使用。
在开发软件时,在隔离环境中运行应用程序并与之交互的能力至关重要。Compose 命令行工具可用于创建环境并与之交互。
Compose文件提供了一种记录和配置应用程序所有服务依赖项(数据库、队列、缓存、Web 服务 API 等)的方法。使用 Compose 命令行工具,可使用单个命令 ( docker compose up
) 为每个依赖项创建和启动一或多个容器。
这些功能共同为开发人员提供一种开始项目的便捷方式。Compose 可以将多页的“开发人员入门指南”缩减为单个机器可读的 Compose 文件和一些命令。
任何持续部署或持续集成过程的一个重要部分是自动化测试套件。自动化的端到端测试需要一个运行测试的环境。Compose 提供方便的方法,为你的测试套件创建和销毁隔离的测试环境。
通过在Compose文件定义完整的环境,只需几个命令即可创建和销毁这些环境:
$ docker compose up -d
$ ./run_tests
$ docker compose down
Compose 传统上专注于开发和测试工作流,但随着每个版本的发布,我们都在更多面向生产的功能上取得进展。
有关使用面向生产的功能的详细信息,参阅 本文档中的在生产中组合。
from flask import Flask
from redis import Redis
import os
import socket
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
ports:
- 8084:5000
environment:
REDIS_HOST: redis
FROM python:2.7
LABEL maintaner="Peng Xiao xiaoquwl@gmail.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
[root@icv-monitor-platform-dev flask-redis]# ll
total 12
-rw-r--r-- 1 root root 432 May 8 09:49 app.py
-rw-r--r-- 1 root root 186 May 8 09:47 docker-compose.yml
-rw-r--r-- 1 root root 155 May 8 09:49 Dockerfile
[root@icv-monitor-platform-dev flask-redis]# docker-compose up
flaskredis_redis_1 is up-to-date
Recreating flaskredis_web_1 ... done
Attaching to flaskredis_redis_1, flaskredis_web_1
redis_1 | 1:C 08 May 2023 01:54:53.395 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 08 May 2023 01:54:53.395 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 08 May 2023 01:54:53.395 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 08 May 2023 01:54:53.396 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 08 May 2023 01:54:53.396 * Running mode=standalone, port=6379.
redis_1 | 1:M 08 May 2023 01:54:53.396 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 08 May 2023 01:54:53.396 # Server initialized
redis_1 | 1:M 08 May 2023 01:54:53.396 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 08 May 2023 01:54:53.397 * Ready to accept connections
web_1 | * Serving Flask app "app" (lazy loading)
web_1 | * Environment: production
web_1 | WARNING: This is a development server. Do not use it in a production deployment.
web_1 | Use a production WSGI server instead.
web_1 | * Debug mode: on
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1 | * Restarting with stat
web_1 | * Debugger is active!
web_1 | * Debugger PIN: 703-966-402
访问 ip:8084,得到响应:
web_1 | 10.51.11.8 - - [08/May/2023 02:02:38] "GET / HTTP/1.1" 200 -
web_1 | 10.51.11.8 - - [08/May/2023 02:02:38] "GET /favicon.ico HTTP/1.1" 404 -
测试完毕,停止服务:
^CGracefully stopping... (press Ctrl+C again to force)
Stopping flaskredis_web_1 ... done
Stopping flaskredis_redis_1 ... done
[root@icv-monitor-platform-dev flask-redis]# docker-compose down
Removing flaskredis_web_1 ... done
Removing flaskredis_redis_1 ... done
Removing network flaskredis_default
[root@icv-monitor-platform-dev flask-redis]#
Docker Stack:使用Docker Compose进行编排的生产级别部署。
Docker Compose是一个流行的工具,用于定义和运行多个Docker容器的应用程序。但是,当你需要在生产环境中部署应用程序时,可能需要更强大的工具来管理容器的生命周期和扩展性。
这就是Docker Stack的作用,用于编排和管理多个Docker容器的工具,它使用Docker Compose文件来定义服务,并提供了更强大的功能,如滚动更新、自动扩展和服务发现。
使用Docker Stack进行生产级别部署的基本步骤
Docker Stack是一个强大的工具,用于在生产环境中编排和管理多个Docker容器的应用程序。它使用Docker Compose文件来定义服务,并提供了更强大的功能,例如滚动更新、自动扩展和服务发现。如果您正在寻找一种更强大的工具来管理Docker容器,那么Docker Stack是一个不错的选择。
docker stack deploy wordpress -c=docker-compose.yml
这个命令是使用Docker Stack来部署WordPress应用程序。它指定了一个名为"wordpress"的堆栈,并使用docker-compose.yml文件中定义的服务来启动应用程序。
具体来说,该命令执行以下操作:
总之,该命令使用Docker Stack和Docker Compose文件来简化WordPress应用程序的部署过程,并提供了更强大的功能,例如滚动更新、自动扩展和服务发现。