前言
这里主要记录以下微服务使用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.reposed -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.1container_name: nacosenvironment:SPRING_DATASOURCE_PLATFORM: mysql#单例启动MODE: standalone#配置centos7 ip地址MYSQL_SERVICE_HOST: 192.168.29.129#mysql中nacos数据库的名称 其余均为数据库信息MYSQL_SERVICE_DB_NAME: nacos_configMYSQL_SERVICE_PORT: 3306MYSQL_SERVICE_USER: rootMYSQL_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.7container_name: mysql#给容器root权限privileged: trueenvironment: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-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "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主机然后再启动容器重新连接
服务正常注册,配置文件也能正常写入数据库中,跨服务的接口调用也正常
说得不对的地方望大佬们指出,后续有问题会接着写