Docker打包鏡像


在同一目錄下執行構建鏡像命令:docker build -t [鏡像名稱] .

一、打包jar鏡像

在同一目錄下存放Dockerfile.jar文件,運行時映射的端口號要跟大包jar時配置文件里寫的端口號一致

Dockerfile信息如下:

FROM java:8 # 運行環境
MAINTAINER antguo # 維護人員
COPY test.jar /usr/local/test.jar # 拷貝.jar文件到docker路徑下
EXPOSE 8080 # 開放端口號,跟.jar打包時的端口一致
ENTRYPOINT ["java","-jar","/usr/local/test.jar"] # 容器啟動執行命令
RUN echo "test build successfully !" # 打印提示信息

二、打包基於nginx的vue鏡像

在同一目錄下存放Dockerfilenginx.confdist

Dockerfile信息如下:

FROM nginx # 基於nginx環境
MAINTAINER antguo # 維護人員
COPY dist/ /usr/share/nginx/html # 將vue項目打包好的dist文件復制到docker路徑下
COPY nginx.conf /etc/nginx/nginx.conf # 將修改好的nginx.conf文件復制到docker路徑下
RUN echo 'antguo docker nginx start success!' # 打印提示信息

nginx.conf信息如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
	    root /usr/share/nginx/html;  # 此路徑要與Dockerfile中的dist文件夾存放路徑一致
	    try_files $uri /index.html $uri/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

三、實現動態修改基於nginx的vue鏡像中的api地址

在以上第二步的基礎上修改Dockerfile內容如下:

寫法一

FROM nginx
MAINTAINER antguo
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
COPY config.sh /config.sh
ENV VUE_APP_API_BASE_URL 192.168.1.1:8080
RUN chmod +x /config.sh && /config.sh

以上寫法也能成功替換api地址為Dockerfile對應參數,但是在創建運行容器的時候使用-e傳參沒有達到替換,因此推薦使用方法二

寫法二(推薦)

FROM nginx
MAINTAINER antguo
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
COPY config.sh /config.sh
ENV VUE_APP_API_BASE_URL 192.168.1.1:8080
RUN chmod +x /config.sh
ENTRYPOINT ["/config.sh"]
CMD /bin/bash -c "echo 'hello' && exec nginx -g 'daemon off;'"

命令/bin/bash -c "echo 'hello' && exec nginx -g 'daemon off;'"說明:
如果在Dockerfile中添加自定義CMD,請確保在CMD中包含-g守護進程;在CMD中,nginx將保持在前台,這樣Docker可以正確跟蹤進程(否則容器將在啟動后立即停止)!

在以上第二步的基礎上,同一路徑下新增文件config.sh,內容如下:

#!/bin/bash
set -e
find /usr/share/nginx/html/ -type f -name '*.js'|xargs sed -i "s/127.0.0.1:8082/${VUE_APP_API_BASE_URL}/g"
echo 'this is config.sh'
exec "$@"

127.0.0.1:8082為打包vue項目時默認填寫的api地址,以上腳本作用是將該地址都替換成Dockerfile中參數的地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM