亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在已經使用另一個映像的 docker 容器中設置和運行一個非常簡單的

如何在已經使用另一個映像的 docker 容器中設置和運行一個非常簡單的

波斯汪 2022-09-28 16:40:59
我的任務是創建一個非常簡單的,Web瀏覽器可訪問的gui,可以在docker容器中運行特定的java文件。為此,我選擇設置一個php-apache服務器,該服務器提供索引.php帶有gui的文檔。泊塢文件如下所示:FROM php:7.0-apacheCOPY src /var/www/htmlEXPOSE 80這得到了gui(索引.php在src文件夾中)我已經寫好了,運行沒有問題,但它無法訪問和運行所需的java文件(顯然,因為這會創建一個單獨的容器)。問題:如何在現有的 Docker 文件(下面提供)中設置一個 php-apache 服務器,執行與上述 Docker 文件相同的操作?我的目標是使用php腳本運行java文件并向用戶顯示結果。FROM openjdk:8-jre-slimWORKDIR /usr/src/appCOPY ["./build/libs/*.jar", "./fooBar.jar"]ENV JAVA_OPTS=${FOO_JAVA_OPTS}CMD ["/usr/bin/tail", "-f", "/dev/null"]我沒有自己編寫java文件,只是負責使用它來運行特定的命令。
查看完整描述

2 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

似乎沒有像我最初希望的那樣合并圖像的簡單方法(您的 Dockerfile 中不能有多個 FROM 語句)。我最終要做的是手動將兩個圖像(openjdkphp)合并成這樣的東西:

FROM php:7.0-apache


ENV LANG C.UTF-8

RUN { \

        echo '#!/bin/sh'; \

        echo 'set -e'; \

        echo; \

        echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \

    } > /usr/local/bin/docker-java-home \

    && chmod +x /usr/local/bin/docker-java-home

RUN ln -svT "/usr/lib/jvm/java-8-openjdk-$(dpkg --print-architecture)" /docker-java-home

ENV JAVA_HOME /docker-java-home/jre

ENV JAVA_VERSION 8u212

ENV JAVA_DEBIAN_VERSION 8u212-b01-1~deb9u1

RUN set -ex; \

    if [ ! -d /usr/share/man/man1 ]; then \

        mkdir -p /usr/share/man/man1; \

    fi; \

    apt-get update; \

    apt-get install -y --no-install-recommends openjdk-8-jre-headless="$JAVA_DEBIAN_VERSION"; \

    rm -rf /var/lib/apt/lists/*; \

    [ "$(readlink -f "$JAVA_HOME")" = "$(docker-java-home)" ]; \

    update-alternatives --get-selections | awk -v home="$(readlink -f "$JAVA_HOME")" 'index($3, home) == 1 { $2 = "manual"; print | "update-alternatives --set-selections" }'; \

    update-alternatives --query java | grep -q 'Status: manual'


COPY ["./build/libs/*.jar", "./FooBar.jar"]

ENV JAVA_OPTS=${FOO_JAVA_OPTS}


COPY gui/src /var/www/html

EXPOSE 80

兩者都是基于 Debian 的圖像,所以合并相對容易(我還從原始圖像源中刪除了許多雜亂的評論),并且由于 openjdk 圖像更簡單,我將其添加到 php 圖像的頂部,而不是相反。


查看完整回答
反對 回復 2022-09-28
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

因為它是基于 Debian 的圖像。一種方法是,在容器中安裝軟件包并從中創建新映像。


root@310c94d8d75f:/usr/src/app# cat /etc/os-release

PRETTY_NAME="Debian GNU/Linux 9 (stretch)"

NAME="Debian GNU/Linux"

VERSION_ID="9"

VERSION="9 (stretch)"


2: root@310c94d8d75f:/usr/src/app# apt update


3- root@310c94d8d75f:/usr/src/app# apt install apache2

4- root@310c94d8d75f:/usr/src/app# apt install php

最后運行:泊塢窗提交


在此之后,您將獲得具有上述名稱的新圖像。


樓盤: https://docs.docker.com/engine/reference/commandline/commit/


2:您可以在 Dockerfile 中添加相同的命令并重建。


FROM openjdk:8-jre-slim


WORKDIR /usr/src/app

COPY ["./build/libs/*.jar", "./fooBar.jar"]

ENV JAVA_OPTS=${FOO_JAVA_OPTS}

CMD ["/usr/bin/tail", "-f", "/dev/null"]

RUN apt update && apt install apache2 -y && apt install php -y


查看完整回答
反對 回復 2022-09-28
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號