docker學習筆記-啟動映象輸入引數

紅燒鯉魚發表於2018-08-13

背景介紹

平時我們的python,springboot工程啟動時加入一些引數,可以修改某些配置,增加部署的靈活性。

比如啟動一個springboot工程jar包的命令

java -jar server.jar --spring.profiles.active=test 
複製程式碼

表示springboot啟動的配置檔案時test環境配置檔案

那如果我們把這些服務都打包到了docker映象中,如何在docker run命令中增加一些輸入引數。 docker 中生成docker映象的兩種方式是docker commit 與dockerfile ,這裡主要分享通過dockerfile構建的映象,如何再執行時輸入引數。

通過docker commit方式構建的映象,暫時不清楚如何輸入引數,待後續補充

Dockerfile檔案的構成

首先說一下Dockerfile檔案的結構

# 第一句表明基礎映象
FROM python:2.7-slim

# 設定工作目錄
WORKDIR /app

# 複製指定的src到容器中,也可以使用COPY
ADD . /app

# run指令在基礎映象中執行,只在打包的時候執行一次
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 暴露埠
EXPOSE 80

# 定義環境變數,會被後續的RUN命令使用,並且在容器執行期間保持
ENV NAME World

# 制定啟動容器時執行的命令,如果指定多條CMD,只有最後一條會執行,如果指定了ENTRYPOINT,會覆蓋CMD
CMD ["python", "app.py"]
# ENTRYPOINT會覆蓋上行
ENTRYPOINT ["sh","-c","java -jar server.jar --spring.profiles.active=test "]
複製程式碼

那一般的啟動映象的命令為

docker run -d -p 8080:80 --name xxxx static_web
-d表示後臺執行
-p指定埠對映
--name指定映象名稱
複製程式碼

查詢run方法的說明,我們可以看到很多其他的輸入引數

語法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
複製程式碼

其中OPTIONS

-a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;

-d: 後臺執行容器,並返回容器ID;

-i: 以互動模式執行容器,通常與 -t 同時使用;

-p: 埠對映,格式為:主機(宿主)埠:容器埠

-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;

--name="nginx-lb": 為容器指定一個名稱;

--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;

--dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 設定環境變數;

--env-file=[]: 從指定檔案讀入環境變數;

--cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定CPU執行;

-m :設定容器使用記憶體最大值;

--net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種型別;

--link=[]: 新增連結到另一個容器;

--expose=[]: 開放一個埠或一組埠;
複製程式碼

可以看到docker run 命令允許輸入環境變數,我們通過環境變數,再dockefile中就可以獲取到相應的變數值。

-e username="ritchie": 設定環境變數;

--env-file=[]: 從指定檔案讀入環境變數;
複製程式碼

通過 docker run -e 輸入多個自定義變數

修改上面的dockerfile的最後幾句

# 定義環境變數,會被後續的RUN命令使用,並且在容器執行期間保持
# 配置檔案引數,預設為test環境
ENV PROFILES="test"
# java啟動引數,預設為空
ENV PARAMS=""

ENTRYPOINT ["sh","-c","java $PARAMS -jar server.jar --spring.profiles.active=$PROFILES "]
複製程式碼

同時配合run命令輸入環境變數:

docker run -d -p 8080:80 --name xxxx -e PARAMS="myParams" -e PROFILES="myProfiles" static_web
複製程式碼

即可修改與覆蓋ENTRYPOINT控制程式碼中的相應變數。

下面用一個最簡單的例子來說明。用play-with-docker來進行快速實驗最合適:

play-with-docker地址 Dockerfile內容:

docker學習筆記-啟動映象輸入引數
執行結果:

docker學習筆記-啟動映象輸入引數

這樣就實現了docker映象輸入引數

通過docker run --env-file 從檔案中匯入多個環境變數

當我們的引數較多需要根據環境變動較大時,同樣也可以使用

--env-file=[]: 從指定檔案讀入環境變數;
複製程式碼

修改上述dockerfile

docker學習筆記-啟動映象輸入引數
結果:

docker學習筆記-啟動映象輸入引數
參考:

yeasy.gitbooks.io/docker_prac… www.runoob.com/docker/dock…

相關文章