7--docker-compose详解

摘要:
Compose位置是“对多个Docker容器的定义和运输的响应”,其前身是开源项目Fig.Compose正好满足这些要求。Compose项由Python编写。Docker服务提供的API用于管理容器。Sudom/usr/local/bin/docker compose 3.docker compose使用1.相关概念。两个重要的术语是:服务:相应的容器。事实上,它可以传输同一映像的多个实例项:由与组关联的相应容器组成的完整业务单元。默认模板名称为docker compose。yml,格式为YAML。

目录

一、Docker Compose

简介

Compose 项⽬是 Docker 官⽅的开源项⽬,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat ⼗分类似。

其代码⽬前在 https://github.com/docker/compose 上开源。

Compose 定位是 「定义和运⾏多个 Docker 容器的应⽤(Defining and running multi-container Docker applications)」,其前身是开源项⽬ Fig。

我们知道使⽤⼀个 Dockerfile 模板⽂件,可以让⽤户很⽅便的定义⼀个单独的应⽤容 器。然⽽,在⽇常⼯作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现⼀个 Web 项 ⽬,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚⾄还包括负载均衡容器等。

Compose 恰好满⾜了这样的需求。它允许⽤户通过⼀个单独的 docker-compose.yml 模板⽂件(YAML 格式) 来定义⼀组相关联的应⽤容器为⼀个项⽬(project)。

Compose 中有两个重要的概念:

  • 服务 ( service ):⼀个应⽤的容器,实际上可以包括若⼲运⾏相同镜像的容器实例。

  • 项⽬ ( project ):由⼀组关联的应⽤容器组成的⼀个完整业务单元,在 docker-compose.yml ⽂件中定 义。

Compose 的默认管理对象是项⽬,通过⼦命令对项⽬中的⼀组容器进⾏便捷地⽣命周期管理。

Compose 项⽬由 Python 编写,实现上调⽤了 Docker 服务提供的 API 来对容器进⾏管理。因此,只要所操作的平 台⽀持 Docker API,就可以在其上利⽤ Compose 来进⾏编排管理

二、docker compose 安装 与 卸载
# 安装官网: https://docs.docker.com/compose/install/

1.下载

# 官网安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 国内
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@docter bin]# ll
total 12440
-rw-r--r-- 1 root root 12737304 Jul 14 20:19 docker-compose

2.授权

[root@docter bin]# sudo chmod +x /usr/local/bin/docker-compose

3.检测版本

[root@docker bin]# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

4.卸载

如果是⼆进制包⽅式安装的,删除⼆进制⽂件即可。

sudo rm /usr/local/bin/docker-compose
三、docker compose使用

1.相关概念

2个重要术语:

  • 服务 ( service ):⼀个应⽤容器,实际上可以运⾏多个相同镜像的实例

  • 项⽬ ( project ):由⼀组关联的应⽤容器组成的⼀个完整业务单元。∂⼀个项⽬可以由多个服务(容器)关联 ⽽成, Compose ⾯向项⽬进⾏管理

2.场景

最常⻅的项⽬是 web ⽹站,该项⽬应该包含 web 应⽤和缓存。

  • Django应⽤

  • mysql服务

  • redis服务

  • elasticsearch服务 ......

3.docker-compose模板

  • 参考⽂档:https://docker_practice.gitee.io/zh-cn/compose/compose_file.html
[root@docker ~]# vim docker-compose.yaml    #固定命名
version: "3.0"
services:
  mysqldb:
    image: mysql:5.7.19
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - /root/mysql/conf:/etc/mysql/conf.d
      - /root/mysql/logs:/logs
      - /root/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      - ems
    depends_on:
      - redis
    
  redis:
    image: redis:4.0.14
    container_name: redis
    ports:
      - "6379:6379"
    networks:
      - ems
    volumes:
      - /root/redis/data:/data
    command: redis-server
 
networks:
  ems:

4.通过docker-compose运⾏⼀组容器

