Linux环境下使用docker部署SpringBoot+Mysql项目并使用nginx代理前后分离

第一步:使用Docker安装mysql 

docker pull mysql

第二步:启动mysql

docker run -p 3306:3306  -e MYSQL_ROOT_PASSWORD=root  -d mysql:5.7

第三步:进入容器创建数据库和相应的表数据

第四步:使用docker inspect 容器id 查看mysql的ip

第五步:更改数据库连接信息

第六步:使用maven打包springboot项目

第七步:将jar包上传到服务器,与Dockerfile同一目录 

Dockerfile配置

# Docker image for springboot file run
# 172.16.7.253.jar  172.17.0.1.jar  172.18.0.1.jar
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER eangulee <zengchengxie@foxmail.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD api-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"]

构建镜像 docker build -t myapp:v1 . (有一个点)

第八步:启动Springboot项目

--link=[mysql的name:取的别名]

第九步:拉取nginx并启动

docker pull nginx

docker run -d  --name nginxserver  -p 80:80 nginx:latest

第十步:进入nginx容器修改default.conf配置文件

查看linux的局域网地址

最后,退出exit容器

停止nginx docker stop nginxserver

启动nginx docker strart nginxserver即可访问

如果使用nginx不行,就先不需要nginx 直接将springboot项目的端口映射为80

-p 80:8080

访问看看。

总结

1.dockerfile写好后创建镜像并启动容器
docker run -d -p 8080:8089 --name wesapp --link objective_meninsky:appmysql da319698dff0(镜像id)
–link 连接mysql数据库网路,可以互相通信 类似于设置 network :后面是在java容器中的别名
-p 前面是docker宿主机对外的端口号 后面是容器内的端口号

2.启动nginx (数据挂载有坑)
volume 挂载只能挂载文件夹不能挂载目录
a.先不挂载nginx.conf配置文件启动
docker run -d -p 80:80 --name nginxserver --net host -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/logs:/var/log/nginx nginx:latest
如果挂载配置文件启动会报错,因为找不到配置文件
先不挂载启动,然后进入nginx容器内看一下配置文件的路径,然后exit退出,把nginx.conf和default.conf复制到宿主机中
docker cp 9f8e20f997e4:/etc/nginx/nginx.conf /home/nginx/conf
docker cp a30b9724cc5c:/etc/nginx/conf.d/default.conf /home/nginx/conf/conf.d
b. copy完后就可以启动了
docker run -d -p 80:80 --name nginx --net 734fa88ca942f483c4d5a7cb4270a31c2520015d465c3c4e45f2d7dddf699e38 --restart=always --privileged=true -v /home/nginx/html:/usr/share/nginx/html:rw -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /home/nginx/conf/conf.d:/etc/nginx/conf.d:ro -v /home/nginx/logs:/var/log/nginx nginx:latest
切记一定要给nginx文件夹赋访问权限,不然nginx启动报错。

还有容易错的点就是nginx配置文件配置的proxy_pass端口号是容器内的端口号,因为是容器内部访问的。如果配置成宿主机对外的端口号就访问不到nginx代理的接口。

server {
    listen       80;
    listen  [::]:80;
    server_name  xxx.xxxx.com;

    #access_log  /var/log/nginx/host.access.log  main;

    #location / {
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
    #}
	
	#location / {
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
    #}
	
	location / {
        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;
    #}
}

server {
    listen       80;
    listen  [::]:80;
    server_name  xxx.xxxx.com;

    #access_log  /var/log/nginx/host.access.log  main;

    #location / {
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
    #}
	
	#location / {
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
    #}
	
	location / {
        proxy_pass http://172.17.0.3:8089;
		proxy_pass_request_headers      on;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
	
    #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;
    #}
}

但是我配置不通过 / 根目录访问的时候是不成功的 不知道怎么回事 这个一直没走通
比如:

location /api {
        proxy_pass http://172.17.0.3:8089;
		proxy_pass_request_headers      on;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

这样配不好使,只能配置 / ,后来我又搞了一个域名作为接口访问地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值