背景:随着微服务的项目越来越多,部署这些项目和解决环境差异,成了一个耗时的工作,使用Docker可以方便的帮我们解决诸多问题,此处不叙述Docker的优点和用法,记录一下在Mac环境下使用Docker部署SpringCloud服务的过程。

范例服务:
服务1:注册中心eureka
服务2:MySQL
服务3:业务应用

1.Docker安装

Mac可以从Docker官网 https://www.docker.com/products/docker-desktop 方便的下载dmg文件进行傻瓜式安装。

docker springcloud 优雅下线_Docker

安装好后打开,会在你的菜单栏出现一个会动的小鲸鱼动画,等鲸鱼动画结束,就证明Docker启动结束了,点击会显示Docker Desktop is running

docker springcloud 优雅下线_docker_02

2.创建Bridge网络

为了解决一会我们创建后容期间通信问题,我们先创建一个Bridge网络,这里起名为local-net

docker network create local-net
3.容器化MySQL应用

安装MySQL可以直接使用docker hub:

docker search mysql
docker pull mysql

即可将mysql image下载到本地,我们可以确认一下:

docker image ls

可以看到:

docker springcloud 优雅下线_docker_03

接下来生成容器:

docker run --name mysql --network local-net -e MYSQL_ROOT_PASSWORD=12345 -d -i -p 3307:3306 mysql:latest

通过–name指定了容器名,–network指定了网络,注意这里我把容器的3306端口映射到宿主机的3307端口,是为了避免和宿主机MySQL端口冲突,你可以按照自己的实际情况调整。
这样我们就将MySQL容器化了,可以登陆进去看一下:

docker exec -it mysql bash
mysql -u root -p

docker springcloud 优雅下线_docker_04


注意调整下权限:

use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345';
flush privileges;
4.容器化注册中心

这里的注册中心使用的eureka,我们将package好的tar.gz压缩包复制出来,并创建一个Dockerfile文件,内容如下:

FROM java:8
ADD eureka-1.0.0-release.tar.gz /
WORKDIR /eureka-1.0.0/bin/
EXPOSE 11100
CMD "./start.sh"

eureka-1.0.0-release.tar.gz 是我通过maven配置打包好的项目,其中的bin目录下有start stop脚本,用来启动或停止项目

接下cd到dockerfile和eureka-1.0.0-release.tar.gz所在目录,开始构建image:

docker image build -t eureka:latest .

构建完成后就可以生成容器了:

docker container run -d --name eureka --network local-net --publish 11100:11100 eureka:latest
5.容器化业务应用

方法和eureka的容器化是一样的,需要注意的是,由于业务应用需要链接eureka和数据库等组件,要保证他们之间的通信,所以我们需要修改应用的配置文件,将目标主机修改为docker中容器的name,如mysql,假设修改前的链接信息是:

localhost:3306

应将主机名修改成docker容器name,我们刚刚给mysql起名就叫mysql,故改成:

mysql:3306

注册中心同理。

6.测试

这样,我们就完成了注册中心,mysql,业务应用的容器化,在宿主机打开eureka页面:

docker springcloud 优雅下线_mysql_05


可以看到服务注册成功了,再尝试访问业务应用的swagger页面:

docker springcloud 优雅下线_docker_06


可以正常访问。

在docker的dashboard也可以看到和管理容器与镜像:

docker springcloud 优雅下线_Docker_07