zoukankan      html  css  js  c++  java
  • Docker实战部署JavaWeb项目-基于SpringBoot

    最近在滴滴云上看到服务器很便宜,1核2G,1年只需要68块钱。下面是我基于Docker部署Javaweb服务的过程。目前我见过的最便宜的服务器,阿里云打折的时候都没有这么便宜啊,果断入手。有需要的话可以通过下面链接购买。
    滴滴云全线标准型云服务器限时特惠,新购云服务包1个月5折,包3个月4折,包6个月低至3折。注册即送2200元新手大礼包,速度上车。点击查看:https://i.didiyun.com/280pWTzUktG

    Java项目说明

    Java项目是基于SpringBoot,使用Maven构建的项目,就是普通的springbtoo的web项目,不需要什么特别的配置。

    包括了配置nginx请求和ssl证书。

    域名是在阿里云申请的,证书也是在阿里云申请的,服务器是在滴滴云购买的。

    安装docker

    安装并配置权限

    • 在使用普通用户操作docker的时候会报错,每次都需要切root用户,实在是麻烦,所以这里设置一下权限,使得普通用户就可以使用docker,原理就是将当前的用户添加到docker组,然后刷新一下权限,再重启一下docker就可以使用。
    # 安装docker
    sudo apt-get install docker.io
    # 查看权限问题
    ll /var/run/docker.sock
    # 将当前用户添加到docker组中
    sudo usermod -aG docker ${USER}
    # 更新docker组
    sudo newgrp docker
    # 重启服务,然后重新登录下用户即可
    sudo systemctl restart docker
    

    设置镜像阿里云加速

    • 这个可以根据需要配置,不配置不会影响,配置了阿里云的镜像,下载镜像(docker pull)的时候会更快。
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://d3jht7al.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    基于mysql创建docker容器

    • 进入Mysql容器的时候需要注意加上参数LANG=C.UTF-8,否则在查询数据的时候会出现乱码。
    docker pull mysql
    # 创建基于mysql的docker容器,密码默认为password
    docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:5.7
    # 进入Mysql容器
    docker exec -it mysql env LANG=C.UTF-8 /bin/bash
    # 进入mysql控制台
    mysql -uroot -ppassword
    

    基于maven创建docker容器

    • 创建容器的时候记得加上--rm参数,这样在maven构建项目之后会自动删除该容器,不会占空间,构建完后根本不需要这个容器了。
    docker pull maven
    # 创建路径,存在java项目
    mkdir -p $HOME/projects
    # 项目所在目录 /home/dc2-user/projects/x-lidaoyuan
    # 创建数据卷,用于共享maven数据
    docker volume create --name maven-repo
    # 查看数据卷
    docker volume ls
    # 创建基于maven的容器,使用数据卷maven-repo,编译项目,在项目目录下生成jar包
    docker run -it --rm --name my-maven -v maven-repo:/root/.m2 -v "$HOME/projects/x-lidaoyuan":/usr/src/mymaven -w /usr/src/mymaven maven:3.6.3-jdk-8 mvn clean package
    

    基于Java创建docker容器

    • 说明一下我的java项目的端口号是7878,容器的对外开放端口也需要设置为7878。
    • java命令启动项目的时候,记得在最后面加上&符号,使得项目可以在后台运行。
    docker pull java:8
    # 创建容器,端口设置为7878
    docker run -it --name liaoliaoba -p 7878:7878 -v "$HOME/projects":/root/projects java:8 
    # 进入容器(首次创建会自动进入,不需要这行命令)
    docker exec -it liaoliaoba env LANG=C.UTF-8 /bin/bash
    # 并启动项目
    java -Dfile.encoding=UTF-8 -jar /root/liaoliaoba/liaoliaoba-api/target/liaoliaoba-api-0.0.1-SNAPSHOT.jar &
    

    基于nginx创建docker容器

    • 我的所有配置都是放在项目目录liaoliaoba/config下面
    • 监听http的80端口和https的443端口
    docker pull nginx
    # 创建基于nginx的docker容器,conf.d目录下放置的是配置文件
    docker run -it --name nginx -p 80:80 -p 443:443 -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/html":/usr/share/nginx/html -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/conf.d":/etc/nginx/conf.d -v "$HOME/projects/x-lidaoyuan/x-liaoliaoba/config/nginx/cert":/etc/nginx/cert -d nginx
    

    conf.d下的配置文件

    文件llba.xxx.top-ssl.conf

    • 端口号7878是我java项目的启动端口,这个端口也需要在java容器中开启,通过该端口访问到java项目
    • 172.17.0.3为java容器的内部ip地址,通过docker inspect liaoliaoba可以查看到该IP地址
    • .pem和.key这个两个证书是通过阿里云申请的免费的证书,有效期只有一年
    • 其他的配置基本都是默认的
    upstream tomcat_llba {
        server 172.17.0.3:7878;
    }
    server {
        listen       443 ssl;
        server_name  llba.xxx.top;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        ssl_certificate /etc/nginx/cert/3320062_llba.xxx.top.pem;   #将domain name.pem替换成您证书的文件名。
        ssl_certificate_key /etc/nginx/cert/3320062_llba.xxx.top.key;   #将domain name.key替换成您证书的密钥文件名。
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
        ssl_prefer_server_ciphers on;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        location /llba/ {
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat_llba;
        }
    
        #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;
        #}
    }
    

    创建基于Redis的Docker容器

    docker pull redis
    docker run -itd --name redis -p 6379:6379 redis
    

    最后整理脚本

    • 说明一下,通过git拉取项目的时候可以配置一下密钥,这样每次拉取的时候就不需要每次输入用户名和密码了。

    创建Java程序启动脚本start.sh

    java -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 -jar /root/projects/x-lidaoyuan/x-liaoliaoba/target/x-liaoliaoba-1.0.0-SNAPSHOT.jar &
    

    创建Java程序停止stop.sh

    kill `jps -l | grep x-liaoliaoba | awk '{print $1}'`
    

    重启脚本restart.sh

    /root/stop.sh
    /root/start.sh
    

    在宿主机创建公私钥

    # 连续回车三次,就剩生成公私钥,然后将公钥`id_rsa.pub`放在GitHub上。
    ssh-keygen -t rsa -C "example@163.com"
    git config --global user.name "examplePC"
    git config --global user.email "example@163.com"
    # 查看配置是否生效
    git config -l
    

    宿主机脚本into_liaoliaoba.sh

    # 切换到目录下
    cd /home/dc2-user/projects/liaoliaoba
    # 拉取镜像
    git pull
    # 构建项目
    docker run -it --rm --name my-maven -v maven-repo:/root/.m2 -v "$HOME/projects/x-lidaoyuan":/usr/src/mymaven -w /usr/src/mymaven maven:3.6.3-jdk-8 mvn clean package
    # 进入java容器,并重启项目
    docker exec -it liaoliaoba env LANG=C.UTF-8 /bin/bash
    

    如果喜欢的话可以关注下个人公众号

  • 相关阅读:
    分享一下前一段时间的开发总结
    循环,梦
    从C#程序中调用非受管DLLs
    大学生零工资就业,谁之过?
    国外宽带用户的上网速度能达到多少呢?
    天沉沉,来个好天气吧
    虚伪,不只是形容一个人
    回头思考关于xml的使用
    从毕业生当中看人与人的差距
    C# 编码规则
  • 原文地址:https://www.cnblogs.com/lidaoyuan0123/p/12182778.html
Copyright © 2011-2022 走看看