前言
这篇帖子服务于踩坑的自己,如果这篇帖子对你能起到帮助,那将更又意义。
首选你要又台Linux机器 (本篇帖子为阿里云Centos 8)
安装好Docker环境
docker 安装的方法很多,这里不做赘述,推荐官网查看(docker是个轻量的很好装)
systemctl enable docker#设置开机启动
systemctl disable docker#关闭开机启动
拉取Nginx
# 拉取 nginx:1.12 如果不指定版本则最新的 更丰富的中间件 https://hub.docker.com
docker pull nginx
下图仅仅关注 nginx latest 即可

我拉取了两个nginx 我们用latest那个版本讲解,这里nginx镜像已经搞定,我们先放一放
Dockerfile 生成springboot 项目 自定义镜像
准备一个Spring Boot 的Jar包,分别设置端口 9092 9093 (看你心情搞)
首选你需要准备一个 Dockerfile 文件,我也郁闷为啥非叫“Dockerfile”这个名字,也没后缀,后续等我明白在补充
sp-docker-0.0.1-SNAPSHOT.jar: 这个就是boot 的普通jar。你需要打包两次,分别9092和9093端口,为实现后面负载效果准备

Dockerfile 说明 注意替换你自己的jar包名
#创建文件,或者touch
vim Dockerfile
# 写入
# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java 如果你用的是别的jdk记得换,另外如果你的虚拟机没安装过jdk镜像,那么等下会自动拉取jdk
FROM java:8
# 作者
MAINTAINER eangulee <lhl>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD sp-docker-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
:wq!
把 Dockerfile 和你的jar放在通一个文件夹
docker build -t boot2 .
build :构建
-t [镜像名称]
重复动作,更换Jar中的端口,在打一个包, 构建镜像为 boot3, 这样你就又俩镜像了,准备好你会的到如下图结果

启动boot工程
boot 工程的镜像我们已经主备好,那么我们启动这两个工程
# 启动 boot2 镜像
docker run --name boot2Name -d -p 8082:9092 boot2
# 启动 boot3 镜像
docker run --name boot3Name -d -p 8083:9093 boot3

--name:容器名称(方便后续进入实例获取他的文件)
-d 后台运行
-p 端口映射
8082 、8083:是宿主机的端口
9092、9093:是你Jar真实端口
--restart=always (本次没有运行,这个表示docker容器在停止或服务器开机之后会自动重新启动)
拓展:
# 查看多有镜像
docker images
# 列举当前运行的容器:
docker ps
# 查询所有容器
docker ps -a
# 检查容器内部信息:
docker inspect [容器名称]
# 停止容器
docker stop [容器名称]
# 重启容器
docker start [容器名称]
# 移除容器
docker rm [容器名称]
#杀死所有正在运行的容器:
docker kill $(docker ps -a -q)
# 删除所有停止的容器:
docker rm $(docker ps -a -q)
先启动nginx,然后把ngixn配置文件copy到外部
把虚拟机添加安全组:

启动nginx
# 启动nginx 镜像内部
docker run --name mynginx -d -p 8080:80 nginx
访问下试试:

copy 容器内部的nginx文件到外部
# 首先你要把 /home/nginx/conf log conf.d 文件夹建立 mkdir 命令
# mynginx 为你刚才启动的容器名称
docker cp mynginx:/etc/nginx/nginx.conf /home/nginx/conf
docker cp mynginx:/var/log/nginx /home/nginx/log
docker cp mynginx:/etc/nginx/conf.d/default.conf /home/nginx/conf/conf.d/
然后停止 容器ngixn
# 停止容器
docker stop mynginx
# 移除容器 因为下次我还想用 mynginx 名字
docker rm mynginx
修改nginx配置文件
# 修改nginx.conf文件
vim /home/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;
upstream app{
server app2:9092 max_fails=1 fail_timeout=60s weight=1;
server app3:9093 max_fails=1 fail_timeout=60s weight=1;
}
server {
listen 81;
listen [::]:81;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://app;
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
}
说明:

启动ngixn
# 启动nginx
docker run --name mynginx -p 8080:81 --link boot3Name:app3 --link boot2Name:app2 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/log:/var/log/nginx -d nginx
访问:

搞定
小白上路,希望对您有所帮助!
本文详细介绍了如何使用Docker部署SpringBoot应用和Nginx,包括Dockerfile的编写、镜像的构建与运行、端口映射及Nginx配置,实现了应用的容器化和负载均衡。
1057

被折叠的 条评论
为什么被折叠?



