目录
-
为什么要使用容器化部署 -
准备web服务 -
DockerFile docker-compose.yml
1.为什么要使用容器化部署
-
我对他的简单理解就是,我们在如今微服务盛行的年代,我们的服务体量很小,但是服务很多,经常会面临一台多台服务的同时部署,但是部署服务需要用到很多配置,在服务的发布和迁移过程中很容易出现各种各样问题,而容器化的出现是让我们把服务打成了一个包,带着这个包走,减少服务发布或迁移中会导致各种版本问题,而且让我们的服务和迁移变得更容易.
2.准备web服务
-
我们这里选择一款开源的web服务 ruoyi-ui gitee地址 感谢开源!!!
-
从git上clone下项目后将mysql和redis的地址修改为需要部署自己的服务器地址

-
后台服务和前端服务打包
#前端
npm run build:prod
#后端
maven 打包就好
-
然后我们把服务上传到linux服务器上 (自己指定文件地址就好)

-
然后因为我的linux镜像就是docker镜像 不需要下载docker (如果你们是centos等请下载docker)
#Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
yum -y install docker
#启动 Docker 后台服务
service docker start
#查看docker是否安装完成
docker ps

-
因为我们需要用到docker的服务编排安装下docker-compose(当然也可以用其他的编排方式)
#下载docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#赋予权限
sudo chmod +x /usr/local/bin/docker-compose
#查看是否安装成功
docker-compose --version
3.DockerFile docker-compose.yml
-
我是一台全新的机器所以没有nginx 那我们熟悉docker的朋友肯定就知道了在部署之前可能会将容器内的文件挂载到本地所以我们会新建一些宿主机的目录,用来挂载容器, -
apps我这边存储的是springboot服务 -
nginx存储的是nginx的服务

-
需要挂载到本地的目录也写好了,那么直接来书写DockerFile 和 docker-compose.yml吧
DockerFile
## 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM openjdk:8u201-jdk-alpine3.9
#作者
MAINTAINER zc191016@163.com
#生成验证码可能导致的null指针
RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /home/docker/apps
#暴露8080端口
EXPOSE 8080
#定义参数
#ARG JAR_FILE
#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
#ADD ${JAR_FILE} demo.jar
ADD ./chuang-admin.jar ./home/docker/apps/chuang-admin.jar
#启动容器时的进程
ENTRYPOINT ["java", "-jar", "./home/docker/apps/chuang-admin.jar", "--spring.profiles.active=prod", "--server.port=8080", "> /logs/app.log"]
docker-compose.yml
version: "3"
services:
web:
container_name: nginx
image: nginx:latest
ports:
- 443:443
- 80:80
volumes:
- /home/docker/nginx/html:/usr/share/nginx/html
- /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /home/docker/nginx/conf/vhost:/etc/nginx/conf.d
- /home/docker/nginx/log:/var/log/nginx
- /home/docker/nginx/conf/vhost/cert:/etc/nginx/cert
restart: always
privileged: true
chuang-admin:
container_name: chuang-admin
image: chuang-admin:latest
#使用那个目录下的DockerFile构建
build:
context: ./apps
ports:
- 8080:8080
environment:
- TZ=Asia/Shanghai
volumes:
#容器挂载在宿主机的目录
- /home/docker/apps:/home/docker/apps
restart: on-failure
privileged: true
-
然后将docker-compose 丢到docker目录下

-
DockerFile 丢到apps 目录下

-
目录结构要确认好,之后启动docker-compose.yml 他会帮我们构建镜像和启动容器
#启动容器
docker-compose up -d
-
他会下载和构建镜像

-
下载完毕的镜像大概是这样子,但是启动会失败

-
因为nginx的配置我们光创建了文件夹并没有对应的nginx.conf

他会帮我们自动创建目录,我们只需要对nginx.conf内容做修改就好 nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
#时刻记得这里挂载的是容器的目录
include /etc/nginx/conf.d/*.conf;
}
-
还有vhost内的nginx配置文件以及ssl证书

vhost/nginx.conf
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 域名;
#证书文件名称
ssl_certificate cert/证书.crt;
#私钥文件名称
ssl_certificate_key cert/证书.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。
root /usr/share/nginx/html;
try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
# index index.html index.htm;
}
location /prod-api {
proxy_pass http://后端服务ip:8080;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name 域名;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
-
修改完成后重新启动docker-compose.yml
#删除容器
docker-compose down
#启动容器
docker-compose up -d
-
访问域名就可以自动跳转HTPPS 并且项目前端的包打在了nginx的根目录所以直接就可以访问到项目

原文始发于微信公众号(闯sir9):Docker-cpmpose+nginx(SSL)+springboot
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20663.html