1. 程式人生 > >docker:基於centos7系統下的docker-compose一鍵專案部署案例

docker:基於centos7系統下的docker-compose一鍵專案部署案例

一、安裝docker

yum list docker //查詢可下載的軟體,查詢結果如下
docker.x86_64                       2:1.13.1-53.git774336d.el7.centos                        @extras

yum -y install docker.x86_64 //安裝docker

service docker start/stop/restart //啟動/停止/重啟docker服務

二、安裝docker-compose 外掛用於編排映象

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose            //下載並安裝docker-compose

chmod +x /usr/local/bin/docker-compose  //設定許可權

docker-compose -version                //檢視版本,此版本為1.14 版本過低部分功能無法使用


三、獲取國內映象加速器
這裡寫圖片描述
註冊阿里雲帳號即可獲得 如圖配置可解決無法pull映象的問題

四、部署基礎映象
1、從網上映象倉庫下載映象(可聯網環境)
docker search 命令查詢映象源中的映象,下圖以swarm為例
這裡寫圖片描述
docker pull 命令根據NAME下載對應的映象 ,docker images 檢視伺服器中已有映象
這裡寫圖片描述

2、本地tar檔案匯入映象(離線環境)
將壓縮檔案匯入伺服器
這裡寫圖片描述

docker load -i 命令可將壓縮成tar檔案的映象匯入伺服器

docker load -i docker_mapbox.tar 

這裡寫圖片描述

五、重構建映象
因為一般的基礎映象不足以滿足實際部署需求,需要對映象進行個性化的定製如:資料庫需要建表,序列,匯入資料;tomcat需要放入war包。
1、Dockerfile的構建

例1:資料庫映象重構

FROM mdillon/postgis:latest                                  //基礎映象,本地有會用本地;本地沒有會從網上pull
MAINTAINER "LJL" <[email protected]>                         //維護人資訊
ENV TZ=Asia/Shanghai                                         //地地區
COPY ./all_object.sql /docker-entrypoint-initdb.d/           //將"本路徑"下的all_object.sql 檔案拷貝到PG資料庫的docker-entrypoint-initdb.d/檔案路徑下(該目錄下的檔案在映象啟動容器時會自動執行)


all_object.sql內有建表和匯入資料等語句
CREATE TABLE "public"."sys_menu" (
"id" varchar(64) COLLATE "default" NOT NULL,
"parent_id" varchar(64) COLLATE "default" NOT NULL,
"parent_ids" varchar(2000) COLLATE "default" NOT NULL,
"name" varchar(100) COLLATE "default" NOT NULL,
"sort" numeric(10) NOT NULL,
"href" varchar(2000) COLLATE "default",
"target" varchar(20) COLLATE "default",
"icon" varchar(100) COLLATE "default",
"is_show" char(1) COLLATE "default" NOT NULL,
"permission" varchar(200) COLLATE "default",
"create_by" varchar(64) COLLATE "default" NOT NULL,
"create_date" timestamp(0) NOT NULL,
"update_by" varchar(64) COLLATE "default" NOT NULL,
"update_date" timestamp(0) NOT NULL,
"remarks" varchar(255) COLLATE "default",
"del_flag" char(1) COLLATE "default" NOT NULL
)
WITH (OIDS=FALSE)

