在同一目录下执行构建镜像命令: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中参数的地址