docker:基于centos7系统下的docker-compose一键项目部署案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_31032177/article/details/80282705

一、安装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

猜你喜欢

转载自blog.csdn.net/sinat_31032177/article/details/80282705
今日推荐