在拜读浙江大学SEL实验室著作的《Docker容器与容器云》第二版时,自己按照书中在自己的虚拟机中搭建了一个由docker容器构建的应用栈以及部署了对其的监控。由于docker hub中镜像版本的的更迭,按照书中的步骤进行部署,不免会遇到一些问题,在此记录下部署过程也分享下部署过程中踩过的坑。
搭建的环境是:
1:虚拟机工具是VMware Workstations
2:操作系统是CentOS Linux release 7.5.1804 (Core)
3:linux内核是3.10.0-862.el7.x86_64
整个部署过程可以分为三部分:
1.安装docker
2.Haproxy+Django+Redis搭建应用栈
3.Cadvisor+Consul+Prometheus+Grafana部署监控
以下操作均在root用户下进行,其他用户请注意授予sudo权限
第一部分:安装docker
执行以下命令:
yum install docker
回显信息:
执行命令:
[root@localhost ~]# systemctl start docker
查看docker基本信息:
[root@localhost ~]# docker info
回显信息:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.1
...
docker安装完毕!
第二部分:Haproxy+Django+Redis搭建应用栈
- 准备工作
1.拉取最新版本的镜像,执行以下命令:
[root@localhost ~]# docker pull redis
[root@localhost ~]# docker pull django
[root@localhost ~]# docker pull haproxy
2.查看拉取的镜像,执行以下命令
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/haproxy latest d23194a3929a 5 days ago 72 MB
docker.io/redis latest 5d2989ac9711 2 weeks ago 95 MB
docker.io/django latest eb40dcf64078 2 years ago 436 MB
3.创建容器挂载点目录,之后要给容器挂在文件目录,书中没有提前挂载,在启动容器时,如果不使用-v参数指定挂载目录,docker会默认自己指定挂载目录。执行以下命令:
[root@localhost ~]# cd /home
[root@localhost home]# mkdir docker
[root@localhost home]# ls
docker
[root@localhost home]# cd docker/
[root@localhost docker]# mkdir redis django haproxy
[root@localhost docker]# ls
django haproxy redis
- 应用栈数据库节点配置
数据库配置包括主数据库和从数据库的配置,分别创建主数据库和从数据库的文件挂载点,执行以下命令:
[root@localhost ~]# cd /home/docker/redis
[root@localhost redis]# mkdir master slave1 slave2
1.master数据库的配置如下:
启动redis-master容器,执行以下命令:
[root@localhost redis]# docker run -it --name redis-master -v /home/docker/redis/master/:/data redis
--name 给容器进行命名,-v指定文件挂载目录
得到结果:
root@e54206d487ed:/data#
这个终端是容器虚拟出来的终端。
从容器终端中退出,使用快捷键Ctrl+D,或者执行以下命令:
root@e54206d487ed:/data# exit
切换到redis-master容器挂载的文件目录,创建redis的配置文件,文件名字是redis.conf配置文件内容,按照网上的模板书写就行,注意修改其中的参数。
[root@localhost ~] cd /home/docker/redis/master
[root@localhost ~] vim redis.conf
修改的参数为:
daemonize yes 注意是将yes修改为no,使Redis在容器前端运行,在前端运行时无法进行其他操作,可以再开一个终端。
pidfile /var/run/redis.pid
再次进入redis-master虚拟终端中,切换到容器中的volume目录:
[root@localhost master]# docker exec -it redis-master /bin/bash
root@e54206d487ed:/data# cd /data
复制启动配置文件从/data到redis工作目录/usr/local/bin下,执行以下命令:
root@e54206d487ed:/data# cp /data/redis.conf /usr/local/bin/
root@e54206d487ed:/data# ls
redis.conf
root@e54206d487ed:/data# cp /data/redis.conf /usr/local/bin/
root@e54206d487ed:/data# cd /usr/local/bin/
root@e54206d487ed:/usr/local/bin# ls
docker-entrypoint.sh gosu redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis.conf
启动redis-master服务
root@e54206d487ed:/usr/local/bin# redis-server redis.conf
31:C 14 Jan 2019 06:02:44.717 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
31:C 14 Jan 2019 06:02:44.717 # Redis versio