1. 程式人生 > 其它 >docker compose 快速編排

docker compose 快速編排

目錄

一、Docker-compose概述

1.Docker-Compose專案是Docker官方的開源專案,負責實現對Docker容叢集的快速編排
2.Docker-Compose將所管理的容器分為三層,分別是工程(project),服務(service)以及容器(container)。Docker-Compose執行目錄下的所有檔案(docker-compose.yml,extends檔案或環境變數檔案等)組成一個工程,若無特殊指定工程名即為當前目錄名。一個工程當中可包含多個服務,每個服務中定義了容器執行的映象、引數、依賴。一個服務當中可包括多個容器例項,Docker-Compose並沒有解決負載均衡的問題,因此需要藉助其它工具實現服務發現及負載均衡,比如 Consul
3.Docker-Compose的工程配置檔案預設為docker-compose.yml,可通過環境變數COMPOSE_FILE或-f引數自定義配置檔案,其定義了多個有依賴關係的服務及每個服務執行的容器
4.使用一個Dockerfile模板檔案,可以讓使用者很方便的定義一個單獨的應用容器。在工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個Web專案,除了Web服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等
5.Compose允許使用者通過一個單獨的docker-compose.yml模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project)。
6.Docker-Compose專案由Python編寫,呼叫Docker服務提供的API來對容器進行管理。因此,只要所操作的平臺支援Docker API, 就可以在其上利用Compose來進行編排管理

二、YAML檔案格式及編寫注意事項

YAML 是一種標記語言,它可以很直觀的展示資料序列化格式,可讀性高。類似於 XML資料描述語言,語法比 XML 簡單的很多。YAML 資料結構通過縮排來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號 [] 括起來, hash 用花括號 {} 括起來

三、Docker Compose配置常用欄位

欄位 說明
build 指定 Dockerfile 檔名,要指定Dockerfile檔案需要在build標籤的子級標籤中使用dockerfile標籤指定
dockerfile 構建映象上下文路徑
context 可以是 dockerfile 的路徑,或者是指向 git 倉庫的 url 地址
image 指定映象
command 執行命令,覆蓋預設命令
container name 指定容器名稱,由於容器名稱是唯一的,如果指定自定義名稱,則無法 scale
deploy 指定部署和執行服務相關配置,只能在 Swarm 模式使用
environment 新增環境變數
networks 加入網路
ports 暴露容器埠,與 -p 相同,但埠不能低於 60
volumes 掛載宿主機路徑或命令卷
hostname 容器主機名
restart 重啟策略,預設 no,always,no-failure,unless-stoped

1.no,預設策略,在容器退出時不重啟容器
2.on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
3.on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
4.always,在容器退出時總是重啟容器
5.unless-stopped,在容器退出時總是重啟容器,但是不考慮在 Docker 守護程序啟動時就已經停止了的容器

四、Docker Compose常用命令

build:重新構建服務
ps:列出容器
up:建立和啟動容器	
exec:在容器裡面執行命令
scale:指定一個服務容器啟動數量
top:顯示容器程序
logs:檢視容器輸出
down:刪除容器、網路、資料卷和映象
stop/start/restart:停止/啟動/重啟服務

五、compose部署lnmp

5.1 Docker Compose環境安裝

Docker Compose 是 Docker 的獨立產品,因此需要安裝 Docker 之後在單獨安裝 Docker Compose

#下載 在Linux上我們可以從GitHub上下載它的二進位制包來使用,此命令是下載Docker Compose的當前穩定版本'
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝 
chmod +x /usr/local/bin/docker-compose
#檢視版本
docker-compose --version

5.2 建立工作目錄並移動相應安裝包、配置檔案

----------------------nginx-----------------------------
1.mkdir -p /opt/compose-lnmp/nginx
2.cd  /opt/compose-lnmp/nginx
3.把nginx-1.12.0.tar.gz和wordpress-4.9.4-zh_CN.tar.gz和nginx的配置檔案nginx.conf移進來(配置檔案都已經修改好)
----------------------mysql-----------------------------
1.mkdir -p /opt/compose-lnmp/mysql
2.cd  /opt/compose-lnmp/mysql
3.把boost_1_59_0.tar.gz和mysql-5.7.17.tar.gz和mysql配置檔案my.cnf移動到本目錄(配置檔案都已經修改好)
----------------------php--------------------------------
1.mkdir -p /opt/compose-lnmp/php
2.cd  /opt/compose-lnmp/php
3.把php-7.1.10.tar.bz2、php-fpm.conf、php.ini、www.conf移動到本目錄(配置檔案都已經修改好)

5.3 編寫dockerfile

在3個服務的工作目錄下編寫dockerfile,與之前的構建lnmp一致,這邊就不敘述了

5.4 構建lnmp的compose檔案

cd /opt/compose-lnmp #compose的工作目錄
vim docker-compose.yml   #構建compose的yml檔案
version: '2'   #版本2能使用volumes_from
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx
    ports:
      - 1111:80
      - 2222:443
    volumes:
      - ./nginx/html/:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
  mysql:
    hostname: mysql
    build:
      context: ./mysql
      dockerfile: Dockerfile
    container_name: mysql
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
    ports:
      - 3306:3306
  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    ports:
      - 9000:9000
    volumes_from:
      - nginx
      - mysql
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

5.5 啟動compose搭建的lnmp

cd /opt/compose-lnmp/
docker-compose -f docker-compose.yml up -d
----------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板檔案,預設為 docker-compose.yml
-p, --project-name NAME :指定專案名稱,預設使用目錄名稱
-d :在後臺執行
----------------------------------------------------------
docker ps -a

5.6 進入資料庫容器給與許可權

docker exec -it mysql /bin/bash

mysql  #進入資料庫
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '264196';
grant all privileges on *.* to 'root'@'%' identified by '264196';
flush privileges;

5.7 瀏覽器訪問

http://192.168.80.11:1111/wordpress/index.php