日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker学习(八)深入浅出理解 dockerFille

發布時間:2024/3/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 :繼承的基礎鏡像 ,基于哪個鏡像 FROM eclipse-temurin:17-jdk-jammy//運行時環境 :用于配置環境變量 ENV key value (鍵值對),在后面的任何run指令都可以使用 。 //相當于java 中 String CATALINA_HOME /usr/local/tomcat ; // $CATALINA_HOME (引用CATALINA_HOME)= /usr/local/tomcat ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH//run 容器構建(build)時需要執行的命令 ,有兩種格式 1.shell 在命令行執行shell等于在終端執行shell // 2.exec: // ["可執行文件,參數1,參數2"]->["./test.php","dec ","offline"] // :RUN ./test.php dec offline //此處相當于 在tomcat的容器內執行mkdir -p "$CATALINA_HOME" RUN mkdir -p "$CATALINA_HOME"//- WORKDIR: 容器內的落腳點 ,WORKDIR指定一個目錄后 , 你在容器內pwd 一下 就是那個目錄 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/*.bat; \rm tomcat.tar.gz*; \command -v gpgconf && gpgconf --kill all || :; \rm -rf "$GNUPGHOME"; \\ # https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html#Default_web_applicationsmv webapps webapps.dist; \mkdir webapps; \ # we don't delete them completely because they're frankly a pain to get back for users who do want them, and they're generally tiny (~7MB)\nativeBuildDir="$(mktemp -d)"; \tar -xf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1; \apt-get install -y --no-install-recommends \dpkg-dev \gcc \libapr1-dev \libssl-dev \make \; \( \export CATALINA_HOME="$PWD"; \cd "$nativeBuildDir/native"; \gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \aprConfig="$(command -v apr-1-config)"; \./configure \--build="$gnuArch" \--libdir="$TOMCAT_NATIVE_LIBDIR" \--prefix="$CATALINA_HOME" \--with-apr="$aprConfig" \--with-java-home="$JAVA_HOME" \; \nproc="$(nproc)"; \make -j "$nproc"; \make install; \); \rm -rf "$nativeBuildDir"; \rm bin/tomcat-native.tar.gz; \\ # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependenciesapt-mark auto '.*' > /dev/null; \[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \find "$TOMCAT_NATIVE_LIBDIR" -type f -executable -exec ldd '{}' ';' \| awk '/=>/ { print $(NF-1) }' \| xargs -rt readlink -e \| sort -u \| xargs -rt dpkg-query --search \| cut -d: -f1 \| sort -u \| tee "$TOMCAT_NATIVE_LIBDIR/.dependencies.txt" \| xargs -r apt-mark manual \; \\apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \rm -rf /var/lib/apt/lists/*; \\ # sh removes env vars it doesn't support (ones with periods) # https://github.com/docker-library/tomcat/issues/77find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +; \\ # fix permissions (especially for running as non-root) # https://github.com/docker-library/tomcat/issues/35chmod -R +rX .; \chmod 777 logs temp work; \\ # smoke testcatalina.sh version# verify Tomcat Native is working properly RUN set -eux; \nativeLines="$(catalina.sh configtest 2>&1)"; \nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')"; \nativeLines="$(echo "$nativeLines" | sort -u)"; \if ! echo "$nativeLines" | grep -E 'INFO: Loaded( APR based)? Apache Tomcat Native library' >&2; then \echo >&2 "$nativeLines"; \exit 1; \fi//對外暴露的端口 EXPOSE 8080//當你執行 docker run -it --rm tomcat:9.0 ,后面會自動追加 CMD ["catalina.sh", "run"] //最終: docker run -it --rm tomcat:9.0 CMD ["catalina.sh", "run"] CMD ["catalina.sh", "run"]

    ------------------------------- 案例 --------------------------------------------------------

    編寫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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。