做实验之前把容器清理干净docker rm -f $(docker ps -a -q)

[root@centos ~]# docker-compose up //前台启动⼀组服务
[root@centos ~]# docker-compose up -d //后台启动⼀组服务

5. docker-compose 模板⽂件

模板⽂件是使⽤ Compose 的核⼼,涉及到的指令关键字也⽐较多。这⾥⾯⼤部分指令跟 docker run 相关参数的含义都是类似的。

默认的模板⽂件名称为 docker-compose.yml ,格式为 YAML 格式。

version: "3"
services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来⾃动构建⽣成镜像。

如果使⽤ build 指令,在 Dockerfile 中设置的选项(例如: CMD , EXPOSE , VOLUME , ENV 等) 将会⾃动被获 取,⽆需在 docker-compose.yml 中重复设置。

下⾯分别介绍各个指令的⽤法。

build

指定 Dockerfile 所在⽂件夹的路径(可以是绝对路径,或者相对 docker-compose.yml ⽂件的路径)。 Compose 将会利⽤它⾃动构建这个镜像,然后使⽤这个镜像。

version: '3'    # docker-compose的版本,定义版本
services:       # 定义服务
  webapp:      # 项目名称,自己定义
    build: ./dir   # 构建 ./相对路径

你也可以使⽤ context 指令指定 Dockerfile 所在⽂件夹的路径。

使⽤ dockerfile 指令指定 Dockerfile ⽂件名。

使⽤ arg 指令指定构建镜像时的变量。

version: '3'
services:
  webapp:
    build:
      context: ./dir                  
      dockerfile: Dockerfile-alternate    # 定义你dockerfile的名字
      args:                               # 定义构建运行时的变量
        buildno: 1

command

覆盖容器启动后默认执⾏的命令

command: echo "hello world

container_name

指定容器名称。默认将会使⽤ 项⽬名称_服务名称_序号 这样的格式。

container_name: docker-web-container

注意: 指定容器名称后,该服务将⽆法进⾏扩展(scale),因为 Docker 不允许多个容器具有相同的名称

depends_on

解决容器的依赖、启动先后的问题。以下例⼦中会先启动 redis db 再启动 web

version: '3'
services:
  web:
  build: .
  depends_on:  #先启动 
    - db
    - redis
  redis:
    image: redis
  db:
    image: postgres

注意: web 服务不会等待 redis db 「完全启动」之后才启动。

7--docker-compose详解第1张

env_file

从⽂件中获取环境变量,可以为单独的⽂件路径或列表。

如果通过 docker-compose -f FILE ⽅式来指定 Compose 模板⽂件,则 env_file 中变量的路径会基于模板 ⽂件路径。

如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。

env_file: ./mysql.env    #单个文件

env_file:       #多个文件
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

环境变量⽂件中每⼀⾏必须符合格式,⽀持 # 开头的注释⾏。

# common.env: Set development environment
PROG_ENV=development

environment

设置环境变量。你可以使⽤数组或字典两种格式。 只给定名称的变量会⾃动获取运⾏ Compose 主机上对应变量的值,可以⽤来防⽌泄露不必要的数据。

environment:  RACK_ENV: development  SESSION_SECRET:environment:  - RACK_ENV=development  - SESSION_SECRET

如果变量名称或者值中⽤到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号⾥,避免 YAML ⾃动 解析某些内容为对应的布尔语义。这些特定词汇,包括

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

healthcheck

通过命令检查容器是否健康运⾏。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3

image

指定为镜像名称或镜像 ID。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

networks

配置容器连接的⽹络

version: "3"
services:
  some-service:
  networks:      #有创建有连接
    - some-network
    - other-network
    
  networks:   #创建哪个网桥
    some-network:
    other-network:

ports

暴露端口信息。 使⽤宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可 以。

ports:
  - "3000"
  - "8000:80"
  - "49100:22"
  - "127.0.0.1:8001:8001"

