此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
本文为Docker容器部署,包括Dubbo微服务、Zookeeper、Dubbo-admin的部署
本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。
Docker容器启动参数
运行参数说明:
-d
: 后台运行容器,并返回容器ID-i
: 以交互模式运行容器,通常与-t同时使用-t
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用--name
: 为容器指定一个名称-e
: 设置环境变量--env-file
: 从指定文件读取环境变量-p
: 端口映射,如果不做端口映射,容器外部无法访问容器内部-v
: 文件挂载--link
: 添加链接到容器,在default网络下,默认不会将容器名称解析到容器IP地址,必须要添加link选项才可以。而在自定义网络下,则不需要添加此选项
更多选项可以查看docker文档
Docker容器部署
部署时绑定容器内外IP,可使用获取内网IP命令
1
ip=$(ip addr | grep inet | grep -v inet6 | grep eth0 | awk '{print $2}' |awk -F '/' '{print $1}')
网络接口及数据卷
1
2
3
4
5
6
7
# 创建网络接口
docker network create zookeeper
docker network create dubbo
# volumn创建,用来持久化数据
docker volume create background
docker volume create dubbo
Zookeeper
1
2
3
4
5
6
7
8
9
10
11
# zookeeper注册中心
docker run -d \
--name zookeeper \
--net zookeeper \
--net dubbo \
-v background:/var/lib/zookeeper/data \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
--restart=always \
jplock/zookeeper:3.4.11
dubbo-admin
1
2
3
4
5
6
7
8
9
10
11
# dubbo-admin管理中心
docker run -d \
--name dubbo-admin \
--net zookeeper \
-v background:/data \
-p 9600:8080 \
-e DUBBO_REGISTRY="zookeeper:\/\/ip:port" \
-e DUBBO_ROOT_PASSWORD=root \
-e DUBBO_GUEST_PASSWORD=guest \
--restart=always \
riveryang/dubbo-admin
dubbo-monitor
1
2
3
4
5
6
7
8
9
10
11
# dubbo-monitor监控中心
docker run -d \
--name dubbo-monitor \
--net zookeeper \
-v background:/dubbo-monitor/data \
-e DUBBO_IP_TO_REGISTRY=ip \
-e DUBBO_PORT_TO_REGISTRY=9700 \
-p <ip>:9700:9700 \
-p 9601:9601 \
--restart=always \
jeromefromcn/dubbo-monitor
Dubbo微服务
1
2
3
4
5
6
7
8
9
10
11
# Dubbo微服务
docker run -d \
--name <containerName> \
--net dubbo \
-e DUBBO_IP_TO_REGISTRY=<ip> \
-e DUBBO_PORT_TO_REGISTRY=<port> \
-p <ip>:<port>:<port> \
-v dubbo:/log \
--restart=always \
<imageName> \
--spring.profiles.active=<env>
Docker常用命令
命令里使用
${CONTAINER_ID}
与${CONTAINER_NAME}
均可
查看容器状态
1
docker ps | grep ${CONTAINER_ID}
查看容器日志
1
docker logs ${CONTAINER_ID}
交互式进入容器中
1
docker exec -i -t ${CONTAINER_ID} sh
查看容器底层信息
1
docker inspect ${CONTAINER_ID}
镜像打包
1
docker commit -m "message" -a "author" ${CONTAINER_ID} ${NEW_IMAGE_NAME}
标签
1
docker tag ${IMAGE_TAG} ${NEW_IMAGE_TAG}
推送至对应仓库
1
docker push ${REGISTRY_URL}/${IMAGE_NAME}
删除所有退出的容器
1
docker rm $(docker ps -a | grep Exit | awk '{ print $1 }')
删除所有名称为none的镜像
1
docker images | grep none | awk '{print $3} ' | xargs docker rmi
参考资料:
- 《容器与容器云》