docker

Docker部署Web单体应用

2017-06-29  本文已影响51人  10_01

前言

本文中描述的是一个典型的Web单体应用部署场景,不涉及任何业务系统,在具体项目中使用此部署方案时,针对所部署产品的不同,各个环节都存在可能的优化点。

目标

典型Web应用部署视图

典型Web应用部署视图

环境说明

hostname ip interface
HostA 10.0.0.1 ens33
HostB 10.0.0.2 ens33

在两台主机中分别安装CentOS系统,并在系统中安装Docker

镜像名称 镜像说明
10.0.0.222:5000/web-app:v1.0 可运行的应用系统
10.0.0.222:5000/custom-nginx:v1.0 自定义的Nginx

关于镜像的制作,请参考附录中的相关章节

关闭防火墙

#查看防火墙状态

firewall-cmd --state

停止防火墙

systemctl stop firewalld.service

禁止防火墙开机启动

systemctl disable firewalld.service

关闭SELINUX

setenforce 0
vi /etc/sysconfig/selinux

编辑/etc/sysconfig/selinux文件,将SELINUX设置为disabled

操作步骤

1、安装Linux系统

2、在系统中安装Docker

步骤1和步骤2可参考环境说明章节中的相关操作

3、部署高可用集群(可选)

在需要部署高可用的集群主机中,使用keepalived+ipvsadm,将多台物理机通过虚拟IP,提供给使用者一个唯一的IP地址,同时通过keepalived实现“单机房”内的高可用。多机房(异地多活)部署,建议增加域名解析

yum -y install ipvsadm keepalived
#开启IP数据包转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
#开启ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl enable ipvsadm
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
vi /etc/keepalived/keepalived.conf

<b>keepalived.conf 配置文件示例</b>(注意注释中需要修改的地方)

global_defs {
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    #一个MASTER,其它节点为BACKUP
    state MASTER
    #根据实际情况修改
    interface ens33
    #集群标识(确保在局域网内与其它集群不同),数值范围(0,255)
    virtual_router_id 123
    #优先级(确保相同集群中priority值的高低不同)
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass inspur
    }
    virtual_ipaddress {
        #虚拟IP
        10.0.0.100/16
    }
}
#虚拟IP
virtual_server 10.0.0.100 8090 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    persistence_timeout 0
    protocol TCP
    real_server 127.0.0.1 8090 {
        weight 100
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8090
        }
    }
}
systemctl start keepalived
systemctl enable keepalived

!!!如果您是在本地虚拟机中部署,并且真实部署环境使用的虚拟机,现在可以上传至真实运行环境了,后面的配置会涉及到主机的IP

4、部署Docker集群

若使用私有镜像中心,且镜像中心不支持HTTPS,则需要做如下修改

# 在pull主机中的”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入
{ "insecure-registries":["10.0.0.222:5000"] }
# 保存退出后,重启docker
systemctl restart docker

物理机集群中选择需要搭建Docker集群主机,使用Swarm对当前物理机集群中安装Docker的主机集群化。加入Swarm管理的Docker主机节点,将受Swarm调度、编排。
本示例中使用一个Swarm管理节点(Manager)和一个Swarm工作节点(Worker),在实际使用中,可以建立多个Manager节点,Manager同时也是Worker,Worker后期也可以动态指定为Manager

docker swarm init --advertise-addr 10.0.0.1
docker swarm join \
--token SWMTKN-11m0u46krm5khxd7a46ugyxbsg16nqse8r8r0fdprv1zkvm99kj2sq8vm12ho9gqi3hwowbunugw \
10.0.0.1:2377
#此处IP为Swarm管理节点的IP
docker node ls

5、部署应用

docker network create -d overlay myoverlay
docker service create --replicas 4 --name backend --network myoverlay --publish 8081:8080  10.0.0.222:5000/web-app:v1.0
docker service create --replicas 2 --name iNginx --network myoverlay --publish 8090:80  10.0.0.222:5000/custom-nginx:v1.0

6、Enjoy

访问10.0.0.100:8090/api-portal/,请求将会负载均衡在两台物理机中的2个Nginx实例,Nginx将请求转发,负载均衡至4个backend中。

后续运维

使用Docker Swarm可以支持如下运维场景:

docker service scale iNginx=3

附录

安装Docker

使用官方安装步骤,摘录如下:
下列摘录为Docker最初的文档版本,适用于测试环境中安装Docker,现在官网中看到的文档,增加了对生产环境的相关安装及操作步骤

You can install Docker CE on CentOS in just three steps.
Prerequisites
Docker CE is supported on CentOS 7.3 64-bit.
1. Set up the repository
Set up the Docker CE repository on CentOS:

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast

2. Get Docker CE
Install the latest version of Docker CE on CentOS:

sudo yum -y install docker-ce

Start Docker:

sudo systemctl start docker
sudo systemctl enable docker

3. Test your Docker CE installation
Test your installation:

sudo docker run hello-world

关于本文所涉及镜像的制作

10.0.0.222:5000/custom-nginx:v1.0

<b>default.conf 配置文件示例</b>(注意注释中需要修改的地方)

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://backend:8080;
        #此处backend对应创建Swarm服务时(docker service create)指定的名称
        #8080端口对应所创建的Swarm服务内部容器的服务端口
    }
}

操作步骤

#运行Nginx官方镜像
docker run -it nginx:1.12 /bin/bash
#修改Nginx的default.conf配置文件
cd /etc/nginx/conf.d/
mv default.conf default.conf.bak
touch default.conf
#写入配置文件
echo "server {" >> default.conf
echo "listen 80;" >> default.conf
echo "server_name localhost;" >> default.conf
echo "location / {" >> default.conf
echo "proxy_pass http://backend:8080;" >> default.conf
echo "}" >> default.conf
echo "}" >> default.conf
#退出容器
exit
#制作镜像
docker commit <容器ID> 10.0.0.222:5000/custom-nginx:v1.0
#上传镜像至私有镜像中心
docker push 10.0.0.222:5000/custom-nginx:v1.0

10.0.0.222:5000/web-app:v1.0

<b>Dockerfile 示例</b>

FROM tomcat:9.0.0.M21-jre8
MAINTAINER Zhaozy
COPY api-portal-1.0.0-SNAPSHOT.war /usr/local/tomcat/webapps/api-portal.war
docker build -t 10.0.0.222:5000/web-app:v1.0 .
docker push 10.0.0.222:5000/web-app:v1.0

使用CI(持续集成)+ Docker Compose,可以简化业务系统的部署,后续再整理“使用容器、CI、微服务等技术搭建适用于中小型研发团队的研发生态体系”相关的内容

上一篇 下一篇

猜你喜欢

热点阅读