docker:基於centos7系統下的docker-compose一鍵專案部署案例
阿新 • • 發佈:2019-01-11
一、安裝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