docker使用

docker随笔

安装docker

docker最低要求centOS7 内核3.10以上

uname -r 查看内核版本
yum install docker 安装docker

ps:配置阿里云镜像加速(免费)
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

Docker 命令

基本

systemctl start docker 启动docker
systemctl enable docker 设置开机自启docker
systemctl stop docker 停止docker
systemctl restart docker 重启docker
systemctl status docker 查看docker状态

镜像相关

dockers search +关键字 查找镜像
docker pull 镜像名:tag tag可选,不选默认最新latest
docker images 查看已下载的镜像
docker rmi id 删除镜像

容器相关

docker run -d -p 8888:8080 --restart=always tomcat
(启动镜像名为tomcat的容器 -d 后台运行 ip linux和容器端口映射,- -restart=always 表示docker启动该容器启动,后面可以通过 docker update --restart=no tomcat 来停止自动启动)
docker start id 启动id为id的容器
(启动上一个步骤启动的容器,但是上一个步骤已经启动了该容器,改命令用于该容器停止后,再次启动)
docker ps 查看运行中的容器
docker ps -a 查看所有容器
docker stop id/name 停止容器(容器的id或者自定义的名字)
docker rm id 删除该id 的容器(并没有删除镜像)
docker rename 容器id 新的容器名字 修改已有容器的名称

启动指定网络方式

表示直接使用宿主机的6380访问

docker run -itd --name redis2 --net host redis --port 6380

我们在使用docker run创建Docker容器时,可以用–network标志 选项指定容器的网络模式,Docker有以下4种网络模式:
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定。

host模式介绍
在这里插入图片描述
在这里插入图片描述

Docker 容器打tar包 加载tar包为镜像

将docker容器保存为 tar 包

1、docker commit <容器id> <镜像名>:<tag> ---- 将容器保存成镜像
保存后 docker images 便可以看到镜像
2、docker save -o <tar包名>.tar <镜像名>:<tag> ---- 将镜像保存为.tar文件,默认保存在当前目录

从 tar 包导入docker镜像

1、docker load -i <tar包名>.tar ---- 从 tar 包导入镜像
导入镜像后,通过 docker images 便可看到导入的镜像。
2、docker run -itd -p <本地端口>:<容器端口> <镜像名>:<tag> ---- 通过镜像起容器

案例

1、docker commit 294oajfhfnci abcdef:latest ---- 将294oajfhfnci容器保存为镜像abcdef
2、docker save -o abcdef.tar abcdef:latest ---- 将镜像abcdef保存为abcdef.tar
3、docker load -i abcdef.tar ---- 从 abcdef.tar 导入镜像
4、docker run -itd -p 8888:80 --restart=always abcdef:latest ---- 通过abcdef镜像启动容器

迁移容器
由于个人公司内网限制,docker配置代理一直无法生效所以采用外网下下载容器后迁移到内网机

1.保存容器镜像到tar包 docker save -o tar_name id (tar_name 自定义 ,id 要迁移的容器id)
2.传到内网机linux机器内,然后使用命令
docker load -i path (path,tar包的位置 ,比如/home/gqs/mysql01.tar)
3.镜像重命名 docker tag id mysql:8.0 (例,id 迁移的容器id mysql:8.0命名为mysql:8.0版本,因为迁移后默认名字tag都是none)

查看日志

docker logs id 可以查看该容器的运行日志
docker logs -f bf08b7f2cd89
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

Mysql

使用mysql

1.仓库查找mysql

docker search mysql

2.根据搜索结果选择要下载的版本号

docker pull mysql:8.0 8.0表示版本号

3.启动mysql

docker run --name mysql01 -p 8888:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
- -name 自定义容器名
-p 表示端口映射将linux8888端口和mysql3306映射起来(前提,linux防火墙改端口号已放开,也可直接关闭防火墙)
-d 表示后台运行
-e 配置环境变量指定mysql密码 (账号:root)

