GVKun编程网logo

使用 docker compose 编排容器(docker容器编排技术)

17

针对使用dockercompose编排容器和docker容器编排技术这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展179.docker-compose容器编排工具、AspNetCore容器

针对使用 docker compose 编排容器docker容器编排技术这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展179. docker-compose容器编排工具、AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排、Docker - 03 编排容器 Docker Compose 指令速查表、Docker Compose 1.20.0-rc1 发布,多容器应用编排等相关知识,希望可以帮助到你。

本文目录一览:

使用 docker compose 编排容器(docker容器编排技术)

使用 docker compose 编排容器(docker容器编排技术)

一、安装 docker compose

二进制包安装

1、安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可

# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

[root@bogon ~]# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    355      0 --:--:--  0:00:01 --:--:--   355
100 7783k  100 7783k    0     0   471k      0  0:00:16  0:00:16 --:--:-- 1484k
[root@bogon ~]#
[root@bogon ~]# cd /usr/local/bin/
[root@bogon bin]# 
[root@bogon bin]# ls
docker-compose
[root@bogon bin]# ll
total 7784
-rw-r--r--. 1 root root 7970401 Apr  9 06:22 docker-compose
[root@bogon bin]#

2、并为安装脚本添加执行权限

# chmod 755 docker-compose 

[root@bogon bin]# chmod 755 docker-compose 
[root@bogon bin]# 
[root@bogon bin]# ll
total 7784
-rwxr-xr-x. 1 root root 7970401 Apr  9 06:22 docker-compose
[root@bogon bin]#

3、查看安装是否成功

# docker-compose -v

[root@bogon bin]# docker-compose -v
docker-compose version 1.8.0, build f3628c7

4、对于卸载如果是二进制包方式安装的,删除二进制文件即可。

# rm -rf /usr/local/bin/docker-compose

二、使用 docker-compose

1、为项目创建一个目录

# mkdir composetest

# cd composetest/

[root@localhost ~]# mkdir composetest
[root@localhost ~]# 
[root@localhost ~]# cd composetest/
[root@localhost composetest]# 

2、创建一个app.py在项目目录中调用的文件

# vi app.py

[root@localhost composetest]# vi app.py
import time

import redis
from flask import Flask


