docker的使用

一.安装

1.脚本方式安装

获取安装脚本

bash 复制代码
curl -fsSL https://get.docker.com -o get-docker.sh

2.运行安装脚本

bash 复制代码
sh get-docker.sh

3.启动docker并开启自启

bash 复制代码
systemctl restart docker
systemctl status docker
systemctl enable docker

4.查看docker信息

bash 复制代码
docker info

5.查看docker镜像列表

bash 复制代码
docker images

官方镜像仓库

比如redis:https://hub-stage.docker.com/search?q=redis

6.设置docker镜像源

加速器地址 :https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

1.阿里云控制台搜索容器镜像服务

2.进入容器镜像服务, 左侧最下方容器镜像服务中复制加速器地址

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

参考:https://www.php.cn/faq/538357.html

二.docker用命令

1.Docker命令

bash 复制代码
docker images 查看docker镜像列表
docker run 镜像名 运行镜像
docker ps 查看当前启动的容器,增加-a 参数查看包括停止的实例
docker stop 容器ID 停止一个容器
docker start 容器ID 启动一个已经停止的容器实例  
docker restart 容器ID 不管容器是否启动,直接重启容器
docker rm 容器ID 删除实例
docker rmi 镜像名 删除镜像
docker pull 镜像名 下载镜像
docker kill 容器ID 直接关闭容器
docker info 查看容器信息,包括镜像源
docker image inspect 镜像id 查看镜像详情信息
docker search 名称 模糊搜索镜像
docker logs 容器id 查看容器日志
sudo systemctl restart docker重启docker
systemctl status docker 查看容器状态
docker inspect 容器id 查看容器详情信息,重点看Mounts那一部分,容器内Destination的值挂载到宿主机Source的值中

docker exec -it 容器ID  /bin/bash    进入正在运行的docker容器里面

三.docker安装redis

1.获取 redis 镜像

docker pull redis

不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源

下载后可以使用docker images命令查看镜像文件

2.创建本机redis配置文件挂载目录

mkdir -p /usr/local/redis/conf

3.修改默认配置文件

从官网http://download.redis.io/redis-stable/redis.conf获取[redis.conf](http://download.redis.io/redis-stable/redis.conf "redis.conf")

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问

protected-mode no #默认yes,开启保护模式,限制为本地访问

daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败

dir ./ #输入本地redis数据库存放文件夹(可选)

appendonly yes #redis持久化(可选)

并上传到挂载目录下

4.执行命令

docker run --name redis --restart=always -p 6379:6379 -v /usr/local/redis/conf:/etc/redis -v /usr/local/redis/data:/data -d redis redis-server /etc/redis/redis.conf --requirepass "123456" --appendonly yes

命令解释说明 :

--name redis //指定该容器别名

--restart=always //随docker启动

-p 6379:6379 //端口映射:前表示主机部分,:后表示容器部分。

-v //挂载目录,规则与端口映射相同。

-d redis //后台模式启动redis,后面还有参数,不能放在前面

redis-server /etc/redis/redis.conf //以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/redis/conf/redis.conf

--requirepass "123456" //设置密码为123456

--appendonly yes //开启redis的AOF持久化,默认为false,不持久化

使用docker ps 查看redis已经运行了

使用 docker exec -it redis /bin/bash进入redis

使用 redis-cli 可以测试连接

四.docker搭建Redis哨兵模式-单台服务器

1.拉取redis.conf文件

放在自定义的目录下:wget -c http://download.redis.io/redis-stable/redis.conf

2.运行实例

--name:自定义启动容器名称

-v 主机redis.conf 和redis容器做映射

-d 后台启动

-p 端口映射 6379是redis端口 27000是哨兵端口 redis:镜像名称

   docker run --name redis_3 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6381:6379 -p 27002:27000 redis
   docker run --name redis_2 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 -p 27001:27000 redis
   docker run --name redis_1 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 -p 27000:27000 redis

3.测试单机

docker exec -it 容器id /bin/bash

docker exec -it ac23cca1c700 /bin/bash

执行redis-cli进入redis,输入:info 命令显示都是master,因为现在刚创建出来都是单机的

4.手动设置主从关系

这里使用到的IP是容器里的IP,可以通过:docker inspect redis_1查看容器映射出来的ip。

我们这里把redis_1设置为主,redis_2,redis_3设置为从。

进入redis_2容器,打开redis-cli,输入 SLAVEOF IP PORT

即可完成主机的绑定,再次执行INFO命令就可以看到角色发生了变化,且主机也显示了

redis_3也这样执行。

执行完我们进入redis_1中,执行INFO可以看到主从关系已经生效:

5.测试主从关系

在redis_1中执行set命令,我们去redis_2,redis_3中看下能否获取到。

这里需要注意的一点,SLVAE角色的redis只能读取不能set的。 只有master才能读写。

6.在主从集群的基础上搭建哨兵模式

1.进入三个redis容器,在容器的根目录下创建sentinel.conf文件。vim sentinel.conf。写入以下配置:

容器内先安装vim

apt-get update

apt-get install -y vim

