docker的设计理念是希望用户能够保证一个容器只运行一个进程,即只提供一种服务。然而对于用户而言,大多数时候单一容器是无法满足需求的;通常来说,需要利用多个容器,分别提供不同的服务,并在不同的容器间互连通信,以形成一个docker集群,来完成特定的功能需求。
应用栈结构
HAproxy是负载均衡代理节点;redis的非关系型数据库,这里由一个主数据库节点和两个从数据库节点组成;APP1和APP2是应用节点,本例中是使用python语言和Django架构设计的访问数据库的基础Web应用。
获取应用栈中各节点所需镜像
sudo docker pull django
sudo docker pull haproxy
sudo docker pull redis
各容器节点启动
注意节点的启动顺序为:
redis-master -> redis-slave -> APP -> HAProxy
# 启动redis容器
# --link选项能够进行容器间安全的交互通信,使用格式是name:alias(名字:别名),该参数可多次使用
# 来表示启动的当前容器要连接到哪个容器上
sudo docker run -it --name redis-master redis /bin/bash
sudo docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash
sudo docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash
# 启动django容器,~/Projects/Django/App1
# -v 参数用作目录挂载 宿主机目录(若不存在则自动创建):容器目录
sudo docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash
sudo docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django /bin/bash
# 启动haproxy容器
sudo docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash
查看容器启动情况(一个代理容器,两个应用容器,三个数据库容器)
各节点配置
主数据库节点配置
redis-master主数据库容器节点配置
先查看容器所挂载volume的情况
docker inspect --format "{
{.Mounts}}" [CONTAINER ID]
有如下样例输出:
可得知容器redis-master挂载在宿主机/var/lib/docker/volumes/7a50ae084ffe07409b5a3f4a97c097c87b9c1ba58c6ff4c8dcde961304d5c057/_data目录下,容器中的目录是/data
使用docker inspect [container id]可查看容器的详细信息
注意:若主机未安装相应版本redis。通过上一步docker inspect命令可以看到redis镜像的redis版本为6.0.5