dockerfile定制镜像的使用

  就是写个docker的脚本然后依次运行,有点类似于gitlab中持续化集成的一系列步骤的自动部署和程序的顺序执行。

以tomcat为例 ,通常我们在

usr/local/
目录下

创建文件夹tomcat mkdir tomcat

然后需要创建一个大小写敏感的Dockerfile文件 可以vi 可以vim可以touch Dockerfile

然后编辑Dockerfile文件

第一行:from 镜像名 指定一个基础镜像 类似于Java类中的指定父类 这里from tomcat 

接下来就能进行其他的一些操作 比如新建文件,执行其他命令,甚至你能够进入某个目录下执行一些命令

COPY 和run或者其他如volume指定数据卷 

数据卷:容器内和容器寄生者两者共享文件夹 比如指定的一些数据文件如data logs之类的,因为如果启动容器时有指定 -rm的话关闭容器意味着删除该容器(那就当然包括了其中的文件)所以通常不建议在容器中存储数据。但可以存储在volume中

指定volume:

VOLUME 宿主机目录  容器目录

CMD 容器启动执行命令 和ENTRYPOINT作用用法一样:通常都是执行某个.sh文件 如tomcat的shutdown.sh 或zookeeper的zkServer.sh之类的

二者区别:

  首先二者都是作为容器启动时执行的命令:但是CMD命令会被docker run中的参数覆盖 而ENTRYPOINT不会

也就是只要你在ENTRYPOINT中指定的内容,它总是会被执行,而cmd中则不会。所以在cmd中设置建议内容 ENTRYPOINT中设置强制内容。

我觉得在docker compose中更好。。。

copy就是复制

EXPOSE 8080 暴露端口 可以暴露多个要写多个EXPOSE 不能直接跟要不然你自己都不清楚

run:就普通的执行shell命令 执行shell脚本 

这里还有必要提一下 一些Run命令如果需要在指定的目录下进行的话不要cd后执行run,在run之前使用workdir指定下工作目录,否则run的命令可能会很奇怪,而者一点都不奇怪。。。

ENTRYPOINT

其他的就正常根据需求即可。

WORKDIR 指定接下来的命令指定的工作区(直到下一个WORKDIR改变或者cd改变目录)

可参照

FROM tomcat8

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
ENV OPENSSL_VERSION 1.1.0f-3+deb9u2
RUN.。。。。。。。一些乱七八糟的操作

编辑好Dockerfile后保存 esc :wq

准备构建镜像:

docker build 后接参数 . 当在存在Dockerfile的目录下执行时可以不指定Dockerfile的目录 其他的话指定Dockerfile使用(默认使用Dockerfile作为其docker的Dockerfile) docker build -f 接目录文件名。指定构建的镜像的名称: -t 后接镜像名

执行上条语句 当镜像不存在时 docker从网上拉取,并依次执行你设置的一系列内容。 '.'上面这个点代表着context 指定当前目录有Dockerfile  如果没有Dockerfile的话请在 -f后面指定

查看镜像是否构建成功:docker images 只要不是虚悬的有是成功了

然后启动镜像 :

docker run --name 接镜像名称  接其他参数
原文地址:https://www.cnblogs.com/notably/p/10888990.html