安装docker 

yum install -y docker-io


docker 部署qq docker 部署alist_java


如果提示No package docker-io available,如下图,那么再安装epel

docker 部署qq docker 部署alist_java_02

yum install -y epel-release

接下来再安装就ok了

docker 部署qq docker 部署alist_docker 部署qq_03

制作镜像并提交到镜像仓库

由于我们的应用程序是容器化的 所以这里我们需要制作基础镜像 以便管理生产流水线上的环境 

像这样的场景有很多 例如:

1.旧的应用环境使用的是ant+jdk1.6,新的应用环境使用的是maven+1.8,能不能有个专属于这些应用的环境,每次构建发布的时候,只要拿到我想要的环境然后直接发布即可

2.如果我为我的应用做多服务器负载均衡的话,那么如果我这个应用的环境一改变,是否需要到多台服务器上改变这些环境,有没有办法让这些应用环境一旦需要改变,就更新这些服务器上的环境呢

3.还有容器镜像复用等等等问题

以上的问题 docker的镜像制作都可以为我们解决

假设我们的老系统用的是jdk1.6 有账户模块 用户模块 管理模块 新系统用的是jdk1.8 有商品模块 订单模块 支付模块 

我们可以将镜像划分为几个层 基础镜像 用来选择系统版本 然后就是环境镜像 选择jdk或者构建工具 最后就是应用的镜像 比如说 我们制作了一个jdk1.8的镜像 就可以提供给多个应用去使用这个镜像 我们也不用再去构建环境之类的 

具体思路如下图 网上有些实践文章也是说最好不要加到四层更高 笔者项目当中还是初次实践 还没加的这么多

docker 部署qq docker 部署alist_docker 部署qq_04

接下来就是我们的准备工作 先到docker hub上边申请一个账号 以便push镜像到仓库上边 ps: docker hub的速度比较慢 同学们可以找国内的镜像仓库 笔者也在找 目前找的要钱的居多 这里就用docker hub做示范

首先到docker hub上边注册一个账号 https://hub.docker.com/ 之后会发送确认激活邮件 确认后就可以直接登录了 界面如下

docker 部署qq docker 部署alist_docker 部署qq_05

为自己的环境创建一个仓库 Create Repository

docker 部署qq docker 部署alist_docker 部署qq_06

这里我就随便起个名字了 叫做base 那么我们后边dockerfile上边from的镜像前缀就使用name/base:app-version这个格式

name一般就是用户名 base标识这个仓库 一般我个人用来标识这个仓库是干嘛的 例如是基础环境仓库 app就是应用名 version就是应用版本 如果我制作的是jdk1.8的镜像 那么就是这样:huaihz/base:jdk-1.8 这个是个人习惯 当然同学们有其他的用法的话也可以按照其他的方式去命名去用

这里我们先制作一个基础的系统镜像 首先创建dockerfile目录

mkdir -p /usr/local/docker/dockerfile/centos/7/7.3
cd /usr/local/docker/dockerfile/centos/7/7.3/

编写Dockerfile

vim Dockerfile
FROM centos:centos7.3.1611#选择系统版本镜像 FROM命令是基于哪个镜像制作
MAINTAINER huaihkiss <1174889899@qq.com>#编写作者信息
RUN yum install -y wget #安装wget RUN是执行shell命令
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份默认源
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #为镜像添加国内源
RUN yum -y makecache #刷新源缓存
RUN yum install -y openssl openssh-clients initscripts iptables openssh-server net-tools #安装镜像必要程序
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key #配置登录认证
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key #配置登录认证
RUN mkdir /usr/local/soft #创建应用文件夹 待其他镜像使用
RUN touch /etc/pam.d/sshd #配置登录认证
RUN sed -ri 's/sessionrequired pam_loginuid.so/#sessionrequired pam_loginuid.so/g' /etc/pam.d/sshd #配置登录认证
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh #配置登录认证
EXPOSE 22 #开放22端口 EXPOSE命令带上端口号为开放端口
RUN echo 'root:123456' | chpasswd #初始化密码
ENV LANG en_US.UTF-8 #配置环境变量
ENV LC_ALL en_US.UTF-8 #配置环境变量
CMD /usr/sbin/sshd -D #容器启动执行的命令

