docker-compose把微服务部署到centos7

前言

这里主要记录以下微服务使用docker、docker-compose部署遇到的一些问题,大佬可以绕道去看看自动化集成这篇文章

部署之前你需要准备一些内容

微服务

这里feign-api是用来做服务之间相互调用的,单独抽离成了一个模块,gateway是服务网关,其余是具体的服务

在这里插入图片描述

centos7、xshlee、xftp

VMware虚拟机用于安装centos7,条件允许可以直接上真实服务器,我是在本地安装的,Xshell用于在本地连接远程主机,Xftp用于文件传输,cnetos7最好配置成固定ip

在这里插入图片描述

安装docker

1、 卸载安装过的旧版本,也可以看这里docker安装

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2、安装gcc环境

#顺序执行
yum -y install gcc
yum -y install gcc-c++

3、安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

4、设置stable镜像仓库

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

5、更新yum包软件索引

yum makecache fast

6、安装并启动docker

#安装
yum -y install docker-ce docker-ce-cli containerd.io
#启动
systemctl start docker
#查看版本
docker version
#一些常用命令
systemctl daemon-reload //重载系统服务
systemctl list-unit-files --type service //查看全部服务命令
systemctl status docker  // 查看docker服务状态
systemctl enable docker //设置docker开机自启动
systemctl disable docker // 关闭docker开机启动
systemctl start docker // 启动docker服务
systemctl stop docker // 停止docker服务
systemctl restart docker // 重启docker服务

7、配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qlmy5iw9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker-compose安装

#安装 有点慢 稍微等待一下
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#给docker-compose执行权
sudo chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

部署

每个服务都需要一个DockerFile文件,建议基于别人打包好的基础镜像开始构建,每个微服务都是一个文件目录,格式如下

#DockerFile内容 基于java:8-alpine构建
FROM java:8-alpine
#微服务打包时命名为app
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

在这里插入图片描述

贴两条我手动一个个容器启动的命令,这里不重要可以跳过

#docker 启动nacos容器
#拉取镜像
docker pull nacos/nacos-server:1.4.1
docker run -d --name nacos -p 8848:8848 -v /docker/nacos/logs:/home/nacos/logs -v /docker/nacos/data:/home/nacos/data -v /docker/nacos/config:/home/nacos/config -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=192.168.29.129 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 nacos/nacos-server:1.4.1

#docker 启动mysql容器
#拉取镜像
docker pull mysql:5.7 
docker run -d -p 3306:3306 --privileged=true -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

在外层准备一个docker-compose.yml配置文件,这里nacos和mysql也作为单独容器运行,并通过数据卷映射到了centos7文件上,不做映射每次删除容器数据都会丢失。这里有个小问题就是个个服务的启动顺序,nacos启动比较慢,导致其它服务注册不上去,可以通过docker-compose logs x服务名称x 查看个个服务启动的日志,也可以加depengs_on配置指定启动顺序,但是我喜欢重启除nacos,mysql的所有服务,这里附个docker-compose参数说明

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server:1.4.1
    container_name: nacos
    environment:
      SPRING_DATASOURCE_PLATFORM: mysql
      #单例启动
      MODE: standalone
      #配置centos7 ip地址
      MYSQL_SERVICE_HOST: 192.168.29.129
      #mysql中nacos数据库的名称 其余均为数据库信息
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: 123456
      #nacos服务在容器中的端口
      NACOS_APPLICATION_PORT: 8848
    #数据卷挂载    
    volumes:
       - /docker/nacos/logs:/home/nacos/logs
       - /docker/nacos/data:/home/nacos/data
       - /docker/nacos/config:/home/nacos/config 
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7
    container_name: mysql
    #给容器root权限
    privileged: true
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    #数据卷挂载  
    volumes:
       - /docker/mysql/conf/my.cnf:/etc/my.cnf 
       - /docker/mysql/data:/var/lib/mysql
    #这个端口映射主要是为了解决在本地(windows系统)无法通过navicat连接容器中的mysql数据库,
    #开发测试比较方便,但是在centos7上面安装navicat的话就不用配置ports
    #可以通过expose配置向centos7暴露接口供其它服务访问,而外界无法直接通过centos7连接 
    #后续测试以下expose能否开启多个服务实例
    ports:
       - "3306:3306"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

在这里插入图片描述

执行以下代码开始构建

#运行以下命令构建镜像并启动容器
docker-compose up -d
#查看镜像
docker images
#查看所有容器
docker ps -a

镜像列表、容器列表、文件映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

navicat连接mysql数据库

在这里插入图片描述

#如果出现上图所示错误,依次执行以下命令
#进入 MySQL 容器
docker exec -it mysql bash
#登录 MySQL,执行后输入密码进入  
mysql -uroot -p  
#选择使用 mysql 数据库
use mysql;  
#允许任何ip通过使用root进行访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
#刷新权限
FLUSH PRIVILEGES;
#如果navicat任然不能连接,请务必重启centos7主机然后再启动容器重新连接

在这里插入图片描述

服务正常注册,配置文件也能正常写入数据库中,跨服务的接口调用也正常

在这里插入图片描述

在这里插入图片描述

说得不对的地方望大佬们指出,后续有问题会接着写

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值