DockerFile
1.镜像备份与迁移
备份
- docker save -o 备份镜像的名称 源镜像名称:tag版本
恢复镜像
- docker load -i 镜像文件
2.dockerFile常用指令
- 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 .
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/catalina.sh","run"]
- 拷贝相关文件到宿主机上
3. 进入home/dockerFile目录执行命令
docker build -f mytomcatdockerfile -t xiaoyu/mytomcat:1.1 .
可以看到镜像创建成功。
在本机也能够访问tomcat
5 .构建容器卷
- myVolumeDockerFile文件
FROM centos
VOLUME ["/home/v1","/home/v2"]
CMD /bin/bash
- 拷贝该文件到/home/dockerFile目录
- 执行命令
docker build -f myVolumeDockerFile -t xiaoyu/mytest:1.1 .
可以看到镜像构建成功。
运行后,我们进入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
看到这个说明启动成功。
- etc/docker 修改daemon.json,让docker信任私有仓库地址
“insecure-registries”: [“192.168.153.128:5000”]
- 重启docker
systemctl restart docker
8.私有仓库测试
第一步:标记此镜像为私有仓库的镜像
docker tag tomcat:7 192.168.153.128:5000/mytomcat7
第二步:上传镜像到私有仓库(先启动启动容器)
docker push 192.168.153.128:5000/mytomcat7
可以看到有值了。
第三步:删除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
访问地址
看到这个说明ok