基础镜像制作

基础镜像制作

[TOC]

1.jar包的制作过程

jar包的运行需要java环境的支持,基于centos7.6.1810版本进行镜像制作. 镜像制作先手工实现一遍,随后将命令历史,依次写入dockerfile文件中,实现dockfile定制镜像

镜像的手工制作

  1. 启动centos7.6.1810镜像
  • docker:命令
  • run: 运行一个容器
  • -itd: 以交互和后台方式启动容器
  • --name="fleet_admin": 启动的容器名称
  • -v /opt:/opt :磁盘挂载,前面为宿主机目录,后面为容器目录, 把容器的/opt/挂载到宿主机的/opt(opt中有java安装包和java配置文件)
  • centos:7.6.1810:启动的基础镜像
[root@docker41 nginx]# docker run -itd --name="fleet_admin" -v /opt:/opt centos:7.6.1810
510b85fe81b5b91ef97a2e6366e4aa63e415397d448f9e5466d37f48edff6f27
  1. 进入容器
  • exec :开启一个新终端登录容器,退出不会影响容器运行
  • -it:以交互方式登录
  • 510b85fe81b5b91e...:启动的容器ID
  • bash:基础命令
[root@docker41 nginx]# docker exec -it 510b85fe81b5b91ef97a2e6366e4aa63e415397d448f9e5466d37f48edff6f27 bash
  1. 容器内命令操作
  • 首先安装java环境
  • 然后放置jar包和配置文件到相应目录
  • 最后启动jar包测试
##创建java目录
mkdir /usr/local/java

##切换到/opt下面的安装包目录
cd /opt/install/java/

##解压安装包到创建好的java目录中
tar xfv jdk-8u144-linux-x64.tar.gz  -C /usr/local/java/

##创建fleet用户,需要保持每一个容器中的fleet UID相同
useradd fleet -u 2020
echo "Fleet2020@DB."|passwd --stdin fleet

##修改目录属主属组
chown -R  fleet:fleet /usr/local/java

##追加环境变量
cat environment.txt >> /etc/profile

##创建jar包目录
mkdir -p /opt/fleet
chown -R fleet:fleet /opt/fleet

##复制jar包和配置文件目录到/opt/fleet目录下
cp admin.jar /opt/fleet
cp -r javaconfig /opt/fleet/

##激活环境变量
source /etc/profile

##执行启动jar服务进行测试
nohup java -jar -Duser.timezone=UTC /opt/fleet/admin/admin.jar --spring.application.name=cloudunify-admin --spring.cloud.bootstrap.location=/opt/fleet/javaconfig/nacosConfig.properties &

至此java环境没有问题即可,docker内操作完毕jar包部署完毕,

镜像的dockerfile制作

dockerfile 目录介绍

相应的安装包和配置要先准备好

[root@docker41 admin]# tree -L 2
.
├── conf    ##配置文件放置目录
│   ├── environment.txt     ##环境变量文件
│   └── javaconfig      ##java包连接信息文件
├── dockerfile      ##dockfile文件
└── packages        ##java环境安装包目录和jar包目录
    ├── admin.jar   ##jar包
    └── jdk-8u144-linux-x64.tar.gz  ##java环境安装包

dockerfile文件编写

  • 把手工执行的命令,按顺序放入dockerfile文件中
FROM centos:7.6.1810
RUN useradd fleet -u 2020 && echo "Fleet2020@DB."|passwd --stdin fleet
RUN mkdir /usr/local/java  && chown -R  fleet:fleet /usr/local/java
ADD packages/jdk-8u144-linux-x64.tar.gz /usr/local/java/
RUN mkdir -p /opt/fleet/admin && chown -R  fleet:fleet /opt/fleet
ADD conf/environment.txt /opt/fleet/
RUN cat /opt/fleet/environment.txt >> /etc/profile
ADD conf/javaconfig /opt/fleet/
ADD packages/admin.jar /opt/fleet/
RUN mkdir /data && touch /data/start.sh
RUN echo "source /etc/profile" >>/data/start.sh
RUN echo "nohup java -jar -Duser.timezone=UTC /opt/fleet/admin.jar --spring.application.name=cloudunify-admin --spring.cloud.bootstrap.location=/opt/fleet/javaconfig/nacosConfig.properties &" >>/data/start.sh
RUN echo "tail -f /dev/null" >>/data/start.sh
ENTRYPOINT source /etc/profile && sh /data/start.sh



以上为正式的dockerfile文件,可复制使用
分割线---------------------------------------------------------------------------------------------------
以下为dockfile文件介绍


