- Docker常用命令
- 一、帮助和启动命令
- 二、镜像命令
- 1)**查看本地有哪些docker镜像**: docker images
- 2)**拉取某个镜像**:
- 3)**删除镜像**:
- 三、容器命令
- 1)新建+启动容器
- 2)列出当前所有正在运行的容器
- 3)退出容器
- 4) 启动已停止运行的容器
- 5)重启容器
- 6)停止容器
- 7)强制停止容器
- 8) 删除已停止的容器
- 9) **进入正在运行的容器并以命令行交互**
- 10)容器→主机
- 四、docker容器数据卷
- 1) **查看数据卷是否挂载成功**
- 2)卷的继承和共享
- 五、docker安装redis案例
- 1)简单版本
- 2)加入数据卷技术
- 六、docker安装MySQL
- 1)简单版本
- 2)外部Win10也来连接运行在dokcer上的mysql容器实例服务
- 3)实战版
- 4)MySQL字符集编码详解
- 七、redis集群
- 1)搭建集群
- 2)**宕机问题**:
- **3)主从扩容案例**
- **4)主从缩容案例:6387和6388下线**
-
启动docker: systemctl start docker
-
停止docker: systemctl stop docker
-
重启docker: systemctl restart docker
-
查看docker状态: systemctl status docker
-
开机启动: systemctl enable docker
-
查看docker概要信息: docker info
-
查看docker总体帮助文档: docker --help
-
查看docker命令帮助文档: docker 具体命令 --help
- OPTIONS说明:
· -a :列出本地所有的镜像(含历史映像层)
· -q :只显示镜像ID
2)拉取某个镜像:· docker pull 镜像名字[:TAG]
3)删除镜像:· docker rmi -f 镜像ID
删除多个: docker rmi -f 镜像名1:TAG 镜像名2:TAG
· 删除全部
· docker rmi -f $(docker images -qa)
三、容器命令 1)新建+启动容器· docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
· OPTIONS说明
OPTIONS说明(常用):有些是一个减号,有些是两个减号
–name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互);
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
docker run -it centos /bin/bash2)列出当前所有正在运行的容器
· docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
3)退出容器· exit 容器停止
· ctrl+p+q退出,容器不停止
4) 启动已停止运行的容器· docker start 容器ID或者容器名
5)重启容器· docker restart 容器ID或者容器名
6)停止容器· docker stop 容器ID或者容器名
7)强制停止容器· docker kill 容器ID或容器名
8) 删除已停止的容器· docker rm 容器ID
· 一次性删除多个容器实例
· docker rm -f $(docker ps -a -q)
· docker ps -a -q | xargs docker rm
Docker容器后台运行,就必须有一个前台进程
9) 进入正在运行的容器并以命令行交互· 前台交互式启动
· docker run -it redis:6.0.8
· 后台守护式启动
· docker run -d redis:6.0.8
· 进入redis服务
· docker exec -it 容器ID /bin/bash
· docker exec -it 容器ID redis-cli
· 查看容器日志
· docker logs 容器ID
· 查看容器内运行的进程
· docker top 容器ID
· 查看容器内部细节
· docker inspect 容器ID
· docker exec -it 容器ID bashShell docker attach 容器ID
attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。
10)容器→主机· docker cp 容器ID:容器内路径 目的主机路径
docker cp f51234fds1233:/usr/local/mycptest/container.txt /tmp/c.txt四、docker容器数据卷
docker run -d -p 5000:5000 -v /zzyy/mydata/:/tmp/regeiter --privileged=true registry docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名1) 查看数据卷是否挂载成功
docker inspect 容器ID
2)卷的继承和共享· 容器1完成和宿主机的映射
docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
· 容器2继承容器1的卷规则
· docker run -it --privileged=true --volumes-from 父类(u1) --name u2 ubuntu五、docker安装redis案例 1)简单版本
docker pull redis:6.0.8 docker run -d -p 6379:6379 redis:6.0.8 docker exec -it f123123 /bin/bash redis-cli2)加入数据卷技术
mkdir -p /app/redis/ cp /myredis/redis.conf /app/redis/ # 修改配置 daemonize yes #后台启动 记得注释掉或者改成no 因为这个会与docker的后台启动起冲突 protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis # 需要注释掉bind #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户 端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可) docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf docker exec -it mvr3 /bin/bash redis-cli六、docker安装MySQL 1)简单版本
docker pull mysql:5.7 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.72)外部Win10也来连接运行在dokcer上的mysql容器实例服务
SHOW VARIABLES LIKE 'character%' (docker上默认字符集编码隐患)3)实战版
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql #日志 -v /zzyyuse/mysql/data:/var/lib/mysql # 数据 -v /zzyyuse/mysql/conf:/etc/mysql/conf.d # 配置 -e MYSQL_ROOT_PASSWORD=123456 # --name mysql mysql:5.7 #
修改配置文件
[client] default_character_set=utf8 #客户端默认字符集 character_set_client [mysqld] collation_server = utf8_general_ci # 对应的默认的比较规则 character_set_server = utf8 #服务器级别的字符集4)MySQL字符集编码详解
| 系统变量 | 描述 |
|---|---|
| character_set_client | 服务器解码请求时使用的字符集(接受1) |
| character_set_connection | 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection (接受2) |
| character_set_results | 服务器向客户端返回数据时使用的字符集(发送) |
# 利用docker去开启redis docker run -d --name redis-node-1 --net host # · 使用宿主机的IP和端口 --privileged=true #· 获取宿主机root用户权限 -v /data/redis/share/redis-node-1:/data redis:6.0.8 #· 开启redis集群 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 # 6台redis全部启动,就创建集群 redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1 #表示为每个master创建一个slave节点
然后系统会自动的分配给你集群主从关系图
问你是否接受他的分配
一切OK的话,3主3从搞定
查看集群状态(6381)
cluster info
查看节点状态(6381)
cluster nodes
对6381新增两个key(6381)( 防止路由失效加参数-c并新增两个key)
然后去尝试获取试一试?
查看集群信息
redis-cli --cluster check 192.168.111.147:63812)宕机问题:
6381宕机了,6385上位成为了新的master。
6381启动
6385宕机,,,,6385启动
3)主从扩容案例新建第七个第八个节点
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
进入第七个节点
docker exec -it redis-node-7 /bin/bash #这个是创建集群 redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1 #这个是增加集群 redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381 #6387 就是将要作为master新增节点 #6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
检查集群情况第1次:发现没有插槽
重新分派槽号
redis-cli --cluster reshard IP地址:端口号 redis-cli --cluster reshard 192.168.111.147:6381
问你分配分配后空间?4096
问你分配到哪个节点去?节点7
分配规则?
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
检查集群情况第2次:发现没有插槽
为主节点6387分配从节点6388
命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID redis-cli --cluster add-node 192.168.111.147:6388 192.168.111.147:6387 --cluster-slave --cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451 #-------这个是6387的编号,按照自己实际情况
检查集群情况第3次
4)主从缩容案例:6387和6388下线#命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID redis-cli --cluster del-node 192.168.111.147:6388 5d149074b7e57b802287d1797a874ed7a1a284a8 redis-cli --cluster check 192.168.111.147:6382 #检查一下发现,6388被删除了,只剩下7台机器了。
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
redis-cli --cluster reshard 192.168.111.147:6381
问你需要分配多大啊?
问你分配给哪个节点啊?
问你哪个节点来分配啊?
分配完毕 ,我们检查一下?
4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
将6387删除
命令:redis-cli --cluster del-node ip:端口 6387节点ID redis-cli --cluster del-node 192.168.111.147:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451



