背景:随着微服务的项目越来越多,部署这些项目和解决环境差异,成了一个耗时的工作,使用Docker可以方便的帮我们解决诸多问题,此处不叙述Docker的优点和用法,记录一下在Mac环境下使用Docker部署SpringCloud服务的过程。
范例服务:
服务1:注册中心eureka
服务2:MySQL
服务3:业务应用
1.Docker安装
Mac可以从Docker官网 https://www.docker.com/products/docker-desktop 方便的下载dmg文件进行傻瓜式安装。
安装好后打开,会在你的菜单栏出现一个会动的小鲸鱼动画,等鲸鱼动画结束,就证明Docker启动结束了,点击会显示Docker Desktop is running
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 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
注意调整下权限:
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页面:
可以看到服务注册成功了,再尝试访问业务应用的swagger页面:
可以正常访问。
在docker的dashboard也可以看到和管理容器与镜像: