关于docker部署redis、nginx、mysql、jdk的相关操作

前言:

目前公司分配给我一个关于”xxx发展“的一个项目,主要是要求我利用docker将这个项目搭起来,之后方便开发人员进行后续工作,本次工作大约历时2天6个小时,由于是第一次做,遇到了很多很难,因此在这里进行一次总结,以便增长自己的知识。

1.Docker的安装

公司分配一台华为云上的ECS服务器,IP地址为114.1xx.xxx.101;操作系统为Ubuntu。在此之前都是在Centos上安装docker,故我在菜鸟教程文档的帮助下安装了docker,操作流程如下:

卸载原有docker

*sudo apt-get remove docker docker-engine docker.io containerd runc*

此处留个坑,目前没有ubuntu操作系统,当时安装步骤有些忘记,留着下次填上 ,下面是菜鸟教程地址。

https://www.runoob.com/docker/ubuntu-docker-install.html

2.制作含有Jar包的Docker image

开发同事给了一个jar包,因此需要编写一份Dockerfile然后使用docker build命令来创建image,操作流程如下:

Dockerfile文件内容:

FROM openjdk:8-jdk-slim
​
ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    JAVA_OPTS="" \
    CUP_SLEEP=0
​
VOLUME /logs
CMD echo "The application will start in ${CUP_SLEEP}s..." && \
    sleep ${CUP_SLEEP} && \
    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
​
# add directly the jar
ADD target/*.jar /app.jar

FROM: 表示image信息

ADD: 需要将jar包放到ADD指定的位置,这里目前指在target目录下

注意:1.此dockerfile目前针对的是jar包

2.在编写dockerfile前需要将image拉取下来

创建容器

写好dockerfile,并创建好ADD指定目录后,使用:

docker build -t openjdk1 . -f Dockerfile

等待下方出现两个successfully时 即表示创建成功,我们可以运行docker images来查看(暂时没有图片,以后需要补上)

编写docker-compose.yml文件

一开始的时候是直接使用的docker run命令,后来发现每次关闭再重启的时候需要敲一大段命令 而且之后还有很多的坑,于是乎及时止损,选择使用了docker-compose 并且容器之间的链接也容易写得明了。

version: "3.3"
​
services:
 jeecg:
   container_name: jeecg
   image: openjdk1.3:latest
   ports:
    - "8080:8080"
   volumes:
    - type: bind
      source: /data/jdk
      target: /opt/jeecg-boot/upload
   environment:
    - JAVA_OPTS=-Dactive-profile=prod
    - TZ=Asia/Shanghai
   networks:
    - frontend
    - backend
​
 jeecgdb:
  container_name: jeecgdb
  image: mysql:5.7.24
  ports:
   - "3333:3306" # exposing 3333 for external connects
  volumes:
   - type: bind
     source: /data/mysql/data
     target: /var/lib/mysql
   - type: bind
     source: /data/mysql/conf
     target: /etc/mysql/conf.d
  environment:
   - MYSQL_ROOT_PASSWORD=12345
   - TZ=Asia/Shanghai
  networks:
   - backend
​
​
 nginx:
  container_name: jeecg_nginx
  image: nginx:latest
  ports:
   - "80:80"
 volumes:
   - type: bind
     source: /data/nginx/logs
     target: /var/log/nginx
   - type: bind
     source: /data/nginx/www
     target: /usr/share/nginx/html
   - type: bind
     source: /data/nginx/nginx.conf
     target: /etc/nginx/nginx.conf
   - type: bind
     source: /data/nginx/conf.d
     target: /etc/nginx/conf.d
  environment:
   - TZ=Asia/Shanghai
  networks:
    - backend
    - frontend
​
 redis:
  container_name: jeecg_redis
  image: redis:3.2
  ports:
   - "6379:6379"
  volumes:
   - type: bind
     source: /data/redis/conf
     target: /etc/redis
  environment:
   - TZ=Asia/Shanghai
  networks:
   - backend
   - frontend
​
​
networks:
  frontend:
  backend:

以上是我将四个容器的配置写了进去,yaml源自公司的文件,之后对它有一定的修改,增加

mysql配置

在写docke-compose之前我是使用docker run命令安装的mysql ,可能是版本问题(直接下载的8)也可能是本身就有的问题,当我启动成功后,使用navicat怎么也不能访问,之后查到了几条命令,便可以解决,一下包括进入容器-修改完成命令

docker exec -ti <continue id> /bin/bash
mysql -u root -p(passwd)
alter user 'root'@'%' identified with mysql_native_password by '12345';
flush privileges;
exit

这样就解决了不能访问的问题

接下来是恢复数据库的操作

create database xxx;
use xxx;
source /路径/路径/xxxxxxx.sql;
exit

以上是关于mysql的配置

nginx配置文件

配置文件包含两个 一个是自己写的nginx.conf 一个是找单总要来的nginx.conf 放置位置不同,所以两个都是有用的。

##自己写的nginx.conf,用来放在/nginx/conf.d目录下

server {
        listen       80;
        server_name  114.xxx.xxx.101;
​
        #后台服务配置,配置了这个location便可以通过http://域名/jeecg-boot/xxxx 访问      
        location ^~ /jeecg-boot {
            proxy_pass              http://jeecg:8080/jeecg-boot/;
            proxy_set_header        Host 127.0.0.1;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.html?s=$1 break;
#               break;
            }
        }
    }
##找单总要来的nginx,用来放在nginx目录下

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;
    
    client_max_body_size 2000m;
​
    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;
}

思路

将本次实验过程详细叙述一遍 ,期间遇到的问题会随之往下列举出来:

编写好dockerfile后使用docker build 命令创建好容器,之后编写好docker-compose,使用docker-compose run -d启动docker。

1.在使用docker run启动mysql的时候遇到了很多问题,在上面已有解决办法,之后使用docker-compose就没有了(目前不知道是配置问题还是版本问题)

2.最多的难点都在于nginx上。之前已经解决了mysql+jdk+redis 因此后台方面没有问题了,在前端上出现了一些问题:

①刚开始的时候访问显示500;之后将配置文件中rewrite 后面的last修改成break

②这个问题是在找单总要另一份nginx之前遇到的问题。需要添加一个http{}以及再添加一个events{worker_connections 1024; ##Default: 1024}

③以上解决方案都没有解决网页错乱的问题,最后找单总要来了一份nginx.conf(通用)放在了nginx目录下,将自己的nginx.conf放置在nginx/conf.d下最后重启nginx容器(注:对于自己写的nginx文件 需要将②里面的http和events删除。)然后解决该问题

④留下一个坑 ,网页上有一个logo.png显示不出来 暂时不知道什么原因。。先遗留着吧~

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值