保存 然后编译镜像 

docker build -t huaihkiss/centos7-base:centos-7.3 .

docker 部署qq docker 部署alist_java_07



命令解释 这里用docker build编译一个docker镜像 

参数-t的意思就是给镜像打上tag标签 后边带了 huaihkiss/centos7-base:centos-7.3这里的huaihkiss就是我们dockerhub的用户名 centos7-base就是我们创建的镜像仓库名 centos-7.3就是具体的镜像名称注:这里笔者换了一个docker hub账号 所以用户名现在就变成了huaihkiss 仓库名就变成了 centos7-base 笔者这个账号里边的东西是现成的 后期也将用这个做演示

docker 部署qq docker 部署alist_docker_08

构建成功!查看所有镜像

docker images



docker 部署qq docker 部署alist_centos_09


可以发现镜像成功打上去了 接下来登录docker hub账号 将该镜像上传到dockerhub上边

docker login


docker 部署qq docker 部署alist_docker 部署qq_10


上传镜像 

docker push huaihkiss/centos7-base:centos-7.3



docker 部署qq docker 部署alist_centos_11


上传成功之后 去docker-hub中对应的仓库查看 在tag下边看

docker 部署qq docker 部署alist_docker 部署qq_12

docker-hub中的仓库已经有了 接下来基于这个系统镜像 再制作jdk镜像 

创建jdk的docker file目录

mkdir -p /usr/local/docker/file/java/jdk/jdk8/1.8
cd /usr/local/docker/file/java/jdk/jdk8/1.8

下载jdk文件到该目录中 以便将jdk放在镜像中

创建jdk的Dockerfile

vim Dockerfile
FROM huaihkiss/centos7-base:centos-7.3
#选择基础系统镜像 这里我们FROM我们上一步骤制作的系统镜像 填入他的完整tag
MAINTAINER huaihkiss <1174889899@qq.com>
ADD jdk-8u144-linux-x64.tar.gz /usr/local/soft
#将刚刚下载的jdk文件放在镜像中的soft文件夹中 也就是我们上一步骤中创建的soft目录 注意 jdk的压缩包记得一定要放进去
#RUN tar -xf /usr/local/soft/jdk-8u144-linux-x64.tar.gz
ENV JAVA_HOME /usr/local/soft/jdk1.8.0_144
ENV PATH $PATH:$JAVA_HOME/bin
#这里他会自动解压 将jdk路径写到环境变量即可 格式为: ENV 变量名 变量值
CMD /usr/sbin/sshd -D

保存后 构建dockerfile

docker build -t huaihkiss/centos7-base:jdk-1.8 .


docker 部署qq docker 部署alist_docker 部署qq_13


查看镜像 

docker images



docker 部署qq docker 部署alist_centos_14

现在用jdk镜像运行一个容器 看看能用不

docker run -it --name jdk-1.8-con huaihkiss/centos7-base:jdk-1.8 /bin/bash



docker 部署qq docker 部署alist_centos_15

测试java是否安装成功

java -version

docker 部署qq docker 部署alist_docker_16

ctrl+q+p退出容器交互 这种方式退出交互不会结束容器 

接下来查看所有容器 看看jdk容器详细信息

docker ps -a


docker 部署qq docker 部署alist_docker_17


ok  环境容器也制作完了 接下来如果想往上边再制作maven或者ant gradle等构建工具 的话 再基于这个镜像制作就好 

现在把jdk镜像也上传到docker-hub

docker push huaihkiss/centos7-base:jdk-1.8


docker 部署qq docker 部署alist_java_18


查看docker-hub

docker 部署qq docker 部署alist_docker 部署qq_19

ok 大功告成