赞
踩
一个项目更新需要打成镜像包发布。
docker+springboot.jar+vue静态文件+nginx
本文不讲安装docker,安装好安装,镜像源稍微麻烦点
抄作业原文 传送门
按照上文拉取centos7,然后将需要的东西直接打进脚本,这样最简单,但是在拉取过程中,初始镜像contos7安装nginx需要安装一些工具包,拉取的时候报错了,原因还是在镜像源上,并且还想在上面装一些工具,另外创建容器不应该在里面做很多初始化的东西,每次更新业务包就行,为了解耦,所以先自己定制一个操作系统镜像,然后再创建应用。
1)生成镜像并创建容器
# docker images 一下,看看有没有镜像,没有的话拉一个,一般都有
docker pull centos:7
# 创建一个容器 eeb6ee3f44bd镜像id
docker run -itd eeb6ee3f44bd
# 查看下
docker ps -a
# 进入到容器里,安装自己想装的东西
docker exec -it 356f118b8866 /bin/bash
2)安装一些定制的东西
# 拉取的镜像执行这个 才能安装gcc 要不报错
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 安装这些依赖 必须安装 安装nginx会用到
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
# 再装个网络工具,以便于后面查看端口
yum install net-tools
yum -y install telnet-server
3)将此容器打成镜像
# 前两个参数是作者和描述 后买两个参数一个是容器id 一个是镜像名称和tag
sudo docker commit -a "test" -m "create new img" 2633c8af37b4 centos:v1
# 查看多了一个镜像
docker images
2、安装业务应用
mkdir -p /data/testa
准备下列文件,web是vue打出来的静态文件,其他文件一眼能看出来
-rw-r--r--. 1 root root 2519 Jul 15 00:18 Dockerfile
-rw-r--r--. 1 root root 185515842 Jul 15 00:18 jdk-8u144-linux-x64.tar.gz
-rw-r--r--. 1 root root 1062124 Jul 15 00:18 nginx-1.20.2.tar.gz
-rw-r--r--. 1 root root 2626 Jul 15 00:18 nginx.conf
-rw-r--r--. 1 root root 216162708 Jul 15 00:18 project-service-v1.0.65.gjj.2-springboot.jar
-rw-r--r--. 1 root root 647 Jul 15 00:18 run.sh
drwxr-xr-x. 7 root root 125 Jul 15 00:19 web
1)创建 nginx.conf
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ # user nginx; worker_processes auto; error_log /usr/local/nginx/logs/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; client_max_body_size 100m; include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html/public; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { index index.php index.html index.htm; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 8088; server_name localhost; location / { root /usr/local/project/web; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/{ proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://localhost:8080/; #设置监控后端启动的端口 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2)生成Dockerfile
FROM centos:v1 # 描述作者和邮箱,可只写其中一个,也可二个都写 MAINTAINER test # 时区与字符设置UTF-8并配置环境 ENV TZ=Asia/Shanghai ENV LANG=C.UTF-8 # 在容器里面创建一个java目录,用来放拷贝过来的文件,RUN用来执行linux命令 RUN mkdir /usr/local/java # 在容器内创建一个project目录和子目录web,用来存放后端jar包和前端打包好的静态页面 RUN mkdir -p /usr/local/project/web # 把jdk-8u144-linux-x64.tar.gz添加到容器中,文件必须要和你的Dockerfile在同一级目录里面,ADD命令会自动将.gz文件拷贝到容器里面并自动解压 ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/ # 配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_144 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH #将后端jar包复制到容器里面的project COPY project-service-v1.0.65.gjj.2-springboot.jar /usr/local/project #将前端打包好的静态文件复制到容器里面的5gsignplay-web目录下面,COPY复制不了文件本身,只能复制文件里面的内容,所以要提前在容器里面创建一个前端目录 COPY web /usr/local/project/web #配置nginx,将nginx搬到容器里面自动解压 ADD nginx-1.20.2.tar.gz /usr/local/java/ #进入/usr/local/java/nginx-1.20.2目录进行安装和编译 WORKDIR /usr/local/java/nginx-1.20.2 #安装nginx的四个依赖 # RUN yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel #配置环境,考虑到后续安装ssl证书 添加两个模块 RUN ./configure --with-http_stub_status_module --with-http_ssl_module #make编译,make install安装,make && makeinstall的意思就是执行make如果没有发生错误就执行make install RUN make && make install #将nginx.conf拷贝到容器里面nginx安装后的目录,make install安装成功后,/usr/local下面会多出一个nginx目录,所以这里需要将nginx.conf拷贝到/usr/local/nginx文件目录里面 COPY nginx.conf /usr/local/nginx/conf/nginx.conf #将启动脚本拷贝到容器里面的/usr/local/project下面 COPY run.sh /usr/local/project #给run.sh可执行权限 RUN chmod 777 /usr/local/project/run.sh #对外暴露80,8880端口,暴不暴露端口没有什么影响,重要的是要在启动的时候使用-p映射宿主机端口:容器端口,暴露端口你也得使用-p映射端口 #EXPOSE 80 8880 #通过脚本同时启动后端jar包和nginx CMD ["sh","/usr/local/project/run.sh"]
3)创建run.sh
#!/bin/bash
# 启动nginx服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#启动后端jar包,日志打印不额外存储
nohup java -Xms1024m -Xmx1024m -Xss5120k -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:ParallelGCThreads=13 -XX:ConcGCThreads=8 -XX:InitiatingHeapOccupancyPercent=70 -jar /usr/local/project/project-service-v1.0.65.gjj.2-springboot.jar >>nohup.out 2>&1 &
#使这个脚本一直处于运行状态,如果不这样,当这个脚本命令执行结束后,docker容器会立即停止运行,所以这里需要让这个脚本一直运行,使docker容器一直处于运行状态
while [[ true ]];do
sleep 1
done
4)准备文件完成后执行下面的就行(如果配置文件不对,比如nginx的配置等先进入镜像手动调整好,没问题了,再删除掉容器和镜像重新制作镜像即可)
# 生成镜像
docker build -t gjj .
# 查看镜像
docker images
# 创建容器 可以加多个-p 这个就是端口的一个映射 gjj第一个是容器的名字 第二个人是镜像像
docker run -d -p 8088:8088 --name gjj gjj
# 查看容器
docker ps -a
# 进入到容器 可以看看应用都起来没
docker exec -it 6d0ba39493fc /bin/bash
# 删除容器先停止 后删除
docker stop 6d0ba39493fc
docker rm 6d0ba39493fc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。