1. 程式人生 > >【docker案例】專案打包部署

【docker案例】專案打包部署

docker compose用法

什麼是compose

Compose是一個定義和管理多容器的工具,使用Python語言編寫。使用Compose配置檔案描述多個容器應用的架構,比如使用什麼映象、資料卷、網路、對映埠等;然後一條命令管理所有服務,比如啟動、停止、重啟等。

安裝compose

curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者
pip install docker-compose

compose使用yaml檔案格式

YAML是一種標記語言很直觀的資料序列化格式,可讀性高。類似於XML資料描述語言,語法比XML簡單的很多。

YAML資料結構通過縮排來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號括起來,hash用花括號括起來。

YAML檔案格式注意事項:

  1. 不支援製表符tab鍵縮排,需要使用空格縮排
  2. 通常開頭縮排2個空格
  3. 字元後縮排1個空格,如冒號、逗號、橫杆
  4. 用井號註釋
  5. 如果包含特殊字元用單引號引起來
  6. 布林值(true、false、yes、no、on、off)必須用引號括起來,這樣分析器會將他們解釋為字串。

compose配置檔案常用欄位

這裡寫圖片描述

compose常用命令

這裡寫圖片描述

一鍵部署LNMP網站平臺

專案目錄結構

這裡寫圖片描述
docker-compose.yaml是主配置檔案,mysql中有一個配置檔案和一個空的資料目錄。

nginx和php中包含配置檔案、dockerfile和原始碼包。

wwwroot是網站的根目錄。

docker-compose.yml

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 81
:80
networks: - lnmp volumes: - ./wwwroot:/usr/local/nginx/html php: hostname: php build: context: ./php dockerfile: Dockerfile networks: - lnmp volumes: - ./wwwroot:/usr/local/nginx/html mysql: hostname: mysql image: mysql:5.6 ports: - 3306:3306 networks: - lnmp volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/data:/var/lib/mysql command: --character-set-server=utf8 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: user123 networks: lnmp:

部署

docker-compose -f docker-compose.yml up

這裡寫圖片描述

部署完成後通過瀏覽器訪問81埠進行測試,可以看到php的測試頁面。
這裡寫圖片描述

後臺執行

目前是在前臺執行,退出終端後進程結束,可以增加-d選項來在後臺執行。

docker-compose -f docker-compose.yml up -d

這裡寫圖片描述

然後檢視容器執行情況:

docker-compose ps 

這裡寫圖片描述

這裡注意在執行docker-compose時會讀取yaml檔案,所以一定要在yaml檔案所在目錄下執行命令或者指定檔案路徑,否則會報錯。

安裝wordpress測試

刪除釋出目錄中的php測試頁面,下載wordpress原始碼到網站根目錄並解壓。
這裡寫圖片描述

通過瀏覽器直接訪問81埠的wordpress,可以進入wordpress設定頁面
這裡寫圖片描述

設定的時候的資料庫名、使用者名稱和密碼就是在yaml檔案中設定的,資料庫主機直接寫容器的名字便會自動連線到容器中的服務。
這裡寫圖片描述

之後設定一下使用者名稱密碼就可以完成並登入了:
這裡寫圖片描述

一鍵部署nginx反向代理Tomcat叢集

目錄結構

這裡寫圖片描述

平臺架構

user –> nginx –> tomcat(可能有n個) –> mysql

docker-compose.yml

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 82:80
    networks:
      - lnmt
    volumes:
      - ./webapps:/opt/webapps

  tomcat01:
    hostname: tomcat01
    build: ./tomcat
    networks:
      - lnmt
    volumes:
      - /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
      - ./webapps:/usr/local/apache-tomcat-8.0.46/webapps

  tomcat02:
    hostname: tomcat02
    build: ./tomcat
    networks:
      - lnmt
    volumes:
      - /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
      - ./webapps:/usr/local/apache-tomcat-8.0.46/webapps

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3307:3306
    networks:
      - lnmt
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmt:

在nginx的配置檔案中,設定了一個負載均衡策略:

upstream www.example.com {
        #ip_hash;
        server tomcat01:8080;
        server tomcat02:8080;
    }

建立專案

首先下載jdk到當前目錄下,以便容器引用
這裡寫圖片描述

然後將jdk包放到/usr/local下

docker-compose -f docker-compose.yml up -d

訪問測試

首先檢視容器的狀態:
這裡寫圖片描述

然後通過瀏覽器訪問82埠應該看見如下頁面:
這裡寫圖片描述