docker
2023-11-28 14:51:00 0 举报
AI智能生成
docker
作者其他创作
大纲/内容
docker安装mysql主从
服务器规划
服务器规划:使用docker方式创建,为了方便演示,我们都在一台服
务器上搭建伪集群,
务器上搭建伪集群,
主服务器:容器名:mysql-master,端口3308
从服务器:容器名 mysql-slave-1,端口3309
容器名 mysql-slave-2,端口3310
容器名 mysql-slave-2,端口3310
注意: 如果此时防火墙是开启的,则先关闭防火墙,并重启
docker,否则后续安装的MysQL无法启动
docker,否则后续安装的MysQL无法启动
# 关闭docker
systemctl stop docker
# 关闭防火墙
systemctl stop firewalld
# 启动docker
systemctl start docker
systemctl stop docker
# 关闭防火墙
systemctl stop firewalld
# 启动docker
systemctl start docker
一主多从配置
准备主服务器
setp 1:在Docker中创建并启动MySQL主服务器:端口3308
docker run -d -p 3308:3306 -v /linghu/mysql/master/conf:/etc/mysql/conf.d -v /linghu/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name linghu-mysql-master mysql:8.0.31
各段命令的含义
# -d 是作为守护进程启动
docker run -d
# 服务器真实的端口号映射 : docker 容器中的端口号
-p 3308:3306
# 配置文件的映射
-v /linghu/mysql/master/conf:/etc/mysql/conf.d
# mysql 数据目录映射
-v /linghu/mysql/master/data:/var/lib/mysql
# 账号密码(docker容器内部密码)
-e MYSQL_ROOT_PASSWORD=123456
# 容器的名字
--name linghu-mysql-master
#使用的镜像
mysql:8.0.29
docker run -d
# 服务器真实的端口号映射 : docker 容器中的端口号
-p 3308:3306
# 配置文件的映射
-v /linghu/mysql/master/conf:/etc/mysql/conf.d
# mysql 数据目录映射
-v /linghu/mysql/master/data:/var/lib/mysql
# 账号密码(docker容器内部密码)
-e MYSQL_ROOT_PASSWORD=123456
# 容器的名字
--name linghu-mysql-master
#使用的镜像
mysql:8.0.29
服务器验证mysql 是否成功启动
docker ps
如果状态不是UP,大概率是端口被占用,或者是防火墙
step 2:创建MySQL主服务器配置文件
默认情况下MySQL的binlog日志是自动开启的,可以通过如下配
置定义一些可选配置
置定义一些可选配置
vi /linghu/mysql/master/conf/my.cnf
配置如下内容
[mysqld]
# 服务器唯一id,默认值1
server-id=2
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
# 服务器唯一id,默认值1
server-id=2
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
重启MySQL容器
docker restart linghu-mysql-master
检查docker 容器状态
docker ps
step3:进入docker容器连接mysql服务器
# 进入容器: env LANG=C.UTF-8避免容器中显示中文乱码
# 使用exec -it 进入mysql-master的容器 命令行交互界面
docker exec -it linghu-mysql-master env LANG=C.UTF-8 /bin/bash
# 使用exec -it 进入mysql-master的容器 命令行交互界面
docker exec -it linghu-mysql-master env LANG=C.UTF-8 /bin/bash
成功进入容器内部
# 进入容器内的MySQL命令行执行
mysql -uroot -p
# 更改密码策略
ALTER USER 'root'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
mysql -uroot -p
# 更改密码策略
ALTER USER 'root'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
step4:使用 navicat 连接mysql
step5:创建slave用户
# 创建slave用户
CREATE USER 'linghu-slave'@'%';
# 设置密码
ALTER USER 'linghu-slave'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 授予复制权限
GRANT REPLICATION SLAVE ON *.*TO 'linghu-slave'@'%';
# 刷新权限
FLUSH PRIVILEGES;
CREATE USER 'linghu-slave'@'%';
# 设置密码
ALTER USER 'linghu-slave'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 授予复制权限
GRANT REPLICATION SLAVE ON *.*TO 'linghu-slave'@'%';
# 刷新权限
FLUSH PRIVILEGES;
step6:主机中查询master状态
执行完这个步骤后,观察主服务器MySQL,不再操作主服务器,防止
主服务器状态值变化
主服务器状态值变化
SHOW MASTER STATUS;
记下File和Position的值。执行完此步骤后不要在操作主服务器
MySQL,防止主服务器状态值发生变化。
MySQL,防止主服务器状态值发生变化。
准备从服务器
(根据自己的需要配置多台从机器 slave1、slave2....
这里以配置
slave1为例子)
(根据自己的需要配置多台从机器 slave1、slave2....
这里以配置
slave1为例子)
step1:在docker中创建并启动MySQL从服务器:端口:3309
docker run -d -p 3309:3306 -v /linghu/mysql/slave1/conf:/etc/mysql/conf.d -v /linghu/mysql/slave1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name linghu-mysql-slave1 mysql:8.0.31
step2:创建MysQL从服务器配置文件
vi /linghu/mysql/slave1/conf/my.cnf
[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改
server-id=5
# 中继日志名,默认×××××××××××x-relay-bin
# relay-log=relay-bin
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改
server-id=5
# 中继日志名,默认×××××××××××x-relay-bin
# relay-log=relay-bin
重启MySQL容器
docker restart linghu-mysql-slave1
检查容器是否成功启动
docker ps
step3:使用命令行登录MySQL从服务器
# 进入容器
docker exec -it linghu-mysql-slave1 env LANG=C.UTF-8 /bin/bash
# 进入容器内的MySQL命令行执行
mysql -uroot -p
# 更改密码策略
ALTER USER 'root'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
docker exec -it linghu-mysql-slave1 env LANG=C.UTF-8 /bin/bash
# 进入容器内的MySQL命令行执行
mysql -uroot -p
# 更改密码策略
ALTER USER 'root'@'%' IDENTIFIED WITH
mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
step4:在从服务器上配置主从关系:
在从机上执行以下SQL操作:
CHANGE MASTER TO MASTER_HOST=
'192.168.1.16',MASTER_USER='linghu-slave',MASTER_PASSWORD='123456',
MASTER_PORT=3308,MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=1521;
'192.168.1.16',MASTER_USER='linghu-slave',MASTER_PASSWORD='123456',
MASTER_PORT=3308,MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=1521;
MASTER_LOG_FILE 是主节点SHOW MASTER STATUS;查看到File字段的值
MASTER_LOG_POS是主节点SHOW MASTER STATUS;查看到的Position字段值
MASTER_LOG_POS是主节点SHOW MASTER STATUS;查看到的Position字段值
启动主从同步
启动从机器的复制功能,执行SQL:
START SLAVE;
-- 查看数据库状态(不需要分号)
SHOW SLAVE STATUS\G
SHOW SLAVE STATUS\G
2个yes表示成功
如果链接失败,在从机上解绑重试
停止已经启动的绑定
stop slave;
重置绑定
reset master;
重新配置主从关系
常见问题
停止和重置
# 在从机上执行。功能说明:停止I/0线程和SQL线程的操作。
stop slave;
# 在从机上执行。功能说明。用于册除SLAVE数据库的relaylog日志
文件,并重新启用新的relaylog文件。
reset slave;
# 在主机上执行。功能说明。班除所有的binglog日志文件。并将日志
索引文件清空,重新开始所有新的日志文件。
# 用于第一次进行搭建主从库时,进行主库binlog初始化工作;
reset master;
stop slave;
# 在从机上执行。功能说明。用于册除SLAVE数据库的relaylog日志
文件,并重新启用新的relaylog文件。
reset slave;
# 在主机上执行。功能说明。班除所有的binglog日志文件。并将日志
索引文件清空,重新开始所有新的日志文件。
# 用于第一次进行搭建主从库时,进行主库binlog初始化工作;
reset master;
MySQL主从同步文件
MySQL主从同步文件
binlog_format
binlog行格式说明:
binlog_format=STATEMENT:日志记录的是主机数据库的 写指
令,性能高,但是一旦使用了系统函数 now()以及获取系统参
数的操作会出现主从数据不同步的问题。
令,性能高,但是一旦使用了系统函数 now()以及获取系统参
数的操作会出现主从数据不同步的问题。
binlog_format=ROW(默认):日志记录的是主机数据库的 写
后的数据,批量操作时效性差,解决了系统函数now()之类等操
作在主从机器上不一致的问题。
后的数据,批量操作时效性差,解决了系统函数now()之类等操
作在主从机器上不一致的问题。
binlog_format=MIXED:是以上两种level的混合使用,有函数
用ROW,没函数用STATEMENT,但是无法识别系统变量。
用ROW,没函数用STATEMENT,但是无法识别系统变量。
binlog-ignore-db和binglog-do-db优先
级
级
[mysqld]
# 服务器唯一id,默认值1
server-id=2
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
# 服务器唯一id,默认值1
server-id=2
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=mytestdb
# 设置不需要复制的数据库
# binlog-ignore-db=mysql
# binlog-ignore-db=infomation_schema
如果我们两者都不配置,默认的情况,所有的更改我们都会写入
binlog日志,然后主从复制。
如果有配置do-db 那么 ignore-db 会被忽略。
binlog日志,然后主从复制。
如果有配置do-db 那么 ignore-db 会被忽略。
概述
docker是什么
Docker是一个供开发人员和系统管理员开发、部署和运行带有容器的应用程序的平台。
使用Linux容器来部署应用程序被称为容器化。容器并不新,但它们用于轻松部署应用程序。
使用Linux容器来部署应用程序被称为容器化。容器并不新,但它们用于轻松部署应用程序。
部署应用的各个时代
远古时代
缺点:成本高、部署慢、浪费资源、
硬件限制、不利于迁移扩展
硬件限制、不利于迁移扩展
虚拟化时代
优点 :相对利用好资源,相对容易扩展等。
缺点 :虚拟机太重了,一上来占用较多物理资源,
移植性差,资源利用率低等。
缺点 :虚拟机太重了,一上来占用较多物理资源,
移植性差,资源利用率低等。
容器时代
docker和虚拟机的额区别
docker的整体结构
engine
images
容器镜像:把软件需要额代码,环境,文件等封装成 一个镜像
官方的镜像仓库:https://hub.docker.com/
Container
容器:通过镜像可以创建,很多个容器
安装docker
安装准备
环境要求
Docker 其实就是一个服务容器,可以运行在Windows、Mac、
CentOS、Ubuntu等操作系统
CentOS、Ubuntu等操作系统
Docker支持以下的centos版本:
CentoS 7(64-bit)
CentoS 6.5(64-bit)或更高的版本
CentoS 7(64-bit)
CentoS 6.5(64-bit)或更高的版本
目前,Centos仅发行版本中的内核支持Docker
Docker运行在Centos 7上,要求系统为64位、系统内核版本
为3.10 以上。
Docker运行在CentOS-6.5或更高的版本的centos 上,要求
系统为64位、系统内核版本为2.6.32-431或者更高版本。
Docker运行在Centos 7上,要求系统为64位、系统内核版本
为3.10 以上。
Docker运行在CentOS-6.5或更高的版本的centos 上,要求
系统为64位、系统内核版本为2.6.32-431或者更高版本。
检查系统内核
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主
机名称和操作系统类型等)
机名称和操作系统类型等)
uname -r
这里显示是3.10版本 x86架构64位的操作系统
检查已经安装的CentOS版本
cat /etc/redhat-release
CentOS 7 安装 Docker
.安装需要的基础软件包
y -utils提供了 yy-config-manager相关功能,device-mapperpersistent-data和Ivm2是设备映射器驱动程序所需要的。
yum install -y yum-utils device-mapper-pergistendata lvm2t
更新yum软件包索引
我们在更新或配置yum源之后,通常都会使用yum makecache生成
缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜
索安装软件的速度
缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜
索安装软件的速度
yum makecache fast
安装docker-ce
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
或者
yum install -y docer-ce
或者
yum install -y docer-ce
#测试安装是否成功
sudo docker run hello-world
sudo docker run hello-world
#设置开启启动
sudo systemctl enable docker
sudo systemctl enable docker
如果出现安装失败再来一次:
#1.下载关于docker的依赖环境
yum install -y yum-utils device-mapper-pergistendata lvm2t
#2.设置一下下载Docker的镜像源 如果不设置,默认会从官网下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.安装Docker
#安装Docker缓存
yum makecache fast
#安装Docker的服务
yum -y install docker-ce
#4.启动,并设置为开机自动启动,测试
#启动Docker服务
systemctl start docker
5.启动docker
6.版本验证
7.设置开机启动
#设置开机自动启动
systemctl enable docker
#测试
docker run hello-world
yum install -y yum-utils device-mapper-pergistendata lvm2t
#2.设置一下下载Docker的镜像源 如果不设置,默认会从官网下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.安装Docker
#安装Docker缓存
yum makecache fast
#安装Docker的服务
yum -y install docker-ce
#4.启动,并设置为开机自动启动,测试
#启动Docker服务
systemctl start docker
5.启动docker
6.版本验证
7.设置开机启动
#设置开机自动启动
systemctl enable docker
#测试
docker run hello-world
设置docker下载镜像
阿里云
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://s9qq12t0.mirror.aliyuncs.com"]
}
EOF
{
"registry-mirrors": ["https://s9qq12t0.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
启动docker
systemctl start docker
版本验证
docker version
设置开机启动
# 查看服务是否自动启动(是:enabled|否:disabled)
systemctl list-unit-files lgrep docker.service
# 设置开机启动,如果不是enabled可以运行以下命令设置自启动
systemctl enable docker
# 重新加载服务配置
systemctl daemon-reload
systemctl list-unit-files lgrep docker.service
# 设置开机启动,如果不是enabled可以运行以下命令设置自启动
systemctl enable docker
# 重新加载服务配置
systemctl daemon-reload
资料
官网:http://www.docker.com
安装手册 (社区版):https://docs.docker.com/engine/install/centos/
docker的使用
docker操作命令
基础命令
启动docker
systemctl start docker
关闭docker
systemctl stop docker
重启docker
systemctl restart docker
docker设置随服务启动而自启动
systemctl enable docker
查看docker 运行状态
systemctl status docker
查看docker 版本号信息
docker version
docker info
docker 帮助命令
docker --help
docker pull --help
官方镜像搜索
https://hub.docker.com/search?q=&type=image
docker中的镜像 就像是咱们java 中的Class ,
容器呢 是基于这个镜像构建出的实例 类似于咱java 中 根据Class构造出的一个个实例对象
容器呢 是基于这个镜像构建出的实例 类似于咱java 中 根据Class构造出的一个个实例对象
镜像命令
查看自己服务器中docker 镜像列表
docker images
搜索镜像
docker search 镜像名
#搜索 STARS >9000的 mysql 镜像
docker search --filter=STARS=9000 mysql
#搜索 STARS >9000的 mysql 镜像
docker search --filter=STARS=9000 mysql
拉取镜像
不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
docker pull 镜像名:tag
运行镜像
docker run 镜像名
docker run 镜像名:Tag
docker run 镜像名:Tag
例子
#拉去最新的tomcat镜像并运行
docker pull tomcat
docker run tomcat
docker pull tomcat
docker run tomcat
删除镜像
#删除一个
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
强制删除镜像
docker image rm 镜像名称/镜像ID
保存镜像
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,
然后 可以在任何一台安装了docker的服务器上 加载这个镜像
然后 可以在任何一台安装了docker的服务器上 加载这个镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
例子
docker save tomcat -o /myimg.tar
加载镜像
任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
docker load -i 镜像保存文件位置
镜像标签
app:1.0.0 基础镜像
# 分离为开发环境
app:develop-1.0.0
# 分离为alpha环境
app:alpha-1.0.0
# 分离为开发环境
app:develop-1.0.0
# 分离为alpha环境
app:alpha-1.0.0
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
# 如果省略TAG 则会为镜像默认打上latest TAG
docker tag aaa bbb
# 上方操作等于 docker tag aaa:latest bbb:test
docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
# 如果省略TAG 则会为镜像默认打上latest TAG
docker tag aaa bbb
# 上方操作等于 docker tag aaa:latest bbb:test
例子
# 我们根据镜像 quay.io/minio/minio 添加一个新的镜像 名为 aaa 标签Tag设置为1.2.3
docker tag quay.io/minio/minio:1.2.3 aaa:1.2.3
# 我们根据镜像 app-user:1.0.0 添加一个新的镜像 名为 app-user 标签Tag设置为alpha-1.0.0
docker tag app-user:1.0.0 app-user:alpha-1.0.0
docker tag quay.io/minio/minio:1.2.3 aaa:1.2.3
# 我们根据镜像 app-user:1.0.0 添加一个新的镜像 名为 app-user 标签Tag设置为alpha-1.0.0
docker tag app-user:1.0.0 app-user:alpha-1.0.0
容器命令
查看正在运行容器列表
docker ps
查看所有容器
(包含正在运行 和已停止的)
(包含正在运行 和已停止的)
docker ps -a
更换容器名
docker rename 容器ID/容器名 新容器名
运行和运行中的命令
运行一个容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 /bin/bash 交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
例子
#1. 拉取redis 镜像
docker pull redis:5.0.5
#2.命令启动
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
docker pull redis:5.0.5
#2.命令启动
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
容器端口与服务器端口映射
Docker 一大特点,每个容器之间环境都是隔离的!!!
我们甚至可以在一个服务器上,使用docker镜像,来跑出N个 mysql实例
(尽管,他们的默认端口都是一样的,但还是那句话,容器间,环境是隔离的。
A容器中的3306 与B容器的3306毫无关系,因为其不在一个世界呀!)
默认情况下,我们是无法通过宿主机(安装docker的服务器)端口来直接访问容器的
,因为docker容器自己开辟空间的端口与宿主机端口没有联系…
我们甚至可以在一个服务器上,使用docker镜像,来跑出N个 mysql实例
(尽管,他们的默认端口都是一样的,但还是那句话,容器间,环境是隔离的。
A容器中的3306 与B容器的3306毫无关系,因为其不在一个世界呀!)
默认情况下,我们是无法通过宿主机(安装docker的服务器)端口来直接访问容器的
,因为docker容器自己开辟空间的端口与宿主机端口没有联系…
-p 宿主机端口:容器端口
例子
-p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机
(docker装在哪台服务器 哪台服务器就是宿主机)8888 端口进行映射
那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了
(docker装在哪台服务器 哪台服务器就是宿主机)8888 端口进行映射
那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
重启容器
docker restart 容器ID/容器名
启动容器
docker start 容器ID/容器名
随docker服务启动而自动启动
方法一(容器启动时操作)
启动容器时,使用docker run命令时 添加参数--restart=always 便表示,该容器随docker服务启动而自动启动
docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
方法二(容器已经启动时的操作)
docker update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
容器和服务器的切换
进入容器方式
方式一(推荐使用)
docker exec -it 容器名/容器ID /bin/bash
#进入 前面的 redis001容器
docker exec -it redis001 /bin/bash
#进入 前面的 redis001容器
docker exec -it redis001 /bin/bash
方式二
docker attach 容器名/容器ID
从容器内 退出到自己服务器中
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
按【ctrl+d】或输入exit
按【ctrl+d】或输入exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
按顺序按【ctrl+p】,【ctrl+q】
按顺序按【ctrl+p】,【ctrl+q】
停止运行的命令
停止容器
# 先停止咱之前运行的 redis 容器
docker stop 容器名/容器ID
docker stop 容器名/容器ID
kill 容器
docker kill 容器ID/容器名
删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
容器文件拷贝
(无论容器是否开启 都可以进行拷贝)
(无论容器是否开启 都可以进行拷贝)
#docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
文件挂载
简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,
当容器删除时,宿主机文件数据目录仍在,
下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复
当容器删除时,宿主机文件数据目录仍在,
下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复
#将 容器内指定文件挂载到了宿主机对应位置
-v 宿主机文件存储位置:容器内文件位置
-v 宿主机文件存储位置:容器内文件位置
#-v命令可以多次使用,即一个容器可以同时挂载多个文件
-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
例子
# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
运维命令
遇到的问题一
可能有时候发布会遇到如下错误:
docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device
这个错误是docker在写入的时候报错无机器无空间
docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device
这个错误是docker在写入的时候报错无机器无空间
解决方案
查看docker工作目录
sudo docker info | grep "Docker Root Dir"
查看docker磁盘占用总体情况
du -hs /var/lib/docker/
查看Docker的磁盘使用具体情况
docker system df
删除 无用的容器和 镜像
# 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
清除所有无容器使用的镜像
注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
docker system prune -a
查找大文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
查找指定docker使用目录下大于指定大小文件
#我这里是查找 /var/lib/docker/overlay2/* 开头的且大于100m的文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'
docker拉取pull速度太慢解决办法
为docker配置国内镜像地址,用于在pull镜像下载加速
1. 创建配置文件daemon.json
在目录/etc/docker/daemon.json下,如果没,则创建该文件
在目录/etc/docker/daemon.json下,如果没,则创建该文件
2. 按如下格式化添加镜像地址
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
3. 添加完重启docker,并使用docker info 命令查看
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info
sudo systemctl restart docker
sudo docker info
查看日志
docker查看日志的三种方式:
1.docker logs --tail=1000 容器名称 (查看容器前多少行的日志)
2.docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/容器ID-json.log)(进入容器内部查看日志)
3.docker attach 容器名称(实时查看,但是CTRL+C强制退出以后也会影响容器的进程,导致强制退出),设置 docker attach --sign-proxy=false 容器名称(实时查看日志内容)
1.docker logs --tail=1000 容器名称 (查看容器前多少行的日志)
2.docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/容器ID-json.log)(进入容器内部查看日志)
3.docker attach 容器名称(实时查看,但是CTRL+C强制退出以后也会影响容器的进程,导致强制退出),设置 docker attach --sign-proxy=false 容器名称(实时查看日志内容)
拉取镜像,启动容器
安装并运行mysql
#拉取镜像
docker pull mysql:5.7
docker pull mysql:5.7
#通过镜像运行容器
docker run -d -p 3306:3306 -v /mydata/mysql/master/conf:/etc/mysql/conf.d -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name 101mysql mysql:5.7
docker run -d -p 3306:3306 -v /mydata/mysql/master/conf:/etc/mysql/conf.d -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name 101mysql mysql:5.7
# -d 是作为守护进程启动
docker run -d
# 服务器真实的端口号映射 : docker 容器中的端口号
-p 3308:3306
# 配置文件的映射
-v /mydata/mysql/master/conf:/etc/mysql/conf.d
# mysql 数据目录映射
-v /mydata/mysql/master/data:/var/lib/mysql
#mysql日志文件映射
-v /mydata/mysql/log:/var/log/mysql
# 账号密码(docker容器内部密码)
-e MYSQL_ROOT_PASSWORD=123456
# 容器的名字
--name linghu-mysql-master
#使用的镜像
mysql:8.0.29
docker run -d
# 服务器真实的端口号映射 : docker 容器中的端口号
-p 3308:3306
# 配置文件的映射
-v /mydata/mysql/master/conf:/etc/mysql/conf.d
# mysql 数据目录映射
-v /mydata/mysql/master/data:/var/lib/mysql
#mysql日志文件映射
-v /mydata/mysql/log:/var/log/mysql
# 账号密码(docker容器内部密码)
-e MYSQL_ROOT_PASSWORD=123456
# 容器的名字
--name linghu-mysql-master
#使用的镜像
mysql:8.0.29
随docker服务启动而自动启动
安装并运行redis
#拉取镜像
docker pull redis
docker pull redis
#新建要映射的文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
#运行容器
docker run -p 6379:6379 --name 101redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
docker run -p 6379:6379 --name 101redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
随docker服务启动而自动启动
子主题
安装ElasticSearch
docker pull elasticsearch:7.4.2
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
#支持远程任何地址访问
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
http.host: 0.0.0.0
冒号后面有个空格
#设置文件权限
chmod -R 777 /mydata/elasticsearch/
chmod -R 777 /mydata/elasticsearch/
启动容器
docker run --name 101elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2
9200端口是发送http请求用
9300是es集群时候,集群通信使用
discovery.type=single-node 单节点模式运行
ES_JAVA_OPTS="-Xms64m -Xmx128m" #分配内存
验证
http://192.168.56.101:9200/
随docker启动而启动
docker update --restart=always 容器Id 或者 容器名
安装ElasticSearch的可视化界面 kibana
docker pull kibana:7.4.2
docker run --name 101kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.101:9200 -p 5601:5601 -d kibana:7.4.2
验证
http://192.168.56.101:5601/
随docker启动而启动
docker update --restart=always 容器Id 或者 容器名
安装nginx
创建 /mydata/nginx文件夹
¥随便启动一个nginx实例,复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
docker run -p 80:80 --name nginx -d nginx:1.10
cd /mydata
#将容器内的配置文件拷贝到当前目录 ,别忘了后面的.
docker container cp nginx:/etc/nginx .
docker container cp nginx:/etc/nginx .
整理nginx结构
docker stop nginx
docker rm nginx
cd /mydata
mv nginx conf
mkdir nginx
mv conf nginx/
docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -v /mydata/nginx/conf:/etc/nginx -d nginx:1.10
设置随docker启动而启动
docker update --restart=always 容器Id 或者 容器名
docker 安装kafka
获取镜像
docker pull bitnami/kafka:3.1.2-debian-11-r26
镜像的官方网站:https://hub.docker.com/
https://hub.docker.com/r/bitnami/kafka
引入gateWay
配置规则
解决全局跨域问题

收藏

收藏
0 条评论
下一页
为你推荐
查看更多