DockerFile
1.镜像备份与迁移
备份
- docker save -o 备份镜像的名称 源镜像名称:tag版本
恢复镜像
- docker load -i 镜像文件
2.dockerFile常用指令
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0PiRkaN-1587448131596)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421004104241.png)] python dockerfile 本地依赖 dockerfile env path_私有仓库](https://s2.51cto.com/images/blog/202406/25044445_6679dabd51f8667743.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- CMD 指定容器启动时要运行的命令,假如有多个CMD,最后一个生效
语法格式:
CMD 或
CMD ["","","",…]
CMD ["","",…] - ENTRYPOINT:指定容器启动时要运行的命令
- ONBUILD:当构建一个被继承的Dockerfile时运行的命令。
3.DockerFile构建自定义centos
- mydockerFIle文件
FROM centos
MAINTAINER caofeng<caofeng2012@126.com>
LABEL name="Xiaoyu CentOS Image" \
build-date="20200421"
ENV WORKPATH /home/
WORKDIR $WORKPATH
RUN yum -y install net-tools
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash把文件复制到虚拟机/home目录下。
切换到存放文件的目录执行以下命令
- 构建命令
docker build -f mycentosDockerFile -t xiaoyu/mycentos:1.1 .![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blPap0Ms-1587448131599)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421015717682.png)] python dockerfile 本地依赖 dockerfile env path_私有仓库_02](https://s2.51cto.com/images/blog/202406/25044445_6679dabd9a99640730.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
4.DockerFile构建自定义tomcat
- mytomcatdockerfile文件
FROM centos
MAINTAINER caofeng<caofeng2012@126.com>
LABEL name="Java1234 Tomcat Image" \
build-date="20191115"
COPY copyright.txt /home/copyright.txt
ADD server-jre-8u151-linux-x64.tar.gz /home/
ADD apache-tomcat-8.5.37.tar.gz /home/
ENV WORKPATH /home/apache-tomcat-8.5.37/
WORKDIR $WORKPATH
ENV JAVA_HOME /home/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /home/apache-tomcat-8.5.37/
ENV CATALINA_BASE /home/apache-tomcat-8.5.37/
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD ["/home/apache-tomcat-8.5.37/bin/","run"]- 拷贝相关文件到宿主机上


3. 进入home/dockerFile目录执行命令
docker build -f mytomcatdockerfile -t xiaoyu/mytomcat:1.1 .![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0l6natnd-1587448131606)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421113626411.png)] python dockerfile 本地依赖 dockerfile env path_docker_05](https://s2.51cto.com/images/blog/202406/25044446_6679dabe7027574026.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
可以看到镜像创建成功。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVuUgcyD-1587448131610)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421114242605.png)] python dockerfile 本地依赖 dockerfile env path_docker_06](https://s2.51cto.com/images/blog/202406/25044446_6679dabec92088167.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
在本机也能够访问tomcat
5 .构建容器卷
- myVolumeDockerFile文件
FROM centos
VOLUME ["/home/v1","/home/v2"]
CMD /bin/bash- 拷贝该文件到/home/dockerFile目录
- 执行命令
docker build -f myVolumeDockerFile -t xiaoyu/mytest:1.1 .![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hCCZTLr-1587448131613)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421115655969.png)] python dockerfile 本地依赖 dockerfile env path_docker_07](https://s2.51cto.com/images/blog/202406/25044447_6679dabf1384b49516.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
可以看到镜像构建成功。
运行后,我们进入home目录,找到v1,v2两个容器卷目录;

然后我们通过 docker inspect 容器ID 来查看下默认生成的容器卷对应的宿主机目录

通过新建文件和 修改,我们发现,能实现同步

这种方式不方便,不能自定义挂载的目录。
6.ONBUILD命令
当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发。可以把ONBUID理解为一个触发器。
编写Dockerfile的时候,其他命令都是为了自身镜像服务的,只有ONBUILD是为了子镜像服务;
简单实例:父镜像Dockerfile:
FROM centos
ONBUILD RUN yum -y install vim
CMD /bin/bash子镜像简单点:
FROM parent一句即可;当构建子镜像的时候,父镜像的ONBUILD会触发,子镜像直接安装vim;实际应用,一般是ONBUILD里执行的是一些父镜像暂时无法执行的东西,比如一些COPY,ADD,可以启动一些服务,父镜像当做模板一些,仅仅提供基础支持,然后具体实行是子镜像操作。
7.私有仓库搭建
- 拉取私有仓库镜像 (私有仓库程序本身就是一个镜像)
docker pull registy- 第二步:启动私有仓库容器
docker run -di --name=myRegistry -p 5000:5000 registry- 测试
http://192.168.153.128:5000/v2/_catalog
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asgwviSi-1587448131622)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421130621149.png)] python dockerfile 本地依赖 dockerfile env path_docker_11](https://s2.51cto.com/images/blog/202406/25044448_6679dac0171fb91070.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
看到这个说明启动成功。
- etc/docker 修改daemon.json,让docker信任私有仓库地址
“insecure-registries”: [“192.168.153.128:5000”]
- 重启docker
systemctl restart docker8.私有仓库测试
第一步:标记此镜像为私有仓库的镜像
docker tag tomcat:7 192.168.153.128:5000/mytomcat7第二步:上传镜像到私有仓库(先启动启动容器)
docker push 192.168.153.128:5000/mytomcat7![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJLRDVJK-1587448131625)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421132249138.png)] python dockerfile 本地依赖 dockerfile env path_私有仓库_12](https://s2.51cto.com/images/blog/202406/25044448_6679dac06db8548730.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
可以看到有值了。
第三步:删除192.168.1.112:5000/mytomcat7本地仓库镜像
docker rmi -f 192.168.153.128:5000/mytomcat7第四步:从私有仓库拉取192.168.153.128:5000/mytomcat7镜像,并运行;
docker run -it -p 8080:8080 192.168.153.128:5000/mytomcat7访问地址
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vhrfVVwe-1587448131627)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200421132953805.png)] python dockerfile 本地依赖 dockerfile env path_tomcat_13](https://s2.51cto.com/images/blog/202406/25044448_6679dac0b3afa56755.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
看到这个说明ok
