bash 复制代码
port 26381 #哨兵端口号 一定要和启动命令映射第二个端口号一致  26379   26380  26381
daemonize yes  #后台启动
sentinel monitor master_redis 主节点ip 主节点端口 2     #这里的ip也是master容器映射出来的ip  端口是master映射到外面的端口 6379  最后的2表示 有2两个哨兵

2: 执行这个配置文件:redis-sentinel sentinel.conf

查看运行的sentinel进程:在容器里安装ps命令,apt-get install procps

安装成功之后,ps -ef 看到sentinel进程已经启动了。

可以看到三个容器的哨兵进程都启动了

参考:https://www.cnblogs.com/krock/p/14283469.html

五.docker搭建Redis哨兵模式

Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,既故障转移。

为了哨兵的高可用性,常以哨兵集群形式搭建哨兵,如下是三个哨兵组成的集群:

1.哨兵的功能

根据官方文档的介绍:

  • 监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  • 配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
  • 通知(Notification):哨兵可以将故障转移的结果发送给客户端。

2.配置哨兵

编写哨兵模式配置文件sentinel.conf(在redis的bin 目录下有一个redis.sentinel文件,这个文件用于启动哨兵的配置文件),wget http://download.redis.io/redis-stable/sentinel.conf

准备三个配置文件,修改三个文件监听端口为port 27000, port 27001, port 27002

bash 复制代码
# 关闭保护模式
protected-mode no
# 哨兵的监听端口
port 27000

# 让sentinel服务后台运行(docker的话需要设置为no,非docker运行设置为yes, 因为docker有个-d属性就是让在后台运行的)
daemonize no

# 当Redis哨兵以守护进程的方式运行的时候,默认会把pid文件放在/var/tmp/sentinel1.log,也可以配置到其他地址,多个哨兵需要重命名文件。

pidfile /var/run/redis-sentinel.pid

loglevel notice

#日志文件的路径
logfile "./sentinel.log"


#sentinel的工作目录
dir "/tmp"

# 哨兵sentinel监控的redis主节点的
## ip:主机ip地址.注:如果在一个机器里创建多个容器,ip为容器的ip,如果在不同机器上,则为机器的ip地址)
## port:哨兵端口号
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联,那么这时客观上认为主节点失联了,就进行failover(故障转移),
## 选举过程中,超过或等于这个票数的主节点变成被认为客观下线,从节点被选举为主节点。


# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2


# 当在Redis实例中开启了requirepass <foobared>,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
#超过30秒master还没有连接上,则认为master已经停止
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
#设置故障转移超时时间
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no

3.启动哨兵

指定配置文件目录映射

bash 复制代码
[root@localhost conf]# docker run -p 27000:27000 \
--name sentinel1 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel1.conf


[root@localhost conf]# docker run -p 27001:27001 \
--name sentinel2 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel2.conf


[root@localhost conf]# docker run -p 27002:27002 \
--name sentinel3 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel3.conf

查看哨兵启动成功

bash 复制代码
[root@localhost conf]# docker ps

4.进入哨兵

可以看到哨兵的状态是正确的,发现了1个主节点,2个从节点,3个哨兵。

bash 复制代码
[root@localhost conf]# docker exec -it sentinel3 /bin/bash
root@3222f481fa01:/data# redis-cli -p 27000
127.0.0.1:27000> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.xxxx.xxxx:6379,slaves=2,sentinels=3

查看哨兵日志

bash 复制代码
[root@localhost conf]# docker exec -it sentinel1 bash
root@d289ca792587:/data# cat ./sentinel.log

哨兵搭建参考:

docker 搭建简单的Redis哨兵模式(接redis主从复制) - 简书

https://zhuanlan.zhihu.com/p/647382777

利用docker搭建redis哨兵模式_幻想变成有钱人的小吴的博客-CSDN博客

六.其他

1、关闭防火墙

systemctl stop firewalld

2、开启防火墙

systemctl start firewalld

3、关闭开机启动

systemctl disable firewalld

4、开启开机启动

systemctl enable firewalld

5、开启某个端口(如:2231端口)

firewall-cmd --zone=public --add-port=19080/tcp --permanent

firewall-cmd --reload

6、查询端口号(如:2231端口) 是否开启:

firewall-cmd --query-port=2231/tcp

7、查询有哪些端口是开启的:

firewall-cmd --list-port

8.查看防火状态

systemctl status firewalld

修改防火墙信息后记得重启容器systemctl restart docker

相关推荐
a266378963 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
铁锤妹妹头发多1 小时前
新手用docker真**难受
运维·docker·容器
2739920291 小时前
Ubuntu20.04 安装build-essential问题
linux
wowocpp5 小时前
查看 linux ubuntu 分区 和 挂载 情况 lsblk
linux·运维·ubuntu
wowocpp5 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
龙鸣丿6 小时前
Linux基础学习笔记
linux·笔记·学习
耶啵奶膘7 小时前
uniapp-是否删除
linux·前端·uni-app
2401_850410838 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-09 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
南猿北者10 小时前
docker容器
docker·容器