天天看點

雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

1 DockerCompose介紹

  Compose 是用于定義和運作多容器 Docker 應用程式的工具。通過 Compose,您可以使用 YML 檔案來配置應用程式需要的所有服務。然後,使用一個指令,就可以從 YML 檔案配置中建立并啟動所有服務。

一鍵啟動所有的服務

DockerCompose的使用步驟

  • 建立對應的DockerFile檔案
  • 建立yml檔案,在yml檔案中編排我們的服務
  • 通過

    docker-compose up

    指令 一鍵運作我們的容器

2 Compose安裝

  官網位址:

https://docs.docker.com/compose
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.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      

修改檔案夾權限

chmod +x /usr/local/bin/docker-compose      

建立軟連接配接

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose      

校驗是否安裝成功

docker-compose --version      

3 Compose初體驗

  通過官方案例來示範:

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

  建立對應的目錄

mkdir composetest
 cd composetest      

  建立Python檔案 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檔案

# 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"]      

  然後建立核心的 yml檔案

docker-compose.yml

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"      

  最終通過

docker-compose up

指令來啟動容器

docker-compose up      
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

  啟動時間比較久,耐心等待即可

  測試通路:

雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

  如果要退出服務

Ctrl+c

或者

docker-compose down

4 Compose配置規則

  docker-compse.yml核心

https://docs.docker.com/compose/compose-file/compose-file-v3/
version: '' # 版本
servers:  # 服務
  服務1: web
     # 服務的配置
     build
     network
     images
  服務2: redis
  服務3:
  服務4:
  ...
# 其他配置 網絡,全局的規則 資料卷
volumes:
configs:
networks:      

5 Compose一鍵部署實戰

5.1 一鍵部署WP部落格

1> 建立my_wordpress目錄

mkdir my_wordpress      

2>建立yml檔案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>通過up指令啟動

docker-compose up -d      
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

5.2 部署一個SpringBoot項目

我們自己通過Java項目實作通路計數的功能

FROM java:8
COPY my-counter-views-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD ["java","-jar","app.jar"]      

yml

version: '3.9'
services:
  myapp:
    build: .
    image: myapp
    depends_on:
      - redis
    ports:
      - "8080:8080"
  redis:
    image: "library/redis:alpine"      

6 Compose常見操作

(1)檢視版本

docker-compose version

(2)根據yml建立service

docker-compose up

指定yaml:docker-compose up -f xxx.yaml

背景運作:docker-compose up -d

(3)檢視啟動成功的service

docker-compose ps

也可以使用docker ps

(4)檢視images

docker-compose images

(5)停止/啟動service

docker-compose stop/start

(6)删除service[同時會删除掉network和volume]

docker-compose down

(7)進入到某個service

docker-compose exec redis sh

7 scale擴縮容

docker-compose up --scale web=5 -d      
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容

小結:docker-compose

工程–>服務–>容器

version:
services:
  服務1:
  服務2:
  服務3:      
雲原生時代必須具備的核心技能之Docker進階篇(DockerCompose-容器編排)1 DockerCompose介紹2 Compose安裝3 Compose初體驗4 Compose配置規則5 Compose一鍵部署實戰6 Compose常見操作7 scale擴縮容