之前已经讲过一些基本的docker使用跟docker原理,现在根据一个经典的**”负载均衡+双APP+3redis”**(一主二从,读写分离)的结构来实现一个简单的web应用. 急速构建一个架构,以此来检验docker的实战性能.
参考资料来自–浙大的docker容器与容器云 <书>. 完整了解直接参考原书即可,这里只做实战笔记以及体会.
1.下载镜像并链接它们
这是一个带基本架构的web app应用栈,测试环境先在一台本地主机搭建,实际之后会附上真实的分布式架构的实践.(处理跨主机通信等问题),基于此 ,先采用docker 的 –link方式去链接不同的容器.
docker pull xxx下载ubuntu,redis,haproxy(nginx同理),django最新的一批镜像.你会发现速度非常快,就像用U盘在拷贝数据一样.(几十s)
1
2
3
4
5
6
7#完成后如下,可以看到除了django比较大,其他容器还是很小的
root@Ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 14f60031763d 40 hours ago 120MB
redis latest a1b99da73d05 7 days ago 106MB
haproxy latest 042566f5c283 11 days ago 136MB
django latest eb40dcf64078 7 months ago 436MB根据 redis_master –> redis_slave –> app –> HAproxy(外网访问) 的顺序启动容器,并关联它们.
1
2
3
4
5
6
7
8
9
10
11
12
13#附:1.ctrl+p-->ctrl+q 退出当前容器到后台,不能直接exit
#2.如何再次进入这个后台运行的容器
docker attach imageID #前三位
#完成全部链接之后如下所示
# root@Ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af11c297d366 haproxy "/docker-entrypoin..." 20 seconds ago Up 19 seconds 0.0.0.0:7777->7777/tcp HAproxy
1947feb69ef1 django "/bin/bash" 2 minutes ago Up 2 minutes app2
e26a1d0a0acf django "/bin/bash" 2 minutes ago Up 2 minutes app1
1d87deb96587 redis "docker-entrypoint..." 5 minutes ago Up 5 minutes 6379/tcp redis_slave2
1e06839fec38 redis "docker-entrypoint..." 5 minutes ago Up 5 minutes 6379/tcp redis_slave1
0cc44f153dc6 redis "docker-entrypoint..." 14 minutes ago Up 14 minutes 6379/tcp redis_master
2.配置redis
由启动顺序来以此配置,所以最先配置redis_master.
因为容器里面不需要vim或者其他文本编辑器,这时候要编辑配置文件,直接使用volume挂载到主机本身,然后主机创建/修改文件即可***共享数据.***省去了在容器安装各种工具的麻烦
1 | $ docker inspect --format "{{ .Volumes }}" |