但是我们一般情况下不会将数据放在容器中,删了容器数据便会丢失,一般采用数据挂载的方式,将mysql数据保存在linux本地
创建挂载目录 /var/mysql01/data
然后启动数据挂载

docker run -d -p 8888:3306 --name mysql01 -v /var/mysql01/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

这样当mysql01容器挂掉,我们可以启动mysql02挂载这个目录,就会是相同数据,我们还可以挂载自己配置文件。(个人测试:只能由一个启动中的容器指向这一目录,我启动两个,会有一个无法访问)
4.进入mysql容器

docker exec -it mysql01 bash
mysql01 :启动时自定义的容器名
ctrl +p+q 退出mysql容器,并让mysql后台运行

5.放开linux端口,外界连接容器内mysql

1.放开端口

1.systemctl stop firewalld.service 直接关闭防火墙
禁止开机自启动 systemctl disable firewalld.service
2.firewall-cmd --add-port=8888/tcp --permanent 永久放开端口号8888(根据自己使用选择放开)

2.放开root用户仅本地连接权限

1.ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
2.flush privileges;
ps: %表示不限制ip访问 localhost表示本机使用

配置mysql 8.0主从复制

开始配置

1.创建主从数据库文件夹-配置配置/数据挂载

mkdir -p /usr/local/mysql/master1/conf
mkdir -p /usr/local/mysql/master1/data
mkdir -p /usr/local/mysql/slave1/conf
mkdir -p /usr/local/mysql/slave1/data

2.初始化主数据库配置文件

cd /usr/local/mysql/master1/conf
touch my.cnf
vi my.cnf
粘贴以下内容
[mysqld]
character-set-server = utf8
lower-case-table-names = 1
#主从复制-主机配置
#主服务器唯一ID
server-id = 1
#启用二进制日志
log-bin=mysql-bin
#设置logbin格式
binlog_format = STATEMENT

3.初始化从数据库配置文件

cd /usr/local/mysql/slave1/conf
touch my.cnf
vi my.cnf

粘贴以下内容

[mysqld]
character-set-server = utf8
#主从复制-从机配置
#从服务器唯一ID
server-id = 2
#启用中继日志
relay-log = mysql-relay

文件夹授权

chmod -R 777 /usr/local/mysql
设置所有用户对 /usr/local/mysql目录下所有子目录具有读写执行权限
改操作会导致mysql配置挂载不生效(配置文件也在该目录下)
在这里插入图片描述
权限777,任何一个用户都可以改my.cnf,存在很大的安全隐患.
改正:chmod 644 my.cnf
my.cnf设置为用户可读写,其他用户不可写.

docker部署mysql8.0
#拉取镜像
>docker pull mysql:8.0.20

>#查看镜像
docker images

>#构建主数据库容器
docker run --name=mysql-master-1 --privileged=true -p 3306:3306 -v /usr/local/mysql/master1/data/:/var/lib/mysql -v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20 --lower_case_table_names=1

>#查询是否启动成功
docker ps

#验证是否可以登录
#交互式进入容器
docker exec -it mysql-master-1 /bin/bash

#登录
mysql -uroot -p123456

#退出
quit
exit

#构建从数据库容器
docker run --name=mysql-slave-1 --privileged=true -p 3307:3306 -v /usr/local/mysql/slave1/data/:/var/lib/mysql -v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ -e  MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20 --lower_case_table_names=1

#查询是否启动成功
docker ps

#验证是否可以登录
#交互式进入容器
docker exec -it mysql-slave-1 /bin/bash

#登录(使用构建时指定的密码:123456)
mysql -uroot -p

#退出
exit

#关闭防火墙
#查看防火墙状态
systemctl status firewalld

#关闭防火墙
systemctl stop firewalld
配置主从复制
# 进入主数据库
mysql -uroot -p123456

- 主数据库创建用户slave并授权
# 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'password';

# 授权
grant replication slave , select on *.* to 'slave'@'%';

# 刷新权限
flush privileges;

