原创文章,转载请注明出处。
本文是基于ubuntu14.04搭建的dosker,tomcat配置是在docker容器外面(为了方便查看日志)使用的是docker启动挂载,该tomcat工程依赖于docker容器中的java8,最后是启用多个容器做的负载均衡。
内核要求:
由于LXC的一个bug,Docker在3.8内核下面运行最佳。Ubuntu的Precise版本内置的是3.2版本的内核,因此我们首先需要升级内核。安装下面的步骤可以升级到3.8内核,并内置AUFS的支持。同时还包括了通用头文件,这样我们就可以激活依赖于这些头文件的包,比如ZFS,VirtualBox的增强功能包。
# install the backported kernel
sudo apt-get update
sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
# reboot
sudo reboot
安装Docker:
Docker有deb格式的安装包,安装起来非常的容易。首先添加Docker库的密钥。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
然后把Docker的库添加到apt的源列表中,更新并安装lxc-docker包。
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
安装过程中会有一个警告信息,输入"yes"继续安装即可。安装成功之后,可以下载ubuntu镜像并启动一个镜像来验证安装是否正常。
sudo docker run -i -t ubuntu /bin/bash
成功运行之后,输入exit退出即可。
首先把工程放到本地/software/目录,如果需要把tomcat7和java的tar包放到这个目录,一并挂载到容器中
tomcat7下载地址:
http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.63/bin/apache-tomcat-7.0.63.tar.gz
sudo docker run -itv /data/:/data/ d2a0ecffe6fa /bin/bash
这条命令比较长,我们稍微分解一下,其实包含以下三个部分:
docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,
例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
首先安装sshd
sudo apt-get update && apt-get install -y openssh-server
sudo mkdir -p /var/run/sshd
sudo echo 'root:oooooppppp' | chpasswd#修改root登录密码
sudo sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo sed 's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
sudo echo "export VISIBLE=now" >> /etc/profile
安装tomcat7的依赖环境java8
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install -y oracle-java8-installer oracle-java8-set-default
安装完修改工程的tomcat7的配置,(也可以直接在宿主机修改/software/tomcat7/conf/server.xml)
exit退出
生成images
sudo docker commit 0f665df58cea ubuntu/javaweb:1.0
启动容器
sudo docker run -v /software/:/data/ -d -p 22 -p 80:8080 --name javaweb 860c381529d6 /bin/sh -c "/data/tomcat7/bin/startup.sh && /usr/sbin/sshd -D"
-d:表示"守护模式"执行,后台运行
-p:表示宿主机与容器的端口映射,<xxx:xxx>前者为宿主机端口,后者为容器端口(如果不指定宿主机端口会默认分配)
--name 表示容器名称
导出容器
sudo docker ps -a #查看container_id
sudo docker export <container_id> > ubuntu.tar
导入容器镜像
sudo docker load --input ubuntu.tar
or
cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
因为tomcat7是用挂载目录里面的,启动之前请务必根据对应目录挂载tomcat7的目录
搭建LVS+keepalived使多个docker之间负载
安装ipvsadm keepalived
sudo apt-get install ipvsadm keepalived
添加keepalived的配置文件
sudo vim /etc/keepalived/keepalived.conf #该文件默认是没有的
globel_defs{
notification_email{
yangqingbin@gfan.com #指定keepalived在切换时需要发送到的email对象,一行一个
}
notification_email_from sns_lvs@gmail.com #指定发件人
smtp_server 127.0.0.1 #指定SMTP服务器地址
smtp_connection_timeout 30 #指定SMTP连接超时时间
router_id easyfun-106 #设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1{
state MASTER #指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 #设置实例绑定到那个网卡
virtual_router_id 51 #VRID标记(0~255),主备要保持相同
priority 150 #优先级,MASTER要高于BACKUP的优先级(至少50)
advert_int 3 #检查间隔时间,默认1秒
authentication {
auth_type PASS #指定要使用那一种认证(PASS|AH)
auth_pass 123456 #指定要使用的密码字符串
}
virtual_ipaddress {
192.168.1.70 #定义虚拟IP(VIP),可多设,每行-个
}
}
#定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.70 8081 {
delay_loop 1 #设置健康检测时间,单位为秒
lb_algo wlc #设置LVS调度的算法rr|wrr|lc|wlc|lblc|lblcr|sh|dh
lb_kind NAT #设置LVS实现负载的机制,(NAT|TUN|DR)三个模式
persistence_timeout 3 #会话保持时间
protocol TCP #使用的协议
real_server 192.168.1.108 8001 { #指定real_server1的ip地址
weight 3 #配置节点权值,数字越大权重越高
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 10 #连接远程真实服务器超时时间(秒)
nb_get_retry 3 #最大重试次数
delay_before_retry 3 #连续两次重试的延迟时间(秒)
}
}
real_server 192.168.1.108 8002 { #指定real_server1的ip地址
weight 3 #配置节点权值,数字越大权重越高
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 10 #连接远程真实服务器超时时间(秒)
nb_get_retry 3 #最大重试次数
delay_before_retry 30 #连续两次重试的延迟时间(秒)
}
}
real_server 192.168.1.108 8003 { #指定real_server1的ip地址
weight 3 #配置节点权值,数字越大权重越高
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 10 #连接远程真实服务器超时时间(秒)
nb_get_retry 3 #最大重试次数
delay_before_retry 30 #连续两次重试的延迟时间(秒)
}
}
}
保存退出
#注意要修改该文件中的ip和端口
sudo service keepalived start #启动keepalived
sudo ipvsadm -L -n #查看real_server状态
sudo ipvsadm -L -c #查看real_server的连接状态