生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。