docker部署一个服务将会有多种方式,本文将一步步介绍。
- 创建应用镜像(简单的取队列发邮箱的项目,见:https://github.com/JThink/SkyEye/tree/master/skyeye-alarm)
- Dockerfile
- Dockerfile
# build the base image: jdk
# this is the docker file, use the ubuntu 14.04-jdk7
# VERSION 1
# Author: jthink
# the basic image
FROM 192.168.xx.xx:5000/ubuntu:14.04-jdk7
# maintainer
MAINTAINER jthink xxx@xxx.com
# copy the file
RUN mkdir -p /home/deploy
RUN mkdir -p /opt/xxx/xxx-config/monitor-center/bane
ADD ./bane-0.1.0.tar /home/deploy
ADD ./bane.properties /opt/xxx/xxx-config/monitor-center/bane
COPY run.sh /run.sh
RUN chmod +x /run.sh
# CMD to start
CMD ["/run.sh"]
使用基础的ubuntu 14.04-jdk7基础镜像,里面包含jdk1.7_79的jdk,在上一篇文章中介绍的基础镜像创建(见:
http://blog.csdn.net/jthink_/article/details/70229278)
容器中创建相应的文件夹,部署:/home/deploy;配置文件:/opt/xxx/xxx-config/monitor-center/bane
拷贝相应的部署包、配置文件和执行脚本
关于配置文件是否应该copy,如果项目中使用了配置中心,那么就不需要这一步骤,很方便,市面上的配置中心项目(百度的disconf,携程的apollo)
-
- 执行脚本run.sh
- 执行脚本run.sh
#!/bin/bash
cd /home/deploy/bane-0.1.0
source /etc/profile.d/java.sh
nohup bin/bane &
tail -f
/opt/xxx/xxx-config/monitor-center/bane
/bane.properties
-
- 上传镜像到私有仓库
sudo docker build -t 192.168.xx.xx:5000/monitor-center_bane:0.1.0 .
sudo docker push 192.168.xx.xx:5000/monitor-center_bane:0.1.0
- 上传镜像到私有仓库
- 应用部署
- 简单部署
- sudo docker run -d --name bane 192.168.88.73:5000/monitor-center_bane:0.1.0
- 日志挂载部署
镜像内的应用日志处理一般是输出到标准输出,然后再用flume或者其他工具来收集(因为以后使用集群的方式来部署,根本不知道这个应用部署在docker的哪台几点上),这个以后介绍,主要用的是SkyEye这个项目,github地址:https://github.com/JThink/SkyEye
我们这里使用简单的方式将日志挂在到宿主机
sudo docker run -d --name bane -v /home/xxx/docker/image/bane/logs:/home/deploy/logs 192.168.xx.xx:5000/monitor-center_bane:0.1.0
- swarm集群部署
这样的部署能够动态的部署多个实例(好处可以研究下docker swarm模式)- docker service create --with-registry-auth --replicas 3 --name bane --update-delay 10s 192.168.xx.xx:5000/monitor-center_bane:0.1.0
docker service ps bane
可以看到bane这个项目在集群中部署了3个实例 - 日志挂载部署
和上面一样,将应用实例的日志挂载到宿主机
docker service create --with-registry-auth --replicas 3 --name bane --update-delay 10s --mount type=bind,source=/tmp/logs/bane,destination=/home/deploy/logs 192.168.xx.xx:5000/monitor-center_bane:0.1.0
宿主机上的目录要自己建
如果服务特别多,一组服务提供一个应用,那么我们需要用容器的编排工具来进行部署,以后再介绍
- docker service create --with-registry-auth --replicas 3 --name bane --update-delay 10s 192.168.xx.xx:5000/monitor-center_bane:0.1.0
- 简单部署