##dockerfile文件详解
FROM centos:7.6.1810    ##基于centos:7.6.1810基础镜像
RUN useradd fleet -u 2020 && echo "Fleet2020@DB."|passwd --stdin fleet  ##执行命令:添加用户和密码
RUN mkdir /usr/local/java  && chown -R  fleet:fleet /usr/local/java     ##执行命令:创建目录
ADD packages/jdk-8u144-linux-x64.tar.gz /usr/local/java/        ##添加文件:到/usr/local/java/中
RUN mkdir -p /opt/fleet/admin && chown -R  fleet:fleet /opt/fleet   ##执行命令:创建目录
ADD conf/environment.txt /opt/fleet/    ##添加文件: 到/opt/fleet
RUN cat /opt/fleet/environment.txt >> /etc/profile  ##执行命令:把变量追加到/etc/profile文件中
ADD conf/javaconfig /opt/fleet/     ##添加文件:到/opt/fleet
ADD packages/admin.jar /opt/fleet/  ##添加文件:jar包到相应目录
RUN mkdir /data && touch /data/start.sh     ##创建统一开始脚本
RUN echo "source /etc/profile" >>/data/start.sh     ##追加命令到脚本中
RUN echo "nohup java -jar -Duser.timezone=UTC /opt/fleet/admin.jar --spring.application.name=cloudunify-admin --spring.cloud.bootstrap.location=/opt/fleet/javaconfig/nacosConfig.properties &" >>/data/start.sh    ##添加启动jar包服务的命令到启动脚本中
RUN echo "tail -f /dev/null" >>/data/start.sh
ENTRYPOINT source /etc/profile && sh /data/start.sh     ##设置容器开机第一执行命令为 sh /data/start.sh

注:以上添加的文件都在dockerfile目录下,以dockerfile当前目录为基准,

开始镜像构建

  • docker build -t: 构建镜像命令
  • fleet_datasvr_jar:v1:构建的镜像名称为fleet_datasvr_ja, 版本号为 v1
  • dockerfile: 使用当前目录下的dockerfile文件构建
[root@docker41 datasvr]# docker build -t fleet_datasvr_jar:v1 dockerfile

出现以下信息则为构建成功

Step 14/14 : ENTRYPOINT source /etc/profile && sh /data/start.sh
 ---> Running in d34a94759cfe
 ---> cd24a0dc7a85
Removing intermediate container d34a94759cfe
Successfully built cd24a0dc7a85     ##成功构建镜像

启动刚刚构建的镜像

[root@docker41 datasvr]# docker run -d cd24a0dc7a85

进入容器进行检查,有java服务启动

  • java -jar: java环境能够正常使用
docker exec -it ff386134922b3c135e80325d266ef6277e62ec5fc5173043ba5ffb9cb789cb76 bash

[root@ff386134922b /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 06:44 ?        00:00:00 /bin/sh -c source /etc/profile && sh /data/start.sh
root         12      1  0 06:44 ?        00:00:00 sh /data/start.sh
root         19     12 94 06:44 ?        00:00:12 java -jar -Duser.timezone=UTC /opt/fleet/datasvr.jar --spring.application.name=
root         20     12  0 06:44 ?        00:00:00 tail -f /dev/null
root         58      0  0 06:44 ?        00:00:00 bash
root         70     58  0 06:44 ?        00:00:00 ps -ef

如上admin.jar包的基础镜像构建完毕,其他的jar包镜像均按照上述进行即可

2.nginx的镜像制作

基础服务镜像制作,以nginx为例子,镜像制作先手动实现一遍,随后再把操作过程写入,dockerfile文件中,实现镜像定制,其他基础服务均是如此.手动执行操作过程比较简单略过,直接展示dockerfile文件

nginx dockerfile目录介绍

[root@docker41 nginx]# tree -L 2
.
├── conf
│   ├── default.conf        ##nginx配置文件
│   ├── fea_web.tar.gz      ##站点目录压缩包
│   ├── nginx           ##nginx命令脚本
│   ├── nginx.conf      ##nginx主配置文件
│   └── web.tar.gz      ##站点目录压缩包
├── dockerfile      ##nginx的dockerfile文件
└── packages
    ├── gperftools-libs-2.6.1-1.el7.x86_64.rpm      ##nginx的依赖包
    ├── make-3.82-24.el7.x86_64.rpm         ##nginx的依赖包
    ├── nginx-1.21.1-1.el7.ngx.x86_64.rpm   ##nginx安装包
    ├── nginx-filesystem-1.20.1-9.el7.noarch.rpm    ##nginx依赖包
    ├── openssl-1.0.2k-25.el7_9.x86_64.rpm      ##nginx的依赖包
    ├── openssl11-libs-1.1.1k-3.el7.x86_64.rpm      ##nginx的依赖包
    └── openssl-libs-1.0.2k-25.el7_9.x86_64.rpm     ##nginx1的依赖包

nginx dockerfile文件介绍

  • FROM :基于什么镜像启动
  • ADD:添加dockerfile当前目录的文件到容器内
  • RUN:在容器中运行什么命令
  • ENTRYPOINT:给构建的镜像一个第一命令,且不会被替换,让容器能够夯住.
FROM centos:7.6.1810
ADD packages /opt/packages
RUN rpm -ivh /opt/packages/openssl11-libs-1.1.1k-3.el7.x86_64.rpm
RUN rpm -ivh /opt/packages/gperftools-libs-2.6.1-1.el7.x86_64.rpm
RUN rpm -ivh /opt/packages/nginx-filesystem-1.20.1-9.el7.noarch.rpm
RUN rpm -ivh /opt/packages/openssl-libs-1.0.2k-25.el7_9.x86_64.rpm --force
RUN rpm -ivh /opt/packages/make-3.82-24.el7.x86_64.rpm
RUN rpm -ivh /opt/packages/openssl-1.0.2k-25.el7_9.x86_64.rpm
RUN rpm -ivh /opt/packages/nginx-1.21.1-1.el7.ngx.x86_64.rpm
RUN rm -fr /opt/packages
RUN mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
ADD conf/nginx.conf /etc/nginx/
ADD conf/default.conf /etc/nginx/conf.d/6379.conf
ADD conf/nginx /etc/init.d
RUN mkdir -p /opt/fleet/
ADD conf/web.tar.gz /opt/fleet/web
ADD conf/fea_web.tar.gz /opt/fleet/fea_web
RUN chkconfig  nginx  on
RUN echo -e "/etc/init.d/nginx start" >> /etc/rc.local
RUN mkdir /data
RUN touch start.sh
RUN echo -e "nohup /sbin/nginx &" >> /data/start.sh
RUN echo -e "/bin/bash" >> /data/start.sh
ENTRYPOINT sh /data/start.sh
ENTRYPOINT nginx -g 'daemon off;'

基于dockerfile构建镜像

[root@docker41 nginx]# docker build -t fleet_nginx:v1 .

最后出现以下信息则为构建成功

Step 24/26 : RUN echo -e "/bin/bash" >> /data/start.sh
 ---> Using cache
 ---> a2dda949bd0c
Step 25/26 : ENTRYPOINT sh /data/start.sh
 ---> Using cache
 ---> 3377f603af2d
Step 26/26 : ENTRYPOINT nginx -g 'daemon off;'
 ---> Using cache
 ---> 163372affd65
Successfully built 163372affd65

启动镜像进行测试

  • -p 87:80 : 将容器的80端口映射到宿主机的87端口
root@docker41 nginx]# docker run -d 163372affd65 -p 84:80
a7db1017ca709c070d46287d9764a97b5ef2d6b89fde7c62aadf4db278eb9c5f

