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中参数的地址

posted @ 2020-07-21 13:49  antguo  阅读(3145)  评论(1编辑  收藏  举报