Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
Zookeeper镜像下载
docker pull zookeeper
下载dubbo-admin
官网dubbo-admin地址apache/incubator-dubbo-ops,下载后切换branchgit checkout master
(不切master没有dubbo-admin)
编译dubbo-admin
修改application.properties
vim src/main/resources/application.properties
使用下面三种方式修改都可以
#集群方式
#dubbo.registry.address=zookeeper://192.168.199.191:2181?backup=192.168.199.192:2181,192.168.199.193:2181
#单机IP方式
#dubbo.registry.address=zookeeper://172.19.165.222:2181
#容器service方式
dubbo.registry.address=zookeeper://zk:2181
注意,使用容器service方式,需要在docker-compose.yml配置中link到相关容器。
修改完后就可以打包了
mvn clean package -Dmaven.test.skip=true
将打包的jar文件复制到指定目录,如下:
#创建docker dubbo dubbo-admin文件
mkdir /usr/local/docker
mkdir /usr/local/docker/dubbo
mkdir /usr/local/docker/dubbo/dubbo-admin
#进入dubbo-admin
cd /usr/local/docker/dubbo/dubbo-admin
#将编译的 dubbo-admin-0.0.1-SNAPSHOT.jar 文件复制到当前目录
cp dubbo-admin/target/dubbo-admin-0.0.1-SNAPSHOT.jar .
接着编写Dockerfile
vim Dockerfile
FROM java:8
#作者
MAINTAINER xxx
# 注意 此处 EVN 设置注册中心地址
#ENV DUBBO_IP_TO_REGISTRY 172.19.165.222 #服务名称/IP地址
#ENV DUBBO_PORT_TO_REGISTRY 12345 #端口(默认不需要修改端口)
#挂载点
VOLUME /tmp
add dubbo-admin-0.0.1-SNAPSHOT.jar app.jar
#命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
生成镜像
docker build --rm -t dubbo-admin:1.0 .
创建docker-compose.yml 文件
version: '3'
services:
zoo1:
image: zookeeper:3.4 #zk镜像版本
container_name: zoo1
restart: always
hostname: zoo1 #容器名
ports:
- "2181:2181" #将左端口绑定到右端口上
environment: #配置zk集群环境变量
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
image: zookeeper:3.4
container_name: zoo2
restart: always
hostname: zoo2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
zoo3:
image: zookeeper:3.4
container_name: zoo3
restart: always
hostname: zoo3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
dubbo-admin:
image: dubbo-admin:1.0
container_name: dubbo-admin
links:
- zoo1:zk #配置容器link名,可理解为别名
depends_on:
- zoo1
- zoo2
- zoo3
ports:
- 7001:7001 #主机端口:容器端口
restart: always
注意,上面的0.0.0.0是表示可用主机IP访问且一定要这样错开。
注意service执行顺序,使用depends_on
配置link名称后,则application.properties中配置的zk路径就能打开对应的容器并注册。
测试时右端(容器)口只能用2181原因是容器通信的内部端口要与dubbo-admin一致
一键启动服务
先不要使用后台进程启动,看服务是否正常。
#Create and start containers
docker-compose up
打开服务http://IP:7001 登录,若Ok则以后台进程运行。
docker-compose up -d
#stop services
docker-compose stop
#start services
docker-compose start
查看容器日志
首先切到docker-compose.yml文件的目录,执行docker-compose ps
可以看到容器的名称,然后根据名称查看对应的日志
docker logs -ft --tail 100 dubboadmin_dubbo-admin_1
-f是跟踪日志输出 -t是输出时间 --tail是输出结尾n行
修改zk默认端口
当启动镜像时会看到以下日志:
[root@hadoopslave3 zk]# docker logs -ft --tail 100 zoo1
2018-11-21T03:24:23.275393000Z ZooKeeper JMX enabled by default
2018-11-21T03:24:23.276138000Z Using config: /conf/zoo.cfg
2018-11-21T03:24:23.675101000Z 2018-11-21 03:24:23,671 [myid:] - INFO [main:QuorumPeerConfig@136] - Reading configuration from: /conf/zoo.cfg
2018-11-21T03:24:23.685718000Z 2018-11-21 03:24:23,685 [myid:] - INFO [main:QuorumPeer$QuorumServer@184] - Resolved hostname: zoo3 to address: zoo3/172.18.0.4
2018-11-21T03:24:23.686546000Z 2018-11-21 03:24:23,685 [myid:] - INFO
从日志上可以看到zk启动时读取配置文件的位置是/conf/zoo.cfg
,若想改变配置文件内容,可以在本地挂载一个文件即可,如下:
version: '3'
services:
zoo1:
image: zookeeper:3.4
restart: always
container_name: zoo1
hostname: zoo1
volumes:
- ./zoo.cfg:/conf/zoo.cfg
ports:
- "2183:2186"
此时镜像启动时就会读取本地配置文件而不是镜像里的原文件了-_-
发布到docker hub
- 查看images
[root@localhost disconf]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dubbo-admin 1.0 dac91b8ba273 3 days ago 675MB
- 注册一个docker hub账号
官网地址https://hub.docker.com/ - 给image打上标签
#docker tag image:tag dockerID/imageName:version
docker tag dubbo-admin:1.0 mapbar/dubbo-admin:latest
- 登录你的docker hub
[root@localhost war]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: mapbar
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
- 上传到docker hub
docker push mapbar/dubbo-admin:latest
docker端口映射异常
[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2186:ZooKeeperServer@922] - Refusing session request for client
被这个问题折腾了半天,还费力改了容器通信端口及zk默认端口(容器通信端口不会与宿主机冲突),还是报错,结果重启docker服务(service docker restart)一切ok。
学习交流群:64691032