一、安裝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" <[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