进行87端口访问测试,成功访问到网址

root@docker41 nginx]# curl 127.0.0.1:84
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=renderer content=webkit><meta name=force-rendering content=webkit><meta http-equiv=X-UA-Compatible content="IE=Edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>Fleet Edge - v6.9.12.TRUNK</title><script type=text/javascript>window.addEventListener('load', function() {
        if (location.href.split('#')[1].split('/')[1] === 'testPlan') {
          location.replace(location.href.split('#')[0])
        }
      })
      // 加载百度、谷歌地图API的回调函数
      function mapApiLoadCallback() {
        window.mapApiLoadEvent && window.mapApiLoadEvent.$emit('loaded')
      }</script><link rel="shortcut icon" href=./favicon.ico><link href=./static/css/chunk-commons~e73b60ec.a5eb23f7.css rel=stylesheet><link href=./static/css/chunk-elementUI~793f9119.15c3ffe5.css rel=stylesheet><link href=./static/css/app~b58f7129.f0593e1b.css rel=stylesheet><link href=./static/css/app~b482edb6.998874de.css rel=stylesheet><link href=./static/css/app~06837ae4.35467e6c.css rel=stylesheet><link href=./static/css/app~5a11b65b.b4dd6df9.css rel=stylesheet></head><body><div id=app></div><script src=./static/js/manifest.08590dab.js></script><script src=./static/js/chunk-commons~e73b60ec.e8e41685.js></script><script src=./static/js/chunk-elementUI~793f9119.795bf5fd.js></script><script src=./static/js/chunk-elementUI~59f3426a.48c1c54b.js></script><script src=./static/js/chunk-elementUI~6ed3fd28.bebec5a0.js></script><script src=./static/js/app~748942c6.16c14c3a.js></script><script src=./static/js/app~d939e436.06791b02.js></script><script src=./static/js/app~ee6f6234.1448ae40.js></script><script src=./static/js/app~2ee72088.76bfdef8.js></script><script src=./static/js/app~53bd17ed.95e83056.js></script><script src=./static/js/app~b58f7129.540ec491.js></script><script src=./static/js/app~f9ca8911.df0187f7.js></script><script src=./static/js/app~b482edb6.0d3f9526.js></script><script src=./static/js/app~78f83136.89ab72f0.js></script><script src=./static/js/app~678f84af.04636792.js></script><script src=./static/js/app~fdc6512a.21ba728b.js></script><script src=./static/js/app~daa565d3.91812a75.js></script><script src=./static/js/app~06837ae4.b16f3d5f.js></script><script src=./static/js/app~caf8df26.98fbf3c2.js></script><script src=./static/js/app~5a11b65b.70363d7d.js></script></body><script src=./static/js/jsencrypt.min.js></script><script src=./static/customized/conf.js></script><script>if (window.CustomizedConfig && window.CustomizedConfig.favicon) {
      const link = document.head.querySelector('link[href="/favicon.ico"]')
      link.href = window.CustomizedConfig.favicon

其他基础镜像的制作略

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容