Home > Operation and Maintenance > Nginx > How to use Docker's Compose to implement nginx load balancing

How to use Docker's Compose to implement nginx load balancing

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2023-05-11 16:13:06
forward
1343 people have browsed it

Using docker network management and container ip settings as basic knowledge to implement nginx load balancing

View all docker networks

1

2

3

4

5

6

7

8

9

10

11

12

13

docker network ls

 

/*

network id     name         driver       scope

b832b168ca9a    bridge        bridge       local

373be82d3a6a    composetest_default  bridge       local

a360425082c4    host         host        local

154f600f0e90    none         null        local

 

*/

 

// composetest_default 是上一篇介绍compose时,docker-compose.yml文件所在的目录名,

// 所以,用docker-compose创建的容器会默认创建一个以目录名为网络名的网络,并且是dridge(桥接)类型

Copy after login

Specify the container ip address

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

version: "3"

services:

  web1:

    container_name: web1

    image: "centos:httpd"

    ports:

      - "8080:80"

    privileged: true

    volumes:

      - "/app/www/web1/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: 192.169.0.3

  web2:

    container_name: web2

    image: "centos:httpd"

    ports:

      - "8081:80"

    privileged: true

    volumes:

      - "/app/www/web2/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: 192.169.0.2

networks:

  nginx-lsb:

    driver: bridge

    ipam:

      config:

        - subnet: 192.169.0.0/16

Copy after login

Use docker-compose to start the container

1

docker-compose up -d

Copy after login

Check whether the container is started and confirm whether the network nginx-lsb is created

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// 可以查看当前docker-compose.yml配置的容器组里的容器状态

docker-compose ps

 

docker network ls

 

/*

network id     name          driver       scope

b832b168ca9a    bridge         bridge       local

373be82d3a6a    composetest_default   bridge       local

de6f5b8df1c8    composetest_nginx-lsb  bridge       local

a360425082c4    host          host        local

154f600f0e90    none          null        local

*/

 

// 创建了nginx-lsb网络,命名是容器组项目的 文件名开头_网络名

Copy after login

View the details of the network nginx-lsb

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

docker network inspect composetest_nginx-lsb

 

// 详情里面可以看到使用这个网络的每个容器的ip

 

如:

 

/*

...

 "containers": {

      "039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {

        "name": "web2",

        "endpointid": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",

        "macaddress": "02:42:c0:a9:00:02",

        "ipv4address": "192.169.0.2/16",

        "ipv6address": ""

      },

      "437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {

        "name": "web1",

        "endpointid": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",

        "macaddress": "02:42:c0:a9:00:03",

        "ipv4address": "192.169.0.3/16",

        "ipv6address": ""

      }

    },

...

*/

Copy after login

Use env_file environment file:

It can be simply understood as: define variables in docker-compose.yml, and reference variables in external .env files

Official document address:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

// 还是在composetest目录中定义个 .env文件,用来存放变量

web1_addr=192.169.0.2

web2_addr=192.169.0.3

 

// 修改docker-compose.yml文件,加入变量定义

version: "3"

services:

  web1:

    container_name: web1

    image: "centos:httpd"

    ports:

      - "8080:80"

    privileged: true

    volumes:

      - "/app/www/web1/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: ${web1_addr}

  web2:

    container_name: web2

    image: "centos:httpd"

    ports:

      - "8081:80"

    privileged: true

    volumes:

      - "/app/www/web2/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: ${web2_addr}

networks:

  nginx-lsb:

    driver: bridge

    ipam:

      config:

        - subnet: 192.169.0.0/16

Copy after login

Restart the composetest project, and check the network details to confirm whether the container ip is set successfully

1

2

3

4

5

// 重新启动composetest项目

docker-compose up -d

 

// 查看网络详情

docker network inspect composetest_nginx-lsb

Copy after login

Add an nginx server as a load balancing server in the composetest project

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

// 在.env文件里添加一个变量 nginx_lsb

web1_addr=192.169.0.2

web2_addr=192.169.0.3

nginx_lsb=192.169.0.100

 

// 修改docker-compose.yml文件,加入变量定义

version: "3"

services:

  nginx-lsb:

    container_name: nginx-lsb

    image: "centos:nginx"

    ports:

      - "8000:80"

    privileged: true

    volumes:

      - "/app/nginx/nginx.conf:/etc/nginx/nginx.conf"

    networks:

      nginx-lsb:

        ipv4_address: ${nginx_lsb}

  web1:

    container_name: web1

    image: "centos:httpd"

    ports:

      - "8080:80"

    privileged: true

    volumes:

      - "/app/www/web1/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: ${web1_addr}

  web2:

    container_name: web2

    image: "centos:httpd"

    ports:

      - "8081:80"

    privileged: true

    volumes:

      - "/app/www/web2/:/var/www/html/"

    command: ['/usr/sbin/init']

    networks:

      nginx-lsb:

        ipv4_address: ${web2_addr}

networks:

  nginx-lsb:

    driver: bridge

    ipam:

      config:

        - subnet: 192.169.0.0/16

 

// 重新启动composetest项目

docker-compose up -d

Copy after login

Modify the nginx.conf configuration file, configure load balancing

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

upstream mydocker {

  server 192.169.0.2;

  server 192.169.0.3;

}

 

server {

  listen 80;

  server_name mydocker;

  location / {

    proxy_set_header host $host;

    proxy_set_header x-real-ip $remote_addr;

    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

    proxy_buffering off;

    proxy_pass http://mydocker;

  }

}

Copy after login

Restart nginx-lsb, load the configuration file

1

docker-composer restart nginx-lsb

Copy after login

Visit http://server ip address:8000, test server load balancing!

The above is the detailed content of How to use Docker's Compose to implement nginx load balancing. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
About docker
From 1970-01-01 08:00:00
0
0
0
docker install phpstudy
From 1970-01-01 08:00:00
0
0
0
Deploy snmp environment in docker
From 1970-01-01 08:00:00
0
0
0
docker: invalid reference format
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template