Dockerfile
2020-07-25 本文已影响0人
Summer2077
Dockerfile
dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
- 编写一个dockerfile文件
- docker build 构建为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub,阿里云镜像)
DockerFile构建过程
基础知识:
-
每个保留关键字都要大写。
-
执行是从上而下的。
-
# 表示注释。
-
每个指令都会创建一个新的镜像。
Dockerfile的指令
image-20200725190032433.pngFROM #基础镜像,一切从这里构建
MAINTAINER #镜像是谁写的 ,姓名+邮箱
RUN #镜像构建的时候需要的运行命令
ADD #添加额外的镜像
WORKDIR #工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口 和 -p的效果一样
CMD #指定容器需要启动的时候运行的命令,只会最后一个生效,可被替代
ENTRYPOINT #指定容器需要启动的时候运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令。
COPY # 类似于ADD ,将我们文件拷贝到镜像中。
ENV #构建的时候设置环境变量
实战构建自己的centos
我们发现docker镜像中的centos很多功能被删减过。
所以我们自己构建一个自定义的centos镜像,添加vim和net-tools
#1. 编写dockerfile
[root@master-node dockerfile]# cat docker dockerfile
FROM centos
MAINTAINER summer<1260670909@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
# 2.通过dockerfile来构建自己的镜像
[root@master-node dockerfile]# docker build -f dockerfile -t mycentos:1.0 .
# 3.测试运行
扩展:
通过history来查看镜像组成过程
[root@master-node dockerfile]# docker history tomcat
IMAGE CREATED CREATED BY SIZE COMMENT
b4f6a90c69a4 2 days ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B
<missing> 2 days ago /bin/sh -c #(nop) EXPOSE 8080 0B
<missing> 2 days ago /bin/sh -c set -e && nativeLines="$(catalin… 0B
<missing> 2 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 20MB
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_SHA512=077c3e6… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=9.0.37 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=9 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV GPG_KEYS=05AB33110949… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_NATIVE_LIBDIR=… 0B
<missing> 2 days ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B
<missing> 2 days ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomca… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B
<missing> 2 days ago /bin/sh -c #(nop) CMD ["jshell"] 0B
<missing> 2 days ago /bin/sh -c set -eux; dpkgArch="$(dpkg --pr… 323MB
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_URL_VERSION=11.0… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_BASE_URL=https:/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_VERSION=11.0.8 0B
<missing> 2 days ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 days ago /bin/sh -c set -eux; apt-get update; apt-g… 11.1MB
<missing> 3 days ago /bin/sh -c apt-get update && apt-get install… 146MB
<missing> 3 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 17.5MB
<missing> 3 days ago /bin/sh -c apt-get update && apt-get install… 16.5MB
<missing> 3 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 days ago /bin/sh -c #(nop) ADD file:89dfd7d3ed77fd5e0… 114MB
CMD 和 ENTRYPOINT 的区别
CMD #指定容器需要启动的时候运行的命令,只会最后一个生效,可被替代
ENTRYPOINT #指定容器需要启动的时候运行的命令,可以追加命令