注意:当使⽤ HOST:CONTAINER 格式来映射端⼝时,如果你使⽤的容器端⼝⼩于 60 并且没放到引号⾥,可能会得 到错误结果,因为 YAML 会⾃动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采⽤ 引号包括起来的字符串格式。

sysctls

配置容器内核参数。

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0
  
sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

ulimits

指定容器的 ulimits 限制值。 例如,指定最⼤进程数为 65535,指定⽂件句柄数为 20000(软限制,应⽤可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root ⽤户提⾼)

 ulimits:
   nproc: 655350
   nofile:
     soft: 131072
     hard: 400000

volumes

数据卷所挂载路径设置。可以设置为宿主机路径( HOST:CONTAINER )或者数据卷名称( VOLUME:CONTAINER ),并且 可以设置访问模式 ( HOST:CONTAINER:ro )。 该指令中路径⽀持相对路径。

volumes:
  - "/mnt/html:/usr/share/nginx/html"
  - cache/:/tmp/cache
  - ~/configs:/etc/configs/:ro

如果路径为数据卷名称,必须在⽂件中配置数据卷

version: "3"
services:
  my_src:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
      
volumes:   #虚拟存储卷
  mysql_data:
五、docker-compose 常⽤命令

1. 命令对象与格式

对于 Compose 来说,⼤部分命令的对象既可以是项⽬本身,也可以指定为项⽬中的服务或者容器。如果没有特别 的说明,命令对象将是项⽬,这意味着项⽬中所有的服务都会受到命令影响。

执⾏ docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个命令的 使⽤格式。

docker-compose 命令的基本的使⽤格式是

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

2. 命令选项

  • -f, --file FILE 指定使⽤的 Compose 模板⽂件,默认为 docker-compose.yml ,可以多次指定。docker-compose -f /root/docker-compose.yaml up -d

  • -p, --project-name NAME 指定项⽬名称,默认将使⽤所在⽬录名称作为项⽬名

  • --x-networking 使⽤ Docker 的可拔插⽹络后端特性

  • --x-network-driver DRIVER 指定⽹络后端的驱动,默认为 bridge

  • --verbose 输出更多调试信息。

  • -v, --version 打印版本并退出。

3.命令使⽤说明

1).up

格式为docker-compose up [options] [SERVICE...]

--该命令⼗分强⼤,它将尝试⾃动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的⼀系列操作。
--链接的服务都将会被⾃动启动,除⾮已经处于运⾏状态。
--可以说,⼤部分时候都可以直接通过该命令来启动⼀个项⽬。
--默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很⽅便进⾏调试。
--当通过 Ctrl-C 停⽌命令时,所有容器将会停⽌。
--如果使⽤ docker-compose up -d ,将会在后台启动并运⾏所有的容器。⼀般推荐⽣产环境下使⽤该选项。
--默认情况,如果服务容器已经存在, docker-compose up 将会尝试停⽌容器,然后重新创建(保持使⽤volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml ⽂件的最新内容

2).down

此命令将会停⽌ up 命令所启动的容器,并移除⽹络

3).exec

进入指定的容器

4).ps

格式为docker-compose ps [options] [SERVICE...]

列出项⽬中⽬前的所有容器。

选项: -q 只打印容器的 ID 信息

5). restart

格式为 docker-compose restart [options] [SERVICE...]

重启项⽬中的服务。

选项: -t, --timeout TIMEOUT 指定重启前停⽌容器的超时(默认为 10 秒)。

6). rm

格式为 docker-compose rm [options] [SERVICE...]

删除所有(停⽌状态的)服务容器。推荐先执⾏ docker-compose stop 命令来停⽌容器。 选项:

  • -f, --force 强制直接删除,包括⾮停⽌状态的容器。⼀般尽量不要使⽤该选项。

  • -v 删除容器所挂载的数据卷。

7).start

格式为 docker-compose start [SERVICE...]

启动已经存在的服务容器。

8).stop

格式为docker-compose stop [options] [SERVICE...]

停⽌已经处于运⾏状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

选项: -t, --timeout TIMEOUT 停⽌容器时候的超时(默认为 10 秒)

9).top

查看各个服务容器内运⾏的进程。

10).unpause

格式为 docker-compose unpause [SERVICE...]

恢复处于暂停状态中的服务。

六、官方写docker compose构建redis

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

img

1、应用app.py

2、Dockerfile 应用镜像

3、Docker-compose.yml文件(定义整个服务,需要的环境,web、redis)完整的上线服务

4、启动compose项目( docker-compose up )

流程

# 1、创建网络
# 2、执行Docker-compose.yml文件
# 3、在 Compose 文件中定义服务
# 4、启动docekr-compose

0、准备工作

yum -y install python-pip  # pip是python包管理工具
yum -y install epel-relase # 报错的话执行           # 如果官网安装不需要执行

1、创建项目目录

[root@docter home]#  mkdir composetest 
[root@docter home]# cd composetest/

2、在项目目录中创建名为app.py文件

[root@docter composetest]# pwd
/home/composetest 

[root@docter composetest]# vim 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.
'.format(count)

3、 requirements.txt依赖

[root@docter composetest]# vim requirements.txt
 flask
redis

4、创建一个 Dockerfile

[root@docter composetest]# vim Dockerfile 
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

# CMD ["python", "run"]  #这样也可以

#  这告诉 Docker:

	从 Python 3.7 映像开始构建映像。
	将工作目录设置为/code.
	设置flask命令使用的环境变量。
	安装 gcc 和其他依赖项
	复制requirements.txt并安装 Python 依赖项。
	将元数据添加到图像中以描述容器正在侦听端口 5000
	将.项目中的当前目录复制到.镜像中的workdir 。
	将容器的默认命令设置为flask run.

5、在 Compose 文件中定义服务

[root@docter composetest]# vim docker-compose.yml 
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
    
# 这个 Compose 文件定义了两个服务:web和redis.

补充

# 网络服务
该web服务使用从Dockerfile当前目录中构建的映像。然后它将容器和主机绑定到暴露的端口5000. 此示例服务使用 Flask Web 服务器的默认端口5000.
# Redis服务
该redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像。

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

 [root@docter composetest]# docker-compose up 

7、报错排查

The command '/bin/sh -c apk add --no-cache gcc musl-dev linux-headers' returned a non-zero code: 3
ERROR: Service 'web' failed to build : Build failed

# Docker 容器似乎没有互联网连接,您必须IPv4 forwarding使用以下命令启用

[root@docter composetest]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@docter composetest]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@docter composetest]# sysctl -p /etc/sysctl.conf
[root@docter composetest]#  
[root@docter composetest]# docker-compose up       #前台启动
[root@docter my_wordpress]# docker-compose up -d   #后台启动

img

8、查看测试docker-compose

[root@docter composetest]# ll
total 16
-rw-r--r-- 1 root root 515 Jul 14 20:29 app.py
-rw-r--r-- 1 root root 111 Jul 14 20:32 docker-compose.yml
-rw-r--r-- 1 root root 281 Jul 14 20:31 Dockerfile
-rw-r--r-- 1 root root  12 Jul 14 20:30 requirements.txt
[root@docter composetest]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
d9b49cecffba   composetest_web   "flask run"              27 minutes ago   Up 27 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   composetest_web_1
ffedc98d9959   redis:alpine      "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes   6379/tcp                                    composetest_redis_1

[root@docter composetest]# curl localhost:5000   # docker-compose 构建成功
Hello World! I have been seen 1 times.

img

七、依据上小结 细讲

1、查看镜像

[root@docter composetest]# docker images
REPOSITORY        TAG          IMAGE ID       CREATED          SIZE
composetest_web   latest       8cada718e4aa   35 minutes ago   184MB
redis             alpine       500703a12fa4   7 days ago       32.3MB
python            3.7-alpine   93ac4b41defe   2 weeks ago      41.9MB

# docker-compose构建redis镜像自动加载成功

拓展

[root@docter composetest]# docker service ls
默认的服务名 文件名_服务名_num
多个服务器,集群 A B _num 副本数量
服务redis服务  ==》 4个副本
集群状态,服务不可能只有一个运行实例  ==》 弹性 10 HA 高并发

2、查看网络规则

[root@docter composetest]# docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
6a94c74d036c   bridge                bridge    local
249dde48a683   composetest_default   bridge    local # 自动添加的
b0ff56aa1b35   host                  host      local
e274cbbee51f   none                  null      local

3、查看网络内部信息

[root@docter composetest]# docker network  inspect  composetest_default 
[
    {
        "Name": "composetest_default",
        "Id": "249dde48a68302b57f0ce8a8640493f36ccd6ee105b1e385100b389d90b20333",
        "Created": "2021-07-14T20:34:09.710827032+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "d9b49cecffbab8645b1b25daa6bbcd69a35f1307941040f7bfb733d71ee381ce": {
                "Name": "composetest_web_1",    # composetest_redis_1和web同一个网络
                "EndpointID": "89b0c1ccc312d494cf37d96adfaccfc648f3840ab78152b3e3f79e79145a309e",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "ffedc98d9959ed4ec92b0ae9fb23ae6f40ef31513c872138ea1e27a109422182": {
                "Name": "composetest_redis_1",   # composetest_redis_1和web同一个网络
                "EndpointID": "4f45b1b989fdcdadfcf4cc3922eace4c252539ed714e62a026cec91d5230325a",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "composetest",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

# 1、10个服务 ==》项目(项目中的内容都在同一个网络下 域名访问)
# 2、如果在同一个网络下,我们可以直接通过域名访问

img

4、停止docker-compose

# 1、docker-compose down  #推荐第一种
在当前文件下执行命令
^CGracefully stopping... (press Ctrl+C again to force)
Stopping composetest_web_1   ... 
Stopping composetest_redis_1 ... done
Killing composetest_web_1    ... done

# 2、ctrl +c

5、docekr小结

1、docker镜像 run ==》容器
2、dockerfile构建镜像 (服务打包)
3、docker-compose启动项目(编排、多个微服务、环境)
4、docker网络

6、yaml规则

docker-compose.yaml # 是docker-compose核心,理解为只有三层

[root@docter composetest]# vim docker-compose.yml 
version: "3.9"   # 版本层,跟docker引擎对应的,第一层
services:   #服务层,第二层
  web:         ##服务1
    build: . #服务配置
    ports:
      - "5000:5000"
  redis:      ##服务2
    image: "redis:alpine" 
    
volumes:  # 其他配置(网络、卷、全局规则)
networks:
configs:

7、学习更多指令参照官方文档

官方文档:(https://docs.docker.com/compose/compose-file/compose-file-v3/)

7--docker-compose详解第6张

八、docker-compose 搭建个人博客

WordPress博客

官网模板:(https://docs.docker.com/samples/wordpress/)

1、下载项目(docker-compose.yml )
2、如果需要文件 Dockerfile
3、文件准备齐全(直接一键启动)

1、创建目录

[root@docter home]# mkdir my_wordpress
[root@docter home]# cd my_wordpress/

2、编写 docker-compose.yml

[root@docter my_wordpress]# vim docker-compose.yml 
version: "3.9"
    
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
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

3、启动

[root@docter my_wordpress]# pwd
/home/my_wordpress
[root@docter my_wordpress]# ll
total 4
-rw-r--r-- 1 root root 646 Jul 14 21:43 docker-compose.yml

[root@docter my_wordpress]# docker-compose up  #前台启动
Creating network "my_wordpress_default" with the default driver
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done   
[root@docter my_wordpress]# docker-compose up -d   #后台启动
Starting my_wordpress_db_1 ... done
Starting my_wordpress_wordpress_1 ... done

# 注: 必须在指定文件docker-compose.yml下启动才可以,否则启动起来是其他容器

4、测试

[root@docter my_wordpress]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                   NAMES
2e9b9aca589a   wordpress:latest   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8000->80/tcp, :::8000->80/tcp   my_wordpress_wordpress_1
e2713ba9243a   mysql:5.7          "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   3306/tcp, 33060/tcp                     my_wordpress_db_1

# 测试访问:  http://192.168.15.30:8000

img

5、总结

1、未来项目只要有docker-compose文件,安装这个规则,启动编排容器
2、公司 docekr-compose 直接启动
3、网上开源项目 docker-compose 一键搞定

# 工程 服务  容器
项目compose:三层
# 1、工程 Porject
# 2、服务 服务
# 3、容器 运行实例


# 补充:
docker secret  # 安全!配置密码,证书

6、扩展 Docker swarm

 Docker swarm   ----> k8s  #docker swarm是低级别的k8s
 
# 集群: 4台集群 --》阿里云购买4台服务器  --》1核2G 都要安装docker

# Raft协议

# 双主双从:假设一个节点挂了,其他节点是否可以用
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于3台

# 实验
1、docker1机器停止。宕机!双主,另外一个主节点也不能使用了!
2、可以将其他节点离开
# 总结
集群 可用 3个主节点 > 1台存活才可用
Raft协议:保证大多数节点存活,才可以用,高可用

# 弹性、扩缩容
服务,	集群中任意的节点可以访问,服务中可以有多个副本动态实现扩缩容
docekr service --help  # 帮助命令
docker service update --relipcas 5 my-nginx  # 扩缩容方式一
docker service scale my-nginx=5 # 扩缩容方式二
docker service rm my-nginx #移除服务

# docker swarm

免责声明:文章转载自《7--docker-compose详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于Tcpdump抓包总结pycharm注册下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

harbar镜像同步

 一、做好镜像文件 1、编辑脚本 pull.sh #!/bin/bash if [ $# -ne 1 ];then echo "Usage:$0 filename" exit 1 fi file=$1 if [ ! -f $file ];then echo "the $file is not a file" exit 2 fi count=...

搭建一套完整的ELK系统

ELK日志收集系统介绍   一  简单介绍             ELK部署搭建有很多成型的方案,这里推荐一种比较中规中矩的方案,它整合了logstash比较消耗资源以及当服务端临时宕机的时候出现数据丢失的问题,主要由filebeat+redis+logstash+elasticsearch+kibana构成,在每个需要收集日志的机器上面下发filebe...

Redis在Linux下的安装

一、下载地址 ①redis中文网下载地址:http://www.redis.cn/ ②百度云网盘下载地址:https://pan.baidu.com/s/1UQcF9V3lwA0fxquM_JFMZw 提取码:lnwk 二、编译软件安装 yum -y install gcc gcc-c++ make 三、安装 解压后进入目录,编译安装命令: make ma...

redis跨实例迁移 &amp;amp; redis上云

1)redis跨实例迁移——源实例db11迁移至目标实例db30 root@fe2e836e4470:/data# redis-cli -a pwd1 -n 11 keys * |while read key > do > echo "Copying $key" > redis-cli -a pwd1 -n 11 --raw dum...

Redis——Springboot集成Redis集群

前言 在 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。 Lettuce 与 Jedis 比较 Lettuce 和 Jedis 的都是连接 Redis Server的客户端。 Jedis 在实现上是直连 redis server,多线程环境下非线...

dockercompose 构建mongodb并导入基础数据示例

使用docker-compose构建mongodb服务并导入基础数据示例。 1、文件目录结构 ——mongo/        |——docker-compose.yml        |——mongo-Dockerfile        |——setup.sh        |——data/                |——xxx1.json     ...