生活随笔
收集整理的这篇文章主要介绍了
docker学习(八)深入浅出理解 dockerFille
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
dockerFile是什么
一条条指令参数构成的文件
是构建镜像的新方法
dockerFile(原材料):面向开发 -》 docker(交付品)镜像为交付标准-》 docker容器(运行态)设计部署和运维 三者不可或缺
如何使用dockerFile
编写dockerFile文件docker build命令构建镜像docker run 镜像实例
保留字
- ADD (copy+解压unzip~):将宿主机目录下的文件拷贝进镜像,而且自己会处理URL和tar压缩包
- COPY :拷贝文件和目录到镜像中 源文件-》目标地址
- CMD:指定容器启动后执行的命令 ,只有最后一个CMD能生效 ,而且CMD 的命令还会被dockerFile替换
- CMD:docker run时运行
- RUN :docker build 时运行
- ENTRYPOINT : 不会被docker run后面的命令覆盖 这些参数送给ENTRYPOINT 指令指定的程序 可以和CMD 一起使用
- 一般是变参 才会使用CMD ,这里的CMD 等于给 ENTREYPOINT传递参数
- 指定了ENTRYPOINT 后 ,CMD的含义发生了变化 ,不再是直接运行其命令,
- 而是将cmd 的内容作为参数传递给ENTRYPOINT 。
- 他两个组合会编程<ENTRYPOINT > <CMD>
------------------------------- 案例 --------------------------------------------------------
#
# NOTE
: THIS DOCKERFILE IS GENERATED VIA
"apply-templates.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY
.
#
FROM eclipse
-temurin
:17-jdk
-jammy
ENV CATALINA_HOME
/usr
/local
/tomcat
ENV PATH $CATALINA_HOME
/bin
:$PATH
RUN mkdir
-p
"$CATALINA_HOME"
WORKDIR $CATALINA_HOME# let
"Tomcat Native" live somewhere isolatedENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME
/native
-jni
-lib
ENV LD_LIBRARY_PATH $
{LD_LIBRARY_PATH
:+$LD_LIBRARY_PATH
:}$TOMCAT_NATIVE_LIBDIR# see https
://www
.apache
.org
/dist
/tomcat
/tomcat
-10/KEYS
# see also
"versions.sh" (https
://github
.com
/docker
-library
/tomcat
/blob
/master
/versions
.sh
)
ENV GPG_KEYS A9C5DF4D22E99998D9875A5110C01C5A2F6059E7ENV TOMCAT_MAJOR
10
ENV TOMCAT_VERSION
10.1.0-M17
ENV TOMCAT_SHA512 e56506984201f07c161eaa6757d5e35e834319a071bf8dadef58500d9983194f29c59ba4e42fe8d09c4629525aa11f81ce9b24bfeb31c675f6a0bf505d9b8c7dRUN set
-eux
; \\savedAptMark
="$(apt-mark showmanual)"; \apt
-get update
; \apt
-get install
-y
--no
-install
-recommends \ca
-certificates \curl \dirmngr \gnupg \
; \\
ddist() { \local f
="$1"; shift
; \local distFile
="$1"; shift
; \local mvnFile
="${1:-}"; \local success
=; \local distUrl
=; \
for distUrl in \
# https
://issues
.apache
.org
/jira
/browse
/INFRA
-8753?focusedCommentId
=14735394#comment
-14735394"https://www.apache.org/dyn/closer.cgi?action=download&filename=$distFile" \
#
if the version is outdated
(or we're grabbing the
.asc file
), we might have to pull from the dist
/archive
:/"https://downloads.apache.org/$distFile" \
"https://www-us.apache.org/dist/$distFile" \
"https://www.apache.org/dist/$distFile" \
"https://archive.apache.org/dist/$distFile" \
#
if all
else fails
, let's try Maven
(https
://www
.mail
-archive
.com
/users@tomcat
.apache
.org
/msg134940
.html
; https
://mvnrepository
.com
/artifact
/org
.apache
.tomcat
/tomcat
; https
://repo1
.maven
.org
/maven2
/org
/apache
/tomcat
/tomcat
/)$
{mvnFile
:+"https://repo1.maven.org/maven2/org/apache/tomcat/tomcat/$mvnFile"} \
; do \
if curl
-fL
-o
"$f" "$distUrl" && [ -s
"$f" ]; then \success
=1; \
break; \fi
; \done
; \
[ -n
"$success" ]; \
}; \\ddist 'tomcat
.tar
.gz'
"tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz" "$TOMCAT_VERSION/tomcat-$TOMCAT_VERSION.tar.gz"; \echo
"$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum
--strict
--check
-; \ddist 'tomcat
.tar
.gz
.asc'
"tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc" "$TOMCAT_VERSION/tomcat-$TOMCAT_VERSION.tar.gz.asc"; \export GNUPGHOME
="$(mktemp -d)"; \
for key in $GPG_KEYS
; do \gpg
--batch
--keyserver keyserver
.ubuntu
.com
--recv
-keys
"$key"; \done
; \gpg
--batch
--verify tomcat
.tar
.gz
.asc tomcat
.tar
.gz
; \tar
-xf tomcat
.tar
.gz
--strip
-components
=1; \rm bin
------------------------------- 案例 --------------------------------------------------------
编写DockerFile文件
# 这个镜像基于上面
FROM centos
#作者是谁
MAINTAINER
*******#设置一个变量
ENV MYPATH
/usr
/local#设置容器启动后的落脚点:
WORKDIR $MYPATH# 防止 Failed to download metadata
for repo
'appstream'报错 更换镜像源
RUN cd
/etc
/yum
.repos
.d
/
RUN sed
-i 's
|#baseurl
=http
://mirror
.centos
.org
|baseurl
=http
://vault
.centos
.org
|g'
/etc
/yum
.repos
.d
/CentOS
-*
#在容器内安装这些东西 相当于你在linux执行 yum
-y install vim
....
RUN yum
-y install vim
RUN yum
-y install net
-tools
RUN yum
-y install glibc
.i686
RUN mkdir
/usr
/local
/java # 这里 在dockerFeil的一个文件同一级目录放了个dk
-8u171
-linux
-x64
.tar
.gz
#此处的命令是
1.解压 jdk
-8u171
-linux
-x64
.tar
.gz
2.将解压后的文件放在容器
/usr
/local
/java
/ 下
ADD jdk
-8u171
-linux
-x64
.tar
.gz
/usr
/local
/java
/
#配置jdk的环境变量 咯
...
ENV JAVA_HOME
/usr
/local
/java
/jdk1
.8.0_171
ENV JRE_HOME $JAVA_HOME
/jre
ENV CLASSPATH $JAVA_HOME
/lib
/dt
.jar
:$JAVA_HOME
/lib
/tools
.jar
:$JRE_HOME
/lib
:$CLASSPATH
ENV PATH $JAVA_HOME
/bin
:$PATH#对外暴露端口
EXPOSE
80CMD echo $MYPATH
CMD echo
"success ----- ok "
CMD
/bin
/bash
输出结果: (出现这个 表现完美运行)Successfully built 184f4fa586c7Successfully tagged centosjava8
:1.1
dockerFile 上传微服务
写java代码打成jar包上传和dockerFile同一个文件夹编写dockerFile
FROM java
:8
MAINTAINER rabbitcunk#相当于在容器内生成一个文件夹 ,这个文件夹在主机上有对应的目录(一般后边有一串乱码 保证一个容器一个
/tmp 唯一性) ,你用docker inspect找到然后
#就可以同步进行更改
VOLUME
/tmp#解压 并且重命名jar文件
ADD mic
-io
-0.0.1-SNAPSHOT
.jar a
.jar#相当于在linux 执行 java
-jar a
.jar
ENTRYPOINT
["java","-jar","a.jar"]
EXPOSE
8080
构建镜像
运行
总结
以上是生活随笔为你收集整理的docker学习(八)深入浅出理解 dockerFille的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。