# 查询server_id值
show variables like 'server_id';

# 指定server_id的值(如果不是1,主从数据库的server_id不能相同)
set global server_id = 1;

# 查询Master状态,并记录File和Position的值
show master status;

# 注意:执行完此步骤后退出主数据库,防止再次操作导致File和Position的值发生变化

!!!!!!!!!!!!验证slave用户是否可用!!!!!!!!!!!!!
mysql -uslave -p -h192.168.10.234 -P3306

# 进入从数据库
mysql -uroot -p -h192.168.10.234 -P3307

# 查询server_id值
show variables like 'server_id';

# 指定server_id的值(如果不是2,主从数据库的server_id不能相同)
set global server_id = 2;

# 若之前设置过同步,请先重置
stop slave;
reset slave;

# 设置主数据库
change master to master_host='172.17.0.2',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=156;

# 开始同步
start slave;

# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;

# 查询Slave状态
show slave status\G

# 查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

参考链接: https://www.cnblogs.com/cao-lei/p/13606945.html

遇到的问题

navicat链接mysql报错

navicat链接mysql报错

mysql8.0忘记密码

mysql8.0忘记密码

查看错误日志

select * from performance_schema.replication_applier_status_by_worker;

查看授权

select host ,user from mysql.user;

查看主从配置相关信息

show slave status \G;

Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
mysql> stop slave;
mysql> change master to
    -> master_host='192.168.8.57',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='mysql',
    -> master_log_file='mysql-bin.000008',
    -> master_log_pos=154;

mysql> start slave;

在这里插入图片描述

you are not allowed to create a user with GRANT’ on query

忘记怎么解决的了,好像是有两个root用户,一个只能localhost使用,用了这个?把这个账户删了。后续出现在验证吧。

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).在这里插入图片描述
其他

1,配置从数据库的主数据库时,要根据自己的来配,比如master_host,master_log_file
2, 查询相关技术文档时,要带上版本,比如mysql8.0配置主从复制

docker使用redis配置集群

安装redis

docker search redis
docker使用redis

配置集群

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

集群中都是master,修改任一个,其他也会改变

redis 连接命令

在这里插入图片描述

1. 生成3个容器

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379
docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380
docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

配置数据挂载好像如果不需要事先进行配置不需要提前创建目录,会自动生成

2.配置集群

# 启动命令
docker start redis-node1 redis-node2 redis-node3
# 进入某一个容器
docker exec -it redis-node1 /bin/bash
# 组建集群,10.211.55.4为当前物理机的ip地址
redis-cli --cluster create 10.211.55.4:6379  10.211.55.4:6380  10.211.55.4:6381 --cluster-replicas 0

在这里插入图片描述

3.查看集群信息

root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>

在这里插入图片描述

4.使用 redis-cli -c 连接到集群上,set一个值,然后从其他节点再获取值查看是否成功

在这里插入图片描述
单配置集群并不完全高可用,一个服务挂了,所有都不可以使用了

redis相关配置截图,不研究了

spring boot主从集群配置读写分离?

在这里插入图片描述

不推荐redis读写分离?

在这里插入图片描述

什么是redis高可用?

在这里插入图片描述

docker使用rabbitmq

1.同样方法安装rabbitmq镜像

2.运行rabbitmq

docker run -d --name rabbitmq01 -p 4396:4396 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672  30aac3e715ba

3.配置管理界面

docker exec -it id bash
rabbitmq-plugins enable rabbitmq_management

访问地址: ip:15672
这样已经可以linux内访问了,外网访问参考上面开放端口就行了

在这里插入图片描述

docker小知识

windows docker不生效?

在Windows家庭版下安装了docker,并尝试在其中运行jupyter notebook等服务,但映射完毕之后,在主机的浏览器中,打开localhost:port无法访问对应的服务。?
答: 因为docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。

可以将自己镜像推送到docker仓库

https://www.runoob.com/docker/docker-repository.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值