使用docker一键部署项目环境
1.安装docker
2.安装docker-compose
3.拉取镜像启动容器
上传包含配置文件的压缩包,解压到要安装的目录如/home下,解压包中为编写好的docker-compose.yml文件,其中包含了多个容器的安装,可以选择把不需要安装的服务配置注释掉或者指定创建的容器
version: '3'
services:
redis:
image: redis:4.0.8
container_name: redis
restart: always
command: redis-server /etc/redis/redis.conf
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/hosts:/etc/hosts:ro
- ./redis/data:/data
- ./redis/conf/redis.conf:/etc/redis/redis.conf
- ./redis/conf:/etc/redis
network_mode: "host"
其中需要关注的主要为volumes,其中
- ./redis/data:/data
表示将宿主机的目录./redis/data挂载到容器中的/data目录,目的是将数据保存到宿主机上,因为容器重启后/data会清空。一般需要把宿主机的目录挂在到容器来实现数据持久化。
其中默认预置了一些持久化的目录和常用的配置文件,如:
redis:./redis/conf/
zookeeper:./zookeeper/zoo.cfg
fastdfs:./fastdfs/conf/
tomcat:./tomcat/webapps
决定好启动那些服务后则可以执行命令
docker-compose up -d container_name //更新并创建container_name
or
docker-compose up -d //更新并创建全部容器
此情况以上命令会自动拉取没有的镜像到本地,当服务器无法访问外网时,需要从本上传要部署的镜像,然后执行
docker load -i xxxx.tar
启动时会优先使用本地镜像,可通过以下命令确认容器情况
docker ps //查询已启动容器
docker ps -a //查询全部容器
docker logs imageId/container_name //查询日志
docker exec -it imageId/container_name bash //进入容器内部
docker exec -it imageId/container_name + 容器内部执行的命令 //容器内部执行命令
4.部署集群需要修改的配置
例如要部署三台机器的ip为:
A) 172.0.0.1 (主)
B) 172.0.0.2 (从)
C) 172.0.0.3 (从)
- reidis哨兵模式
其中只需要在两个从服务器的redis.conf中增加一行
slaveof 172.0.0.1 6379
##如果master设置了密码则需要加一行
##masterauth <master-password>
-
以上配置实现了主从模式
开启哨兵模式需要将docker-compose.yml中service下的sentinel注释打开,执行
docker-compose up -d sentinel //更新并创建sentinel
or
docker-compose up -d //更新并创建全部容器
- 然后修改三台服务器中的sentinel.conf以下内容
sentinel monitor master 172.0.0.1 6379 2
-
master为自定义的主节点名称
172.0.0.1为主服务器ip
2为设定当有几个从服务器认为master不可用时会更换master - fastdfs
需要修改三台服务器中storage.conf和client.conf的以下内容
tracker_server=172.0.0.1:22122
tracker_server=172.0.0.2:22122
tracker_server=172.0.0.3:22122
- zookeeper
需要修改三台服务器中zoo.cfg的以下内容
server.1=172.0.0.1:2888:3888
server.2=172.0.0.2:2888:3888
server.3=172.0.0.3:2888:3888
其中server.X中的X为自定义的服务器id,对应的,需要分别修改各自服务器下的docker-compose.yml的zookeeper路径下增加environment:ZOO_MY_ID: 1最终结果为:
zookeeper:
image: zookeeper
restart: always
environment:
ZOO_MY_ID: 1 //
volumes:
- ./zookeeper/zoo.cfg:/conf/zoo.cfg/datalog
container_name: 'zookeeper'
network_mode: "host"
其中ZOO_MY_ID的值应该为前面修改的zoo.cfg中ip所对应的服务器id,即172.0.0.1的ZOO_MY_ID为1,172.0.0.2为2,172.0.0.3为3