app = Flask(__name__)
cache = redis.Redis(host=''redis'', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr(''hits'')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route(''/'')
def hello():
    count = get_hit_count()
    return ''Hello World! I have been seen {} times.\n''.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

 

redis 是应用程序网络上 redis 容器的主机名。我们使用 Redis 的默认端口 6379

3、创建 requirements.txt 项目目录中调用的另一个文件

# vi requirements.txt

[root@localhost composetest]# vi requirements.txt
flask
redis

 

4、创建 dockerfile 文件

# vi Dockerfile

[root@localhost composetest]# vi Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

说明:

FROM:从 Python 3.4 镜像开始构建映像

ADD:添加当前目录文件到 code

WORKDIR:定义工作目录 code

RUN:在构建的镜像中运行命令

CMD:将容器的默认命令设置为python app.py

5、在 Compose 文件中定义服务

创建 docker-compose.yml

# vi docker-compose.yml

[root@localhost composetest]# vi docker-compose.yml
version: ''2''
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

注意:官网上写的是 version ''3'',然后运行 docker-compose up 命令时报错,然后把 3 改成 2

[root@localhost composetest]# ls
app.py  docker-compose.yml  Dockerfile  requirements.txt
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose -v
docker-compose version 1.8.0, build f3628c7
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose up
ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you''re using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/

此 Compose 文件定义了两个服务,web 和 redis

该 web 服务使用从 Dockerfile 当前目录中构建的镜像

将容器上的公开端口 5000 转发到主机上的端口 5000。

我们使用 Flask Web 服务器的默认端口 5000

6、使用 Compose 构建并运行您的应用程序

从项目目录中,通过运行启动应用程序

# docker-compose up

[root@localhost composetest]# docker-compose up
Creating network "composetest_default" with the default driver
Building web
Step 1/5 : FROM python:3.4-alpine
Trying to pull repository docker.io/library/python ... 
3.4-alpine: Pulling from docker.io/library/python
8e402f1a9c57: Pull complete
cda9ba2397ef: Pull complete
aafecf9bbbfd: Pull complete
bc2e7e266629: Pull complete
e1977129b756: Pull complete
Digest: sha256:c210b660e2ea553a7afa23b41a6ed112f85dbce25cbcb567c75dfe05342a4c4b
Status: Downloaded newer image for docker.io/python:3.4-alpine
 ---> c06adcf62f6e
Step 2/5 : ADD . /code
 ---> d700bcab2d17
Removing intermediate container 3f5775b19826
Step 3/5 : WORKDIR /code
 ---> eefa4e6c6f62
Removing intermediate container 8bc944b6cf72
Step 4/5 : RUN pip install -r requirements.txt
 ---> Running in 7de50b315d7c

DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last one supporting it. Please upgrade your Python as Python 3.4 won''t be maintained after March 2019 (cf PEP 429).
Collecting flask (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
Collecting redis (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/ac/a7/cff10cc5f1180834a3ed564d148fb4329c989cbb1f2e196fc9a10fa07072/redis-3.2.1-py2.py3-none-any.whl (65kB)
Collecting Werkzeug>=0.14 (from flask->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/18/79/84f02539cc181cdbf5ff5a41b9f52cae870b6f632767e43ba6ac70132e92/Werkzeug-0.15.2-py2.py3-none-any.whl (328kB)
Collecting Jinja2>=2.10 (from flask->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/1d/e7/fd8b501e7a6dfe492a433deb7b9d833d39ca74916fa8bc63dd1a4947a671/Jinja2-2.10.1-py2.py3-none-any.whl (124kB)
Collecting click>=5.1 (from flask->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
Collecting itsdangerous>=0.24 (from flask->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz
Building wheels for collected packages: MarkupSafe
  Building wheel for MarkupSafe (setup.py): started
  Building wheel for MarkupSafe (setup.py): finished with status ''done''
  Stored in directory: /root/.cache/pip/wheels/f2/aa/04/0edf07a1b8a5f5f1aed7580fffb69ce8972edc16a505916a77
Successfully built MarkupSafe
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, click, itsdangerous, flask, redis
Successfully installed Jinja2-2.10.1 MarkupSafe-1.1.1 Werkzeug-0.15.2 click-7.0 flask-1.0.2 itsdangerous-1.1.0 redis-3.2.1
 ---> 3be612bb7eee
Removing intermediate container 7de50b315d7c
Step 5/5 : CMD python app.py
 ---> Running in c6bd8cb54574
 ---> 70884628abf7
Removing intermediate container c6bd8cb54574
Successfully built 70884628abf7
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Pulling redis (redis:alpine)...
Trying to pull repository docker.io/library/redis ... 
alpine: Pulling from docker.io/library/redis
8e402f1a9c57: Already exists
4c2113a1bbc9: Pull complete
a4b5ad98d179: Pull complete
779a3abe033a: Pull complete
84714e9d5602: Pull complete
8e66c4c614cb: Pull complete
Digest: sha256:a228f66132cd46a53fd818443c42458af5d6a3e1231df25184304b8e732e51c4
Status: Downloaded newer image for docker.io/redis:alpine
Creating composetest_web_1
Creating composetest_redis_1
Attaching to composetest_redis_1, composetest_web_1
redis_1  | 1:C 09 Apr 2019 12:13:05.157 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 09 Apr 2019 12:13:05.158 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 09 Apr 2019 12:13:05.158 # 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 09 Apr 2019 12:13:05.165 * Running mode=standalone, port=6379.
redis_1  | 1:M 09 Apr 2019 12:13:05.165 # 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 09 Apr 2019 12:13:05.165 # Server initialized
redis_1  | 1:M 09 Apr 2019 12:13:05.165 # 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 09 Apr 2019 12:13:05.165 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ''echo never > /sys/kernel/mm/transparent_hugepage/enabled'' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 09 Apr 2019 12:13:05.165 * Ready to accept connections
web_1    |  * Serving Flask app "app" (lazy loading)
web_1    |  * Environment: production
web_1    |    WARNING: Do not use the development server in a production environment.
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: 198-489-453
web_1    | 172.18.0.1 - - [09/Apr/2019 12:24:25] "GET / HTTP/1.1" 200 -
web_1    | 172.18.0.1 - - [09/Apr/2019 12:24:25] "GET /favicon.ico HTTP/1.1" 404 -
web_1    | 172.18.0.1 - - [09/Apr/2019 12:24:31] "GET / HTTP/1.1" 200 -

页面就停留在这里了,然后打开浏览器输入地址访问

http://IP 地址:5000/

刷新页面,数字应该增加。

切换到另一个终端窗口,然后键入

# docker images

查看本地镜像

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
composetest_web     latest              70884628abf7        39 minutes ago      84.5 MB
docker.io/python    3.4-alpine          c06adcf62f6e        2 weeks ago         72.9 MB
docker.io/redis     alpine              07103bda7d12        2 weeks ago         51.6 MB

通过docker-compose down 在第二个终端的项目目录中运行,或者在启动应用程序的原始终端中按 CTRL + C 来停止应用程序。

web_1    | 172.18.0.1 - - [09/Apr/2019 14:05:56] "GET / HTTP/1.1" 200 -
^CGracefully stopping... (press Ctrl+C again to force)
Stopping composetest_redis_1 ... done
Stopping composetest_web_1 ... done
[root@localhost composetest]# 

 

7、编辑 Compose 文件以添加绑定装载

 编辑docker-compose.yml在项目目录添加绑定安装web服务:

# vi docker-compose.yml

version: ''2''
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

 

新 volumes 密钥将主机上的项目目录(当前目录)/code 安装到容器内部,允许您动态修改代码,而无需重建镜像。

8、使用 Compose 重新构建并运行应用程序

从项目目录中,键入docker-compose up以使用更新的 Compose 文件构建应用程序,然后运行它。

# docker-compose up

提示我这个项目正在运行,不能再次开启

[root@localhost composetest]# docker-compose up
Recreating composetest_web_1
Starting composetest_redis_1

ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint composetest_web_1 (db4744d1208089127c52e9b1e201bfc0b94a66db86e4d266e356c15e7f24b147):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.18.0.3:5000 ! -i br-012aad8c1511: iptables: No chain/target/match by that name.
 (exit status 1))
ERROR: Encountered errors while bringing up the project.

 

然后执行关闭命令

# docker-compose down

[root@localhost composetest]# docker-compose down
Stopping composetest_redis_1 ... done
Removing composetest_web_1 ... done
Removing composetest_redis_1 ... done
Removing 2386004fa63c_composetest_web_1 ... done
Removing network composetest_default
[root@localhost composetest]# 

 

再次开启

# docker-compose up

[root@localhost composetest]# docker-compose up
Creating network "composetest_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-12896ecfa420 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

 

又报错了,还好这个错误很常见,重启 docker 服务即可解决

[root@localhost composetest]# systemctl restart docker
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1
Creating composetest_redis_1
Attaching to composetest_redis_1, composetest_web_1
redis_1  | 1:C 09 Apr 2019 14:15:11.016 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 09 Apr 2019 14:15:11.016 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 09 Apr 2019 14:15:11.016 # 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 09 Apr 2019 14:15:11.018 * Running mode=standalone, port=6379.
redis_1  | 1:M 09 Apr 2019 14:15:11.018 # 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 09 Apr 2019 14:15:11.018 # Server initialized
redis_1  | 1:M 09 Apr 2019 14:15:11.018 # 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 09 Apr 2019 14:15:11.018 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ''echo never > /sys/kernel/mm/transparent_hugepage/enabled'' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 09 Apr 2019 14:15:11.018 * Ready to accept connections
web_1    |  * Serving Flask app "app" (lazy loading)
web_1    |  * Environment: production
web_1    |    WARNING: Do not use the development server in a production environment.
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: 198-489-453

 再次浏览器访问

9、更新应用程序

由于应用程序代码现在使用卷安装到容器中,因此您可以更改其代码并立即查看更改,而无需重建镜像。

更改问候语app.py并保存。例如,将Hello World!邮件更改Hello from Docker!

# vi app.py 

[root@localhost ~]# cd composetest/
[root@localhost composetest]# 
[root@localhost composetest]# ls
app.py  docker-compose.yml  Dockerfile  requirements.txt
[root@localhost composetest]# 
[root@localhost composetest]# vi app.py 
import time

import redis
from flask import Flask


app = Flask(__name__)
cache = redis.Redis(host=''redis'', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr(''hits'')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route(''/'')
def hello():
    count = get_hit_count()
    return ''Hello from Docker! I have been seen {} times.\n''.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

刷新浏览器访问

10、尝试其他一些命令

如果要在后台运行服务,可以将-d标志(用于 “分离” 模式)传递给docker-compose up并使用docker-compose ps以查看当前正在运行的内容:

# docker-compose up -d

# docker-compose ps

 

[root@localhost composetest]# docker-compose ps
       Name                      Command               State    Ports 
---------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Exit 0         
composetest_web_1     python app.py                    Exit 0         
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose up -d
Starting composetest_web_1
Starting composetest_redis_1
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose ps
       Name                      Command               State           Ports          
-------------------------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp               
composetest_web_1     python app.py                    Up      0.0.0.0:5000->5000/tcp 
[root@localhost composetest]# 

 

docker-compose run命令允许您为服务运行一次性命令。例如,要查看 web 服务可用的环境变量 :

# docker-compose run web env

[root@localhost composetest]# docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=931311c9a4f2
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.4.10
PYTHON_PIP_VERSION=19.0.3
HOME=/root

 

参阅其他可用命令

# docker-compose --help

[root@localhost composetest]# docker-compose --help
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  --verbose                   Show more output
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don''t check the daemon''s hostname against the name specified
                              in the client certificate (for example if your docker host
                              is an IP address)

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

 

停止服务

# docker-compose stop

[root@localhost composetest]# docker-compose ps
       Name                      Command               State           Ports          
-------------------------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp               
composetest_web_1     python app.py                    Up      0.0.0.0:5000->5000/tcp 
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose stop
Stopping composetest_redis_1 ... done
Stopping composetest_web_1 ... done
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose ps
       Name                      Command               State    Ports 
---------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Exit 0         
composetest_web_1     python app.py                    Exit 0         
[root@localhost composetest]# 

 

完全删除容器

# docker-compose down --volumes

--volumes:删除 Redis 容器使用的数据卷

[root@localhost composetest]# docker-compose down --volumes
Removing composetest_web_run_1 ... done
Removing composetest_redis_1 ... done
Removing composetest_web_1 ... done
Removing network composetest_default
[root@localhost composetest]# 
[root@localhost composetest]# docker-compose ps 
Name   Command   State   Ports 
------------------------------
[root@localhost composetest]# 

 

参考博客:

https://www.cnblogs.com/ee900222/p/docker_5.html

官方文档:

https://docs.docker.com/compose/gettingstarted/

179. docker-compose容器编排工具

179. docker-compose容器编排工具

1. 安装:
yum install -y docker-compose(需要epel源)

==============================================================
2.wordpress 单机版docker-compose
==============================================================
2.1 准备目录
cd wordpress/ 

2.2 编写docker-compose
vi docker-compose.yml

version: '3'

services:
   db:
     image: MysqL:5.7
     volumes:
       - /data/db_data:/var/lib/MysqL
     restart: always
     environment:
       MysqL_ROOT_PASSWORD: somewordpress
       MysqL_DATABASE: wordpress
       MysqL_USER: wordpress
       MysqL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports:
       - "80:80"
     restart: always
     environment:
       wordpress_DB_HOST: db
       wordpress_DB_USER: wordpress
       wordpress_DB_PASSWORD: wordpress
       
2.3 启动并放置后台
[root@docker01 wordpress]# docker-compose up -d  

关闭容器:
docker-compose down		先停止容器后删除
重启容器:
docker-compose restart wordpress	#不接服务的话,会重启所有服务
停止容器:
docker-compose stop wordpress
启动容器:
docker-compose start wordpress

======================================================================
3.docker-compose部署 Zabbix监控服务 
======================================================================
3.1 编写docker-compose
[root@docker01 zabbix]# cat docker-compose.yml 
version: '3'

services:
   MysqL-server:
     image: MysqL:5.7
     restart: always
     command: --character-set-server=utf8 --collation-server=utf8_bin
     environment:
       MysqL_ROOT_PASSWORD: root_pwd
       MysqL_DATABASE: zabbix
       MysqL_USER: zabbix
       MysqL_PASSWORD: zabbix_pwd
   
   zabbix-java-gateway:
     image: zabbix/zabbix-java-gateway:latest
     restart: always 

   zabbix-server:
     depends_on:
       - MysqL-server
       - zabbix-java-gateway
     image: zabbix/zabbix-server-MysqL:latest
     ports:
       - "10051:10051"
     restart: always
     environment:
       DB_SERVER_HOST: MysqL-server 
       MysqL_DATABASE: zabbix 
       MysqL_USER: zabbix 
       MysqL_PASSWORD: zabbix_pwd 
       MysqL_ROOT_PASSWORD: root_pwd 
       ZBX_JAVAGATEWAY: zabbix-java-gateway 

   zabbix-web:
     depends_on:
       - MysqL-server
       - zabbix-server
     image: zabbix/zabbix-web-Nginx-MysqL:latest
     ports:
       - "80:80"
     restart: always
     environment:
       DB_SERVER_HOST: MysqL-server 
       MysqL_DATABASE: zabbix 
       MysqL_USER: zabbix 
       MysqL_PASSWORD: zabbix_pwd 
       MysqL_ROOT_PASSWORD: root_pwd 
       
3.2 启动
docker-compose up

3.3 后台启动
docker-compose up -d

寻花之梦~~ 发布了180 篇原创文章 · 获赞 72 · 访问量 1万+ 私信 关注

AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

一.前言

上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来。

如果该应用继续引入mysql、redis、job等若干服务,到时候发布一次得工作量之大就可想而知了,这时候就需要用到Docker Compose。

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,可以使用YAML文件来配置应用程序的服务,然后使用一条命令就可以从配置中创建并启动所有服务。

Docker Compose概述及命令使用 https://docs.docker.com/compose/reference/overview/

 

二.安装Compose

Windows下安装Docker Desktop时已经附带安装了Docker Compose

PS C:\Users\Administrator> docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.0.2o  27 Mar 2018

 

Linux下需要自行安装

root@VM-16-9-ubuntu:~# apt install docker-compose

 

三.使用Compose

1.编排服务

在解决方案下创建docker-compose.yml文件

version: ''3.4''

services:
  helloworld:
    image: helloworld:v2.0
    build: #镜像构建
      context: . #工作目录
      dockerfile: HelloWorld/Dockerfile #Dockerfile位置
    environment: #环境变量
      - ASPNETCORE_ENVIRONMENT=Development
    ports: #端口映射
      - "81:80"
    container_name: netcore_helloworld #容器名
    deploy:
      restart_policy: #重启策略
        condition: on-failure
        delay: 5s
        max_attempts: 3
    networks: #指定network
      - default
      - newbridge
      
  mynginx:
    image: mynginx:v2.0
    build:
      context: MyNginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
      - "801:801"
    container_name: mynginx
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
    networks:
      - default

networks:
  default: #定义一个docker中已存在的network
    external: 
      name: mybridge
  newbridge: #新的network
    #name: newbridge  #compose版本3.5开始才支持自定义名称

 

2.启动容器

https://docs.docker.com/compose/reference/up/

docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

docker-compose up指令包含了docker-compose build,当yml文件services中配置的image(helloworld:v2.0和mynginx:v2.0)不存在时会先build这两个镜像,再创建container,

如果image已存在,则直接创建container

PS C:\Users\Administrator> cd C:\Users\Administrator\source\repos\AspNetCore_Docker
PS C:\Users\Administrator\source\repos\AspNetCore_Docker> docker-compose up -d
WARNING: Some services (helloworld, mynginx) use the ''deploy'' key, which will be ignored. Compose does not support ''deploy'' configuration - use `docker stack deploy` to deploy to a swarm.
Creating network "aspnetcore_docker_newbridge" with the default driver
Creating netcore_helloworld ... done
Creating mynginx            ... done
PS C:\Users\Administrator\source\repos\AspNetCore_Docker> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
mynginx                                v2.0                9c18561d7ab3        27 minutes ago      109MB
helloworld                             v2.0                c42e9f575fc4        24 hours ago        265MB
nginx                                  latest              62c261073ecf        9 days ago          109MB
mcr.microsoft.com/dotnet/core/sdk      2.2-stretch         e4747ec2aaff        3 weeks ago         1.74GB
mcr.microsoft.com/dotnet/core/aspnet   2.2-stretch-slim    f6d51449c477        3 weeks ago         260MB
docker4w/nsenter-dockerd               latest              2f1c802f322f        8 months ago        187kB
PS C:\Users\Administrator\source\repos\AspNetCore_Docker> docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
66ff08eda2ae        helloworld:v2.0     "dotnet HelloWorld.d…"   11 minutes ago      Up 11 minutes       0.0.0.0:81->80/tcp                         netcore_helloworld
5357b641a7b1        mynginx:v2.0        "nginx -g ''daemon of…"   11 minutes ago      Up 11 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:801->801/tcp   mynginx

 

3.删除容器

PS C:\Users\Administrator\source\repos\AspNetCore_Docker> docker-compose down
WARNING: Some services (helloworld, mynginx) use the ''deploy'' key, which will be ignored. Compose does not support ''deploy'' configuration - use `docker stack deploy` to deploy to a swarm.
Stopping mynginx            ... done
Stopping netcore_helloworld ... done
Removing mynginx            ... done
Removing netcore_helloworld ... done
Network mybridge is external, skipping   #外部的bridge不会被删除,直接跳过
Removing network aspnetcore_docker_newbridge

 

四.远程镜像仓库

docker官方的只能创建一个免费私有仓库,国内各大云服务器商都有提供免费的、无限量的镜像仓库。


1.登录到远程registry

docker login --username=[username] ccr.ccs.tencentyun.com

PS C:\Users\Administrator> docker login --username=你的用户名 ccr.ccs.tencentyun.com
Password:
Login Succeeded

 

2.上传镜像

docker tag [ImageId] ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]

PS C:\Users\Administrator> docker tag c42e9f575fc4 ccr.ccs.tencentyun.com/wuuu/helloworld
PS C:\Users\Administrator> docker tag 9c18561d7ab3 ccr.ccs.tencentyun.com/wuuu/mynginx
PS C:\Users\Administrator> docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
ccr.ccs.tencentyun.com/wuuu/mynginx      latest              9c18561d7ab3        2 days ago          109MB
mynginx                                  v2.0                9c18561d7ab3        2 days ago          109MB
ccr.ccs.tencentyun.com/wuuu/helloworld   latest              c42e9f575fc4        3 days ago          265MB
helloworld                               v2.0                c42e9f575fc4        3 days ago          265MB
nginx                                    latest              62c261073ecf        12 days ago         109MB
mcr.microsoft.com/dotnet/core/sdk        2.2-stretch         e4747ec2aaff        3 weeks ago         1.74GB
mcr.microsoft.com/dotnet/core/aspnet     2.2-stretch-slim    f6d51449c477        3 weeks ago         260MB
docker4w/nsenter-dockerd                 latest              2f1c802f322f        8 months ago        187kB
PS C:\Users\Administrator>

 
docker push ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]

PS C:\Users\Administrator> docker push ccr.ccs.tencentyun.com/wuuu/helloworld
The push refers to repository [ccr.ccs.tencentyun.com/wuuu/helloworld]
... latest: digest: sha256:d991fe759257905f727593cc09d8299462e20e31ada3a92023a48fbc130f7484 size:
1581 PS C:\Users\Administrator> docker push ccr.ccs.tencentyun.com/wuuu/mynginx The push refers to repository [ccr.ccs.tencentyun.com/wuuu/mynginx]
...

latest: digest: sha256:0eda000278411f5b6e034944993f6f5b94825125124f67cc7caf4e684aad5a85 size: 1155 PS C:\Users\Administrator>

 

2.通过远程镜像启动容器

在原yml文件基础上移除build项,修改image地址。

docker compose up会从远程仓库pull镜像并启动容器,如果是私有仓库,需要提前登录到远程registry。

version: ''3.4''

services:
  helloworld:
    image: ccr.ccs.tencentyun.com/wuuu/helloworld
    environment: #环境变量
      - ASPNETCORE_ENVIRONMENT=Development
    ports: #端口映射
      - "81:80"
    container_name: netcore_helloworld #容器名
    deploy:
      restart_policy: #重启策略
        condition: on-failure
        delay: 5s
        max_attempts: 3
    networks: #指定network
      - default
      - newbridge
      
  mynginx:
    image: ccr.ccs.tencentyun.com/wuuu/mynginx
    ports:
      - "80:80"
      - "801:801"
    container_name: mynginx
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
    networks:
      - default

networks:
  default: #定义一个docker中已存在的network
    external: 
      name: mybridge
  newbridge: #新的network
    #name: newbridge  #compose版本3.5开始才支持自定义名称

 

示例代码Github地址:https://github.com/wwwu/AspNetCore_Docker

 

  • AspNetCore容器化(Docker)部署(一) —— 入门
  • AspNetCore容器化(Docker)部署(二) —— 多容器通信
  • AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
  • AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

 

Docker - 03 编排容器 Docker Compose 指令速查表

Docker - 03 编排容器 Docker Compose 指令速查表

docker

目录

  • 01 Docker 常用指令、参数配置速查表
  • 02 Dockerfile 指令速查表
  • 03 Docker Compose 指令速查表

Docker - 03 编排容器 Docker Compose 指令速查表

1 docker-compose CLI 命令

1.1 主要

 命令 说明 使用
up 创建并运行作为服务的容器 ducafecat_2018-08-16-11-42-05
down 停止服务容器并清除 ducafecat_2018-08-16-11-42-33

1.2 其它

 命令 说明 使用
bind build需要的镜像 build [options] [--build-arg key=val...] [SERVICE...]
config 验证脚本 config [options]
create 创建镜像不启动 create [options] [SERVICE...]
events 监听容器事件 events [options] [SERVICE...]
exec 执行指定容器执行程序 exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]
run 运行容器一次性的程序 run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...] SERVICE [COMMAND] [ARGS...]
kill 强行停止服务 kill [options] [SERVICE...]
pause 暂停服务 pause [SERVICE...]
unpause 恢复被暂停的服务 unpause [SERVICE...]
stop 停止运行一个服务的所有容器 stop [options] [SERVICE...]
start 启动运行某个服务的所有容器 start [SERVICE...]
restart 重启某个服务的所有容器 restart [options] [SERVICE...]
rm 删除停止的服务(容器) rm [options] [SERVICE...]
logs 展示service的日志 logs [options] [SERVICE...]
top 容器资源占用 top [SERVICE...]
ps 容器列表 ps [options] [SERVICE...]
port 查看服务中的端口被映射到了宿主机的哪个端口上 port [options] SERVICE PRIVATE_PORT
pull 拉取服务依赖的镜像 pull [options] [SERVICE...]
push 提交镜像 push [options] [SERVICE...]
bundle 打包 DAB 文件 bundle [options]
scale 指定某一个服务启动的容器的个数 scale [SERVICE=NUM...]

2 docker-compose 指令速查表

按字母排列

命令 说明 用法
build 编译Dockerfile生成镜像 ducafecat_2018-08-16-10-59-07
command 覆盖容器启动后默认执行的命令 ducafecat_2018-08-16-10-59-36
container_name 容器的名字 ducafecat_2018-08-16-10-59-52
cap_add,cap_drop 加入或者去掉容器能力 ducafecat_2018-08-15-18-18-29
depends_on 容器的依赖 ducafecat_2018-08-16-11-00-51
configs 导入配置 ducafecat_2018-08-16-11-01-17
dns 设置DNS ducafecat_2018-08-16-11-02-46
dns_search 自定义DNS搜索范围 ducafecat_2018-08-16-11-04-10
devices 设备映射列表 ducafecat_2018-08-16-11-04-29
driver_opts 给驱动传值 ducafecat_2018-08-16-11-05-25
entrypoint 指定接入点 ducafecat_2018-08-16-11-08-49
env_file 导入环境变量文件 ducafecat_2018-08-16-11-09-15
environment 设置环境变量 ducafecat_2018-08-16-11-09-34
expose 暴露的端口 ducafecat_2018-08-16-11-09-50
external_links 连接单独启动的容器 ducafecat_2018-08-16-11-10-07
extra_hosts 修改 /etc/hosts ducafecat_2018-08-16-11-10-25
healthcheck 检查状态 ducafecat_2018-08-16-11-10-57
image 镜像 ducafecat_2018-08-16-11-13-55
labels 向容器添加元数据 ducafecat_2018-08-16-11-14-20
links 连接容器 ducafecat_2018-08-16-11-15-38
logging 配置日志服务 ducafecat_2018-08-16-11-16-42ducafecat_2018-08-16-11-16-53
network_mode 网络模式 ducafecat_2018-08-16-11-17-10
networks 加入指定网络 ducafecat_2018-08-16-11-17-24
pid 跟主机系统共享进程命名空间 ducafecat_2018-08-16-11-33-03
ports 映射端口 ducafecat_2018-08-16-11-18-48ducafecat_2018-08-16-11-19-01
restart 出错重启方式 ducafecat_2018-08-16-11-18-04
stop_signal 设置另一个信号来停止容器 ducafecat_2018-08-16-11-30-54
tmpfs 挂载临时目录到容器内部 ducafecat_2018-08-16-11-31-11
volumes 挂载一个目录 ducafecat_2018-08-16-11-31-43

3 例子 - 运行容器服务 WordPress

  • 编写 docker-compose.yml
version: ''3.3''

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
  • 运行 docker-compose up

参考

  • docker-compose CLI
  • Docker Compose
  • Get started with WordPress
  • Compose file version 3 reference

© 会煮咖啡的猫咪

Docker Compose 1.20.0-rc1 发布,多容器应用编排

Docker Compose 1.20.0-rc1 发布,多容器应用编排

Compose 1.20.0-rc1 发布了,Docker Compose 是一个可以简化多容器应用组合的编排工具。通过使用 Compose,你可以在一个配置文件中定义应用的组件,包括容器、配置、连接、卷等,然后你可以通过一个简单的命令将所有的东西组合并运行。

Docker Compose 属于一个 “应用层” 的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。 

该版本包含一些新特性和 bug 修复,详细内容和下载地址请查阅发行说明。

今天的关于使用 docker compose 编排容器docker容器编排技术的分享已经结束,谢谢您的关注,如果想了解更多关于179. docker-compose容器编排工具、AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排、Docker - 03 编排容器 Docker Compose 指令速查表、Docker Compose 1.20.0-rc1 发布,多容器应用编排的相关知识,请在本站进行查询。

本文标签: