7--docker-compose詳解


一、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 「完全啟動」之后才啟動。

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.\n'.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/)

八、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM