docker容器自动化部署落地实践之三:docker安装配置与dockerfile制作镜像

安装docker 

yum install -y docker-io

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


yum install -y epel-release
接下来再安装就ok了


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

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

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

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

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

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

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

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

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

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


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

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


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


这里我就随便起个名字了 叫做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 build编译一个docker镜像 

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


构建成功!查看所有镜像

docker images


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

docker login

上传镜像 

docker push huaihkiss/centos7-base:centos-7.3


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


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 images

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

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

测试java是否安装成功

java -version


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

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

docker ps -a

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

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

docker push huaihkiss/centos7-base:jdk-1.8

查看docker-hub


ok 大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值