dockerfile 与docker-compose的使用以及使用docker部署若依分布式项目

  1. 需要先安装过docker,文章没有讲dockerfile ,docker-compose的相关命令,直接是能使用的实例。

1.dockerfile 概念及使用

1.1使用dockerfile部署MySQL

注意点:1. 从镜像中拉去MySQL后MySQL密码的问题
2. MySQL的如何执行sql文件
3. MySQL创建数据库的中文乱码问题

1.1第一种方式

FROM hub.c.163.com/library/mysql:5.7

#修改编码方式
RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf
RUN service mysql restart
EXPOSE 3306

到Dockerfile所在文件夹,执行,不要忘记最后一个点号

docker build -t my/mysql:v1 . 
docker run --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root  -d my/mysql:v1

第一种方式构建的时候密码问题通过 docker run的时候来解决,处理注意点2与3可以利用MySQL客户端sqlyog之类的远程连接上后再操作;如下图 手动创建数据库,指定字符集以及校对规则。
在这里插入图片描述

1.2参考 在构建镜像的时候执行sql文件

(这个例子为若依开源项目的)可以在构建镜像的时候执行了sql脚本

# 基础镜像
FROM mysql:5.7
# author
MAINTAINER ruoyi

# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/

1.3 docker-compose.yml里面指定字符集以及数据库校对规则

  rose-mysql:
    container_name: sr-mysql
    image: mysql:5.7
    build:
      context: ./mysql
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]

仅使用dockerfile的话建议选择第一种,执行sql文件的时候再使用远程连接的客户端
使用docker-compose 的话使用1.3

1.4 常用命令

#进入容器
sudo docker exec -it 775c7c9ee1e1 /bin/bash  

#启动容器
docker start [容器别名|容器id]
#重启容器
docker restart [容器别名|容器id]
#停止容器
docker stop [容器别名|容器id]
#删除容器
docker rm [容器别名|容器id]

#安装vim
apt-get update
apt-get install vim


2 docker-compose的使用

使用docker-compose可以方便的管理docker容器;
如下‘一行命令可以管理很多个容器’。第一次使用docker-compose up -d 会创建镜像并启动

# 启动程序模块
docker-compose up -d sr-gateway sr-auth sr-modules-system


# 关闭所有环境/模块
docker-compose stop

# 删除所有环境/模块
docker-compose rm

2.1 先安装docker-compose

#安装docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version


2.2 若依分布式项目

项目地址如下
https://gitee.com/y_project/RuoYi-Cloud
里面相关docker脚本自行下载 计划先装上MySQL,nacos,nginx,redis还有启动相关的微服务
在这里插入图片描述

2.2.1 安装MySQL

上面已经提过MySQL的安装方法;

2.2.2 安装nacos;
  1. 安装nacos depends_on要和下图这个文件里面db.url.0 填到的变量对应起来
  2. 需要提前吧nacos需要的数据库配置导入
    在这里插入图片描述
  rose-nacos:
    container_name: sr-nacos
    image: nacos/nacos-server
    build:
      context: ./nacos
    environment:
      - MODE=standalone
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    depends_on:
      - rose-mysql
2.2.3 安装nginx

需要注意的地方有两处:
1 .try_files $uri $uri/ /index.html;
因为前端项目是vue项目路由采用的history模式,如果不在nginx里面配置这个 就会出现刷新之后页面不能显示的情况;
2. proxy_pass http://rose-gateway:8080/; rose-gateway配置的是容器名

location / {
    
    
            root   /home/rose/projects/sr-ui;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		
		location /prod-api/{
    
    
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://rose-gateway:8080/;
		}
2.2.4 安装其他微服务模块

注意点:
1.将项目中注册nacos地址的地方在打包前一定要改成虚拟机或者服务器地址;
在bootstrap.yml里面修改
在这里插入图片描述

2.所有出现的localhost 或者127.0.0.1 请改成服务器地址或者虚拟机地址
比如redis的地址 在nacos里面编辑用的服务的相关配置
在这里插入图片描述

在这里插入图片描述
3.注意微服务里面的日志。docker实例中没有挂载日志;

#compose文件
    volumes:
      - ./rose/logs:/home/rose/logs

这样,就可以在容器外部看到日志了
4.最终部署后成果
docker ps
在这里插入图片描述
最后:补充下删除docker镜像的命令 docker rmi [镜像id] 练手的路上肯定会用好几次;关于若依cloud项目部署遇到问题可以联系我,Q1942951600

猜你喜欢

转载自blog.csdn.net/qq_21561833/article/details/120287784