Docker应用栈
阅读《docker容器与容器云》笔记
应用栈结构视图
所需docker镜像
- docker pull ubuntu
- docker pull redis
- docker pull django
- docker haproxy
注:免sudo使用docker
- 如果没有docker用户组,则添加一个docker用户组
sudo groupadd docker
- 将当前用户加入该 group 内。
sudo gpasswd -a ${USER} docker
-link
选项用法
通过`--link`选项能够进行容器间安全的通信,避免容器的IP端口暴露到外网,并且可以防止当容器重启后IP地址变化所导致的访问失败问题。原理类似与DNS服务器的域名和地址映射。在容器的`/etc/hosts`文件中可以看到添加的IP记录。语法格式如下:
docker run --link redis-master:master --name ubuntu-console ubuntu /bin/bash
需要注意的是,redis-master容器在设置--link
之前启动。上条语法表示,通过docker run
用ubuntu镜像创建容器,并且命名为ubuntu-console。再将当前容器--link
到redis-master,并给redis-master取别名master。
容器节点启动
启动redis
# 启动redis docker run -it redis-master redis /bin/bash docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash
启动Django容器,即应用
# django docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django /bin/bash
启动HAProxy
docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash
注:启动django时,遇到不能启动的情况。后查阅资料表明是ubuntu位数不对引起的,不支持ubuntu 32位系统。
容器节点配置
由于容器轻量化设计,所以容器缺乏相应的文本编辑工具,如
vim
、gedit
都不存在,这时利用volume来实现文件的创建。上述容器启动时的-v
参数用于挂在volume,实现主机和容器间共享数据。在共享区的文件,在主机编辑好,而后在容器中使用。docker inspect
命令查看容器信息。docker inspect 容器名(如redis-master)
:获取容器全部信息。docker inspect 容器名 | grep Source
:获取共享目录在主机的位置。
Resis Master 主数据库容器节点配置
配置之前需要一个redis.conf的配置文件,这个可以在网站下载(链接)
Redis主数据库需要修改模板文件中的如下几个参数:
- daemonize yes
- pidfile /var/run/redis.pid
- bind 0.0.0.0
注:在
vim
文本编辑器中可用/
(从上到下搜索)、?
(从下到上搜索)。(/daemonize
)完成redis.conf文件修改,切换到redis-master容器,执行如下步骤:
cd /data cp redis.conf /usr/local/bin cd /usr/local/bin redis-server redis.conf
Redis Slave 从容器
配置文件redis.conf修改如下:
- daemonize yes
- pidfile /var/run/redis.pid
- slaveof master 6379
启动方式和主数据库类似。
数据库容器节点测试
- redis-master容器命令行界面输入
redis-cli
,进入Redis的客户端模式 - set master value ,这是redis数据库的设置键值模式,设置键:master,值:value。
- get master ,获取键:master 的值,客户端界面应该返回值:value
- 在redis-slave1容器命令行界面输入
redis-cli
,在输入get master
取值,如果返回value,则配置成功。
注:
- 在Redis客户端,输入
info
可查当前数据库的配置信息。(可以看到slave从数据库个数,作为验证配置是否正确) - 当检查redis.conf配置都正确,但测试通不过,可尝试在关闭Redis,在重新启动。
# redis-master 在/usr/local/bin/目录 redis-cli shutdown redis-server redis.conf
- redis-master容器命令行界面输入
资料:
- 书籍《docker 容器与容器云》
- Herbert_Kwok的容器与容器云阅读笔记
- redis.conf文件