docker:基于centos7系统下的docker-compo
2019-12-23 本文已影响0人
不加糖L
一、安装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" <1491623908@qq.com> //维护人信息
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" <1491623908@qq.com>
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
firewall-cmd --reload