;
COMMENT ON TABLE "public"."sys_menu" IS '選單表';
COMMENT ON COLUMN "public"."sys_menu"."id" IS '編號';
COMMENT ON COLUMN "public"."sys_menu"."parent_id" IS '父級編號';
COMMENT ON COLUMN "public"."sys_menu"."parent_ids" IS '所有父級編號';
COMMENT ON COLUMN "public"."sys_menu"."name" IS '名稱';
COMMENT ON COLUMN "public"."sys_menu"."sort" IS '排序';
COMMENT ON COLUMN "public"."sys_menu"."href" IS '連結';
COMMENT ON COLUMN "public"."sys_menu"."target" IS '目標';
COMMENT ON COLUMN "public"."sys_menu"."icon" IS '圖示';
COMMENT ON COLUMN "public"."sys_menu"."is_show" IS '是否在選單中顯示';
COMMENT ON COLUMN "public"."sys_menu"."permission" IS '許可權標識';
COMMENT ON COLUMN "public"."sys_menu"."create_by" IS '建立者';
COMMENT ON COLUMN "public"."sys_menu"."create_date" IS '建立時間';
COMMENT ON COLUMN "public"."sys_menu"."update_by" IS '更新者';
COMMENT ON COLUMN "public"."sys_menu"."update_date" IS '更新時間';
COMMENT ON COLUMN "public"."sys_menu"."remarks" IS '備註資訊';
COMMENT ON COLUMN "public"."sys_menu"."del_flag" IS '刪除標記';

例2:tomcat映象重構

FROM tomcat                                                    
MAINTAINER "LJL" <14916[email protected]>
ENV TZ=Asia/Shanghai
COPY ./geoserver.war /usr/local/tomcat/webapps/                     //將"本路徑"中的war包拷貝到tomcat的webapp路徑下,會在啟動tomcat時自動解壓執行war包


//除了以上的配置引數外還有很多,有興趣自查

2、執行Dockerfile構建映象(此教程將此過程配置在docker-compose.yml 檔案中)

docker build -t ljl/ssh ./   //-t映象名字  .當前目錄

六、docker-compose 統一編排管理容器
1、docker-compose.yml檔案的配置(上文中的"本路徑"均是指與此檔案相同的路徑)
目錄結構如圖
這裡寫圖片描述

version: '2'                                                                     //版本號
services:                                                                        //服務,下一級均為服務名
    tomcatGeo:                                                                   //服務名
        container_name: Geo                                                      //生成容器名
        image: "tomcat:Geo"                                                      //生成該容器的映象名(重構後的映象)          
        build:                                                                   //構建映象
            context: .                                                           //dockerfile來源路徑(.代表本路徑)
            dockerfile: Dockerfile.tomcatGeo                                     //指定dockerfile
        ports:                                                                   //配置埠
            - "9087:8080"                                                        //對映埠:軟體埠(外網通過 ip地址:9087 來訪問此tomcat)
        networks:                                                                //網路名(僅為一個標記,用來保證所有容器執行與同一網路下,保證容器間的互相通訊的可行性)
            - mynet

    tomcatMap:
        container_name: Map
        image: "tomcat:Map"
        build:
            context: .
            dockerfile: Dockerfile.tomcatMap
        ports:
            - "8888:8080"
        networks:
            - mynet        
    
    tomcatWeb:
        container_name: Web
        image: "tomcat:Web"
        build:
            context: .
            dockerfile: Dockerfile.tomcatWeb
        ports:
            - "8087:8080"
        networks:
            - mynet       
                                                                                 //以上三個tomcat是同一個基礎映象的三個不同的重構

    postgresql:              
        container_name: postgresql
        image: "postgresql:131"
        build:
            context: .
            dockerfile: Dockerfile.PGsql
        environment:                                                            //環境引數:帳號密碼
            - POSTGRES_PASSWORD=postgres                                        
            - POSTGRES_USER=postgres
        ports:
            - "5432:5432"
        networks:
            - mynet

    mongo:
        container_name: mongo
        image: docker_mongo:latest
        ports:
            - "27017:27017"
        networks:
            - mynet

    mapbox:
        container_name: mapbox
        image: container-backup:latest
        ports:
            - "9095:80"
        networks:
            - mynet

networks:
    mynet:




//引數還有很多,有興趣自查

2、docker-compose up -d 命令 完成映象重構和容器啟動
這裡寫圖片描述

重構的映象如圖
這裡寫圖片描述

啟動的容器如圖
這裡寫圖片描述

如果埠連結打不開 嘗試此程式碼

firewall-cmd --zone=public --add-port=5432/tcp --permanent