在同一目錄下執行構建鏡像命令: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鏡像
在同一目錄下存放Dockerfile、nginx.conf和dist
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中參數的地址