docker基本知识
- 每个docker都相当于一个小的linux,每个容器都是一个完整的运行环境
安装docker依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker引擎、客户端、容器
sudo yum install docker-ce docker-ce-cli containerd.io
启动 Docker
//设置docker开机自启
sudo systemctl enable docker
//启动docker
sudo systemctl start docker
//重启docker
sudo service docker restart
检查Docker
docker -v
查看docker下载那些镜像
//如权限不够加上sudo(超级管理员)
sudo docker images
配置阿里云镜像加速
//(第一条命令) 创建目录
sudo mkdir -p /etc/docker
//(第二条命令)配置镜像加速器地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://amnron55.mirror.aliyuncs.com"]
}
EOF
// 重启docker后台线程
sudo systemctl daemon-reload
//重启docker服务
sudo systemctl restart docker
以后使用docker下载的所有的镜像都是使用阿里云镜像下载,比较快
使用docker下载mysql5.7
sudo docker pull mysql:5.7
- 检查是否下载成功
sudo docker images
- 挂载mysql配置的目录(注意一起执行)(如果之前Linux安装了mysql导致linux的3306端口已经被占用,则需要将3306端口修改成其他的,过着修改之前的mysql端口)
docker run -p 3306:3306 --name mysql \
--restart=always \
--privileged=true \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=lby \
-d mysql:5.7
- 修改之前linux安装的mysql端口号(非按安装步骤)
// 使用vi编辑器将linux原本安装的mysql的端口号修改成其他的
vi /etc/my.cnf
//重启mysql
/etc/init.d/mysqld restart
- 删除docker中的容器(不是安装过程当中的步骤)
docker rm 容器的id
解析:(将容器内部的一些配置,映射到Linux上,相当于把容器中安装mysql的配置在Linux上的制定文件夹创建了一个快捷方式,修改Linux上的文件,等于修改了mysql的文件)
- -v:目录挂载,-e:在启动容器的时候给mysql设置一些参数,-d:以后台方式运行,指定以那个镜像启动mysql
- docker run -p 3306:3306 --name mysql :将容器的3306端口映射到Linux服务器的3306端口,并将容器起一个名字
- -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
- -v /mydata/mysql/data:/var/lib/mysql:将mysql持久化的数据文件挂载到Linux主机
- -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
- -e MYSQL_ROOT_PASSWORD=lby:设置root用户密码为lby
- 查看docker中的容器所有正在运行的容器
docker ps
- 查看docker中的容器所有容器(包括未运行的)
docker ps -a
- 查看docker容器的日志
//首先使用docker ps -a 查看容器,然后复制容器的container id
docker logs 18677843114d
- docker 停止容器
docker stop 容器的id
- 使用远程连接工具连接mysql
- 进入docker下的mysql容器
// 进入mysql容器并使用控制台
docker exec -it mysql /bin/bash
//结果,通过结果发现,容器内部的目录和linux的相似,说明容器就相当于小型的Linux
root@18677843114d:/# ls
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- 查看mysql安装在容器的位置
root@18677843114d:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
- 退出容器
exit
- 查看Linux挂载的docker安装的mysql相关文件
[root@iZ2zehx0enix3k2e49guqoZ log]# cd /mydata/mysql/
[root@iZ2zehx0enix3k2e49guqoZ mysql]# ls
conf data log
- 以后想要查看docker安装的mysql容器的配置或者修改文件,就无需进入docker容器内部修改,直接在Linux上映射的文件就可以直接查看或者修改了
- 修改docker容器中挂载在外部的mysql的配置
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8_unicode_cli'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
// 已经挂载成功了
[root@iZ2zehx0enix3k2e49guqoZ conf]# docker exec -it mysql bash
root@fbfd14e7a2ff:/# cd /
root@fbfd14e7a2ff:/# ls
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fbfd14e7a2ff:/# cd etc/mysql/
root@fbfd14e7a2ff:/etc/mysql# ls
my.cnf
- 设置docker下的mysql自动启动
docker update mysql --restart=always
docker安装Redis
- 下载redis镜像
docker pull redis
- 创建redis配置文件夹
mkdir -p /mydata/redis/conf/
- 创建redis配置文件(不创建文件夹,linux会把redis.conf当成目录,挂载不上)
touch /mydata/redis/conf/redis.conf
- 启动redis并挂载redis配置文件
docker run -p 6379:6379 --name redis
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
- 启动redis客户端e
docker exec -it redis redis-cli
- 持久化redis(redis数据存在内存中,如果不持久化,退出redis之后,就获取不到reids存的值,所以需要进行在外部的redis挂载目录进行持久化配置)
//进入Linux挂载的redis文件夹,使用vi编辑reids.conf配置文件,输入以下命令
appendonly yes
- 测试是否持久化成功
//连接redis客户端
docker exec -it redis redis-cli
// 设置值
set a "a"
//获取值
get a
//退出redis
exit
//重启redis
docker restart redis
//连接redis客户端
docker exec -it redis redis-cli
//获取值(发现配置成功)
127.0.0.1:6379> get a
"a"
// 配置redis密码
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass lby
OK
- 在docker中查找my.cnf位置
mysql --help | grep my.cnf
- 设置docker下的redis自动启动
docker update redis --restart=always