实现docker-compose keepalived nginx

1. 整体流程

整体流程如下所示:

pie
    title 实现docker-compose keepalived nginx
    "创建docker-compose文件" : 40
    "配置keepalived" : 30
    "配置nginx" : 30

2. 创建docker-compose文件

首先,我们需要创建一个docker-compose.yml文件,用于定义我们的服务和网络。

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    networks:
      - frontend
  keepalived:
    image: osixia/keepalived:2.0.20
    cap_add:
      - NET_ADMIN
    environment:
      - KEEPALIVED_STATE=MASTER
      - KEEPALIVED_VIRTUAL_IPS=192.168.0.100
      - KEEPALIVED_PASSWORD=keepalived
    volumes:
      - ./keepalived.conf:/etc/keepalived/keepalived.conf
    networks:
      - frontend
networks:
  frontend:

在上面的docker-compose.yml文件中,我们定义了两个服务:nginx和keepalived。使用nginx:latest作为nginx服务的镜像,并将80端口映射到主机的80端口。使用osixia/keepalived:2.0.20作为keepalived服务的镜像,并添加了NET_ADMIN权限。我们还定义了一个frontend网络,用于连接nginx和keepalived服务。

3. 配置keepalived

接下来,我们需要创建keepalived.conf文件,用于配置keepalived。

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalived
    }
    virtual_ipaddress {
        192.168.0.100
    }
}

在上面的keepalived.conf文件中,我们定义了一个名称为VI_1的vrrp_instance,将其状态设置为MASTER。我们指定了eth0作为网络接口,设置了虚拟路由器ID为51,优先级为100,并设置了通告间隔为1秒。我们还指定了认证类型为PASS,并设置了认证密码为keepalived。最后,我们定义了虚拟IP地址为192.168.0.100。

将上述keepalived.conf文件保存为keepalived.conf。

4. 配置nginx

最后,我们需要创建一个nginx配置文件default.conf,用于配置nginx。

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

在上面的default.conf文件中,我们定义了一个监听80端口的服务器块。将请求转发到/usr/share/nginx/html目录下,并设置了index.html和index.htm作为默认索引文件。

将上述default.conf文件保存为default.conf。

总结

通过以上步骤,我们成功地实现了docker-compose keepalived nginx。首先,我们创建了一个docker-compose.yml文件,定义了nginx和keepalived服务,并设置了网络连接。然后,我们创建了keepalived.conf文件,配置了keepalived的相关参数。最后,我们创建了default.conf文件,配置了nginx的相关参数。

这样,我们就可以使用docker-compose up命令来启动我们的服务,实现了docker-compose keepalived nginx的目标。