docker(mysql+springboot+nginx)项目单宿主机部署方案

微服务单宿主机情况下通过docker部署mysql+springboot+nginx 前后端分离web项目,

省去了安装nginx mysql 和jdk环境的配置

如有必要可以集成到容器管理平台 kubernetes spark等

 

一  .    安装docker

1.更新依赖

yum update

必须支持 以下以centos 7系统为例

2.安装 

yum -y install docker

3.启动docker 并设置开机自启动

service docker start

4.设置开机启动

systemctl enable docker

5.配置加速器 不配置会导致镜像下载缓慢

vi /etc/sysconfig/docker

尾行添加 此处采用腾讯云镜像加速器,也可采用daocloud,alibaba的

OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'

 

以下镜像均以daoclou.io为准

二 .    安装mysql

docker run --name zzfw-mysql -d -p 3306:3306 -P -e mysqld -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=chengde_admin -e MYSQL_PASSWORD=chengde_admin -e MYSQL_DATABASE=chengde_db -v /mysql_data:/var/lib/mysql daocloud.io/library/mysql:5.7.4

--name zzfw-mysql 容器别名 便于查找

-p 3306:330 绑定对外端口3306 

root账号密码123456

默认数据库chengde_db 

默认账号密码:chengde_admin/chengde_admin

映射mysql相关配置及数据库 从容器/var/lib/mysql到宿主机/mysql_data

 

三.部署springboot应用

1.准备springboot.jar包 chengde-server-1.0-SNAPSHOT.jar  maven打包

2.准备DockerFile文件

FROM daocloud.io/library/java:openjdk-8u40



MAINTAINER v3ksing



RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone



ADD target/chengde-server-1.0-SNAPSHOT.jar /opt/chengde-server/target/



WORKDIR /opt/chengde-server/



EXPOSE 9090



ENV LANG C.UTF-8



CMD ["java","-jar","-Djava.security.egd=file:/dev/./urandom","target/chengde-server-1.0-SNAPSHOT.jar","--spring.profiles.active=prod"]

该文件包含docker镜像,时区,编码等,端口,启动命令等设置

 

3.上传jar包和Dockerfile文件,目录结构如下

--opt

----chengde-server

------Dockerfile

------target

--------chengde-server-1.0-SNAPSHOT.jar

 

4.执行镜像构建

cd /opt/chengde-server

docker build -t chengde-server:1.0 .

 

注意末尾句号不能少,如有需要可以docker push到镜像仓库

 

5.构建完毕 启动springbot镜像,绑定端口9090并映射日志文件到/opt/chengde-server/log

docker run --name chengde-server -p 9090:9090 -v /opt/chengde-server/log:/opt/chengde-server/log -t chengde-server:1.0

显示springboot日志表示启动成功

 

四.部署nginx web应用

 

静态文件可以通过Dockerfile构建镜像是一并打入,

这里仅单台部署,静态文件映射到单台宿主机

 

1.创建以下目录

mkdir /opt/nginx/conf.d

mkdir /opt/nginx/html

mkdir /opt/nginx/nginx.conf

2.nginx配置文件

文件示例:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
	
	location / {
		proxy_pass http://172.16.6.114:9090;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}

	location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|svg|woff2|woff|ttf|js\.map|css\.map)$ {
		index index.html;
		root /usr/share/nginx/html;
	}

    #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;
    #}
}

 default.conf server节点

添加内容 

    location / {

        proxy_pass http://172.16.6.114:9090;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }



    location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|svg|woff2|woff|ttf|js\.map|css\.map)$ {

        index index.html;

        root /usr/share/nginx/html;

    }

上传nginx配置文件default.conf 到/opt/nginx/conf.d目录

上传nginx配置文件nginx.conf 到/opt/nginx/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;

}

3.上传前端打包好的项目到/opt/nginx/html 目录下

app.html为应用端项目,

admin.html为后台管理端项目

 

4.启动nginx 

docker run --name my-nginx -d -p 80:80 -v /opt/nginx/html:/usr/share/nginx/html:ro -v /opt/nginx/logs:/var/log/nginx -v /opt/nginx/conf.d:/etc/nginx/conf.d:ro -v /opt/nginx/nginx.conf/nginx.conf:/etc/nginx/nginx.conf:ro -d daocloud.io/library/nginx:1.13.0-alpine

映射端口 

映射静态文件路径/opt/nginx/html

日志/opt/nginx/logs

配置文件等

 

可访问页面:

app端:http://172.16.6.114:81/app.html#/pre 

admin端:http://172.16.6.114:81/admin.html#/ 

此时静态页面完毕 但是后台接口504 bad gateway

需要在下一步开启防火墙端口

 

备注:重启nginx命令 

docker restart my-nginx

 

五.开启防火墙端口 centOS7

 

添加nginx,springboot端口,此处可优化9090采用内容容器访问,不对外开发

firewall-cmd --add-port=80/tcp  --permanent

firewall-cmd --add-port=9090/tcp  --permanent

 

其他命令:

#查看防火墙状态

firewall-cmd --state

#查看端口

firewall-cmd --zone=public --list-ports

#关闭端口

firewall-cmd --remove-port=80/tcp --permanent

 

springboot接口可访问,部署完毕

 

详细docker命令参考

https://www.gitbook.com/book/yeasy/docker_practice/details

 

 

Logo

开源、云原生的融合云平台

更多推荐