天天看點

極簡入門Docker-Compose部署以及項目編排實戰

  • 用處:定義、運作多個容器的程式,批量容器編排。
  • YAML配置檔案
  • single command指令學習
  • 使用Compose三個步驟:
  1. 義Dockerfile
  1. 寫docker-compose.yaml
  2. 行compose,docker-cmpose up啟動
  • 安裝docker-compose
  • Linux
  • ​​Docker Compose​​存放在GitHub,高速安裝Docker Compose如下:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose      
  • 給compose指令賦予可執行的權利
chmod +x /usr/local/bin/docker-compose      
  • 檢測是否安裝成功,不成功的話就需要重新開機伺服器
[root@Contos7 ~]# docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019      
  • Mac
  • mac其實不需要安裝,因為Docker Desktop中就自帶compose。
  • compose初體驗 📦
  • 建立項目結構:
mkdir composetest && cd composetest      
  • 建立​

    ​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)      
  • 建立requirements.txt檔案
flask
redis      
  • 編寫Dockerfile
#将python:3.7-alpine作為基礎鏡像
FROM python:3.7-alpine   
#設定工作目錄    
WORKDIR /code    
#設定環境變量     
ENV FLASK_APP=app.py     
#設定主機比對所有位址,即所有主機可通路
ENV FLASK_RUN_HOST=0.0.0.0 
#安裝包的時候不安裝到全局
#使員工gcc來編譯程式,但是一旦程式被編譯,我就不再需要gcc了,并且可以加快編譯速度
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"]      
  • 編寫docker-compose.yml
#docker-compose版本号
version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"      
  • 在docker-compose.yml所在目錄使用docker-compose up啟動(定義、運作多個容器),docker-compose down停止
  • Tips⚠️ :這樣建立出的容器的名字是目前docker-compose.yaml所在目錄的目錄名加上yml中的服務名,尾部的num表示該容器的副本數量,這些副本可以發送到其他機器上運作,compose會建構一個預設的網絡(不使用docker0),所有容器預設在一個網絡中
  • 使用idea用docker-compose打包釋出
極簡入門Docker-Compose部署以及項目編排實戰

![\[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-pgtBT0VD-1644003267186)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/93ec0055-0f8c-4cdc-9efb-26ccae0635d6/Untitled.png)\]](https://img-blog.csdnimg.cn/f8d94374d468496d8a51371cbc54729a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_30,g_se,x_16)

  • 複制jar包pom配置
<!--複制jar包到指定目錄-->
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>gen-webadmin</id>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy todir="docker" file="target/${project.artifactId}-${project.version}.${project.packaging}" />
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>      
極簡入門Docker-Compose部署以及項目編排實戰
  • yam規則
#三層

#compops版本号
version: "xxx"
#服務配置
services:
   server1:
      configuration1:
      configuration2:
      configuration3:
      configuration4
      #啟動順序控制,先啟動數組中的服務項,最後再啟動本服務
      depends_on:
      
      ....
  server2:
      configuration1
      ....
#全局配置
netowkr
volume      
  • 使用docker-compose.yml建構wordpress部落格園
  • docker-compose.yml
version: "3.8"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_datas:/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:
      - "5000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_datas: {}      
  • 使用docker-compose up -d可以讓其在背景啟動,不加-d表示在前台啟動