DockerFile的ONBUILD指令
简介父镜像在被子镜像继承后父镜像的ONBUILD被触发,可以把ONBUID理解为一个触发器。编写Dockerfile的时候,其他命令都是为了自身镜像服务的,只有ONBUILD是为了子镜像服务
使用构建父镜像编写父镜像DockerFile,命名为:parent_df,内容如下:
12345FROM centosONBUILD RUN yum -y install vimCMD /bin/bash
构建父镜像
1docker build -f parent_df -t parent .
构建子镜像编写子镜像DockerFile,命名为:son_df,内容如下:
1FROM parent
构建子镜像
1 docker build -f son_df -t son .
结果当构建子镜像的时候,父镜像的ONBUILD会触发,子镜像直接安装vim,父镜像是没有安装vim的。所以使用父镜像创建的容器使用vim命令会报错,而用子镜像创建的容器可以使用vim命令
DockerFile的CMD, ENTRYPOINT指令
简介CMD,ENTRYPOINT都是容器启动的时候,执行执行命令,都支持exec和shell方式
一般用法有两种:①单独一个CMD②先使用ENTRYPOINT(用于执行命令),然后结合CMD使用(用于追加参数)
有多个CMD时,只有最后一个CMD生效
语法一般开发和Docker官方都建议用 exec格式
CMD第一种用法:运行一个可执行的文件并提供参数
1CMD ["executable","param1","param2"]
第二种用法:为ENTRYPOINT指定参数
1CMD ["param1","param2"]
第三种用法(shell格式):是以”/bin/sh -c”的方法执行的命令
1CMD command param1 param2
ENTRYPOINT exec 格式, 推荐
1ENTRYPOINT [“executable”, “param1”, “param2”]
shell 格式
1ENTRYPOINT command param1 param2
使用 ...
DockerFile通过VOLUME指令创建容器卷来实现容器的目录挂载
介绍DockerFile创建镜像时通过VOLUME指令创建几个容器卷,然后创建这个镜像的容器时,这个容器就有了这几个容器卷目录,并与宿主机自动创建的对应目录实现了挂载
实现过程语法1VOLUME['目录1','目录2']
编写DockerFile新建一个文件,命名为:myVolumeDockerFile,没有后缀名,内容如下:
12345FROM centosVOLUME ["/home/v1","/home/v2"]CMD /bin/bash
构建镜像1docker build -f myVolumeDockerFile -t a6678696/mycentos:1.2 .
创建容器1docker run -it 9123279cfb4f
找到挂载的目录①找到容器挂载的容器卷v1,v2
②找到宿主机挂载的容器卷
通过inspect命令获取容器的元数据
1docker inspect 容器id
找到Mounts节点,Source为宿主机的目录,Destination为容器的目录,两个目录是挂载 ...
DockerFile创建镜像时报错:file not found in build context or excluded by
问题描述DockerFile创建镜像时使用COPY和ADD指令时,检测到源文件不存在就会报错
解决办法DockerFile文件和源文件放在同一目录下,并且先进入这个目录再执行创建镜像命令
例如我的DockerFile文件和源文件都在/home/dockerfile目录中(如下图所示),那么我就要进入/home/dockerfile目录,然后执行DockerFile创建镜像的命令
DockerFile构建自定义Tomcat
编写DockerFile新建一个文件,命名为:mytomcatdockerfile,没有后缀名,内容如下:
12345678910111213141516171819202122FROM centosMAINTAINER LeDao<f1203007469@gmail.com> LABEL name="LeDao Tomcat Image" \ build-date="2021-08-22 00:16:53" COPY copyright.txt /home/copyright.txtADD 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_151ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/li ...
DockerFile构建自定义CentOS
编写DockerFile新建一个文件,命名为:mycentosDockerFile,没有后缀名,内容如下:
1234567891011121314FROM centosMAINTAINER ledao<f1203007469@gmail.com>LABEL name="LeDao CentOS Image" \ build-date="2021-08-21"ENV WORKPATH /home/WORKDIR $WORKPATHRUN yum -y install net-toolsRUN yum -y install vimEXPOSE 80CMD /bin/bash
创建镜像命令的最后面有个英文句号.(少了句号不行)
1docker build -f /home/dockerfile/mycentosDockerFile -t a6678696/mycentos:1.1 .
查看镜像构建历史1docker history 镜像id
DockerFile常用指令
DockerFile简介dockerfile用于快速有序且直观地完成对镜像的定制
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
指令FROMFROM指令是整个Dockerfile的入口,必须是第一条指令。其代表新制作镜像的基础镜像。基础镜像可以自己制作,也可以从开源的仓库pull,例如dockerhub或是国内阿里云的免费仓库。
Docker中存在一种特殊的情况,就是不以任何基础镜像为基准,此时可以第一句话使用:
1FROM scratch
来表示以空白镜像为基础,也就是直接将可执行文件复制进镜像。例如swarm、coreos/etcd等。
RUN指令是dockerfile中最常用的指令之一。用来执行命令行上的命令。RUN的格式分为两种:
第一种:shell格式:RUN<命令>,类似于直接在终端输入命令。例如:
1RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/tom ...
Docker备份和恢复镜像
备份镜像1docker save -o 备份镜像的名称 源镜像名称:tag版本
恢复镜像1docker load -i 镜像文件
Docker安装和配置MySQL容器
创建MySQL容器创建的这个容器只是用来获取文件路径
1docker run --name 自定义名称 -di -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 MySQL镜像id
获取文件路径进入容器的文件夹中
1docker exec -it 容器id /bin/bash
获取conf.d、log、mysql的文件路径,分别如下:
123/etc/mysql/conf.d/var/log/var/lib/mysql
复制文件到宿主机在宿主机的 home 目录下新建 mysql 目录
1mkdir /home/mysql
复制容器里的 /etc/mysql/conf.d、/var/log、/var/lib/mysql到宿主机/home/mysql
复制/etc/mysql/conf.d
1docker cp 容器id:/etc/mysql/conf.d /home/mysql/
复制/var/log
1docker cp 容器id:/var/log /home/mysql/
复制/var/lib/mysql
1docker cp 容器i ...
Docker安装和配置Tomcat容器并部署Java项目
创建Tomcat容器创建的这个容器只是用来获取文件路径
1docker run --name 自定义名称 -di -p 8080:8080 Tomcat镜像id
获取文件路径进入容器的文件夹中
1docker exec -it Tomcat容器id /bin/bash
获取三个文件夹conf、webapps、logs的文件路径
复制文件到宿主机在宿主机的 home 目录下新建 tomcat 目录
1mkdir /home/tomcat
复制容器里的 /usr/local/tomcat/conf、/usr/local/tomcat/webapps 到宿主机/home/tomcat/
复制 /usr/local/tomcat/conf
1docker cp 容器id:/usr/local/tomcat/conf /home/tomcat/
复制 /usr/local/tomcat/webapps
1docker cp 容器id:/usr/local/tomcat/webapps /home/tomcat/
创建新的Tomcat容器这个容器是用来部署Java项目的,创建时挂载 / ...