![2f1610fa74cc8bae343f843fbe5ba02d.png](https://i-blog.csdnimg.cn/blog_migrate/1d0d93d63e3d3700f73b5913ad923545.jpeg)
摘要:docker官方和个人发布的镜像由于版本等各种原因,漏洞比较多;已统计Docker Hub上超过30%的官方镜像包含高危漏洞。另外,下载镜像由于网络等原因也会导致下载速度很慢,所以我们可以手动制作docker镜像。
构建镜像的方式有两种:
(1)使用docker commit命令
(2)使用docker build和Dockerfile文件
制作步骤:
1.使用docker commit
docker commit:意思是提交一个正在运行的容器为一个新的镜像。
# 本例:制作一个tomcat镜像
1.拉取一个基础镜像
docker pull centos
2、创建一个交互式容器
docker run -it --name mycentos centos:latest
3、软件上传:将宿主Tomcat,jdk上传到容器
docker cp apache-tomcat-7.0.47.tar.gz mycentos:/root/
docker cp jdk-8u161-linux-x64.tar.gz mycentos:/root/
4、在容器里安装jdk(yum install java-1.7.0-openjdk)
tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/
编辑/etc/profile文件
JAVA_HOME=/usr/local/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
5、在容器中安装tomcat
tar -zxvf apache-tomcat-7.0.47.tar.gz -C /usr/local/
编辑tomcat/bin/setclasspath.sh文件
export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=/usr/local/jdk1.8.0_161/jre
6、将正在运行的容器提交为一个新的镜像
docker commit mycentos mycentos
端口映射
docker run -itd --name=t1 -p 8888:8080 mycentos /bin/bash
docker exec t1 /usr/local/apache-tomcat-7.0.47/bin/startup.sh
容器/镜像打包
镜像打包
1、镜像打包
docker save -o /root/tomcat7.tar mytomcat
2、将打包的镜像上传到其他服务器
scp tomcat7.tar 其他服务器IP:/root
3、导入镜像
docker load -i /root/tomcat7.tar
容器打包
1、容器打包
docker export -o /root/t1.tar t1
2、导入容器
docker import t1.tar mycentos:latest
2.Dockerfile制作镜像
Dockerfile是使用DSL语法来构建docker镜像的,之后使用docker builder命令来基于该Dockerfile中的指令构建一个新的镜像,一般maven聚合项目中,使用docker镜像容器化部署项目时使用,在项目根目录新建一个Dockerfile文件,用于把项目制作成镜像,部署到k8s集群上。
DSL结构:
![7d5d688e1a12950a93c38003c5520321.png](https://i-blog.csdnimg.cn/blog_migrate/f3d2539524517e322a3be912ac1512e5.jpeg)
实例:
通过Dockerfile构建镜像步骤
1、创建一个目录
2、在目录下创建Dockerfile文件及其它文件
3、通过docker builder构建镜像
4、通过构建的镜像启动容器
例子:
1、创建一个目录 : /usr/local/rw_test
2、编辑Dockerfile文件,vim Dockerfile
3、编辑以下内容:
FROM docker.io/centos
MAINTAINER xiaomin xiaomin@163.com
RUN yum install -y pcre pcre-devel openssl-devel gcc gcc+ wget vim net-tools
RUN useradd www -M -s /sbin/nologin
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
4、在rw_test目录下构建镜像
docker build -t rw_nginx --rm=true .
Dockerfile里不仅仅可以写上述命令,还可以集成jenkins配置变量,elk日志收集都可以写在这里。
具体语法的使用可参考官网:Dockerfile reference