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 接镜像名称 接其他参数