文章目录
Doceker下载文件夹
下载下的文件夹和各个文件夹存放文件种类:目录说明
目录默认路径:var/lib/docker/
Docker命令
(实例:Mysql使用)
镜像拉取
- 官网(dockerHub)查询,tags显示历史版本选择
- 切换su模式拉取
- 查看镜像
- 删除镜像
#拉取
sudo docker pull mysql:8.0
#查看
docker images
# 删除
docker rmi -f mysql:8.0
容器运行启动测试
#
docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
# 查看进程
docker ps -a
# 停止容器,删除进程
docker stop id
docker rm -f id
容器启动成功则显示容器唯一id
- -p 3306:3306:指定端口映射,主机端口:容器映射端口
- –name mysql8.0:指定容器的名称为 “mysql8.0”。同意命令不同端口,不同名称可启动多个容器。
- -e MYSQL_ROOT_PASSWORD=root:设置一个名为 MYSQL_ROOT_PASSWORD 的环境变量,并将其值设置为 “root”。这将为 MySQL 的 root 用户设置密码为 “root”。可以根据需要更改密码。
- -d :后台运行
- mysql:8.0 :放最后,镜像名若没有会从dockerHub拉取
启动容器交互界面
- 相当windows的cmd,打开容器bash或者shell
# mysql容器交互启动
docker exec -it mysql8.0 bash
# 登录mysql
mysql -uroot -proot
容器退出
关闭容器并退出
exit
直接退出不停止容器:
Ctrl + P + Q
改动及配置(my.cnf)
对于MySQL容器的一些配置问题
- run命令中给到了容器一些简单的配置,而mysql的配置显然没那么简单还需要修改。对于初始首先尝试的是对容器的停止和删除的尝试,再重新设置启动,但容器的删除会导致数据的丢失,所以需要进行一些重要文件的备份,也就是卷的挂载,将容器内部的一些重要文件夹对应linux创建挂载文件保存文件,同时也可在为文件下设置一些配置文件,例如docker-compose.yml文件配置启动设置,再使用Docker Compose 启动容器,相对重复创建Mysql容器来说相对简单明了,命令可在docker-compose.yml文件夹下使用docker-compose up -d进行启动。
docker run -p 3306:3306 --name mysql8.0 --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
–restart=always 总是跟随docker启动
–privileged=true 获取宿主机root权限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
配置参考配置非常详细,目录划分也比较清晰:原文链接:https://blog.csdn.net/hh303392049/article/details/131752617
创建编辑/usr/local/mysql/conf下my.cnf文件
vi /usr/local/mysql/conf/my.cnf
#于MySQL客户端的默认字符集
[client]
default-character-set=utf8
#MySQL命令行客户端的默认字符集
[mysql]
default-character-set=utf8mb4
[mysqld]
#设置为 '+8:00' 表示服务器时区为东八区
default-time_zone = '+8:00'
#语句设置连接的排序规则为 utf8_unicode_ci;语句设置连接的字符集为 utf8
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
#MySQL服务器使用的默认字符集设置为 utf8;服务器使用的默认排序规则设置为 utf8_unicode_ci。
character-set-server=utf8
collation-server=utf8_unicode_ci
#客户端和服务器之间的字符集设置不一致时,MySQL服务器将不会与客户端进行字符集握手协商
skip-character-set-client-handshake
错误点申明:
为了保证数据持久化,我们通常挂载/usr/local/mysql/data作为Mysql的数据存放地址,这在数据库删除后文件依旧存在,那么在运行5.7和8.0两个不同版本的mysql时会有些问题,因为两个版本数据存储格式有所不同,导致启动时若原来版本的数据还存在,格式又不一致,会引起闪退或者无法启动的问题,此时可查看logs验证,若出现类似:
InnoDB: Assertion failure in thread 140336087447360 in file ut0ut.cc line 921
错误信息,可先删除开始版本的/usr/local/mysql/data下的数据,再重启运行。
Docker Compose使用尝试
- 对于上面提到的yml文件直接配置,并直接使用docker compose启动方法尝试,试想一个配置文件随意放个文件夹然后改下原有配置,一行代码启动,然后bash界面直接上手使用也是相当高效的。
- 安装docker docker compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
下载并保存到 /usr/local/bin/docker-compose
- 授权Docker compose 执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 确保 /usr/local/bin 路径已添加到系统的 PATH 环境变量中。这样系统就能够找到并执行 docker-compose 命令。如果未添加,可以编辑 .bashrc 或 .bash_profile 文件,并在其中添加以下行:
export PATH="/usr/local/bin:$PATH"
保存文件后,运行以下命令使更改生效:
source ~/.bashrc
source ~/.bash_profile
- 查看版本号
docker-compose --version
- docek-compose.yml文件模板
version: '2'
services:
mysql:
image: mysql:8.0
ports:
- 3307:3306
restart: always
privileged: true
volumes:
- /usr/local/mysql/log:/var/log/mysql
- /usr/local/mysql/data:/var/lib/mysql
- /usr/local/mysql/conf:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=root
container_name: mysql8.0
- 成功还是挺好用的
- 查看一下配置文件中设置的挂载目录是否存在
完整步骤
#创建一个文件夹
mkdir dockerCompose
#修改复制yml配置内容
vi docker-compose.yml
#该文件夹下启动
docker-compose up -d
#交互启动
docker exec -it mysql801 bash
#配置时钟
vi /usr/local/mysql/conf/my.cnf
(redis实例配置)
1.拉取镜像:redis
2.检验镜像
3. 修改redis.conf文件(不创建的化在挂载时对应文件找不到默认会创建名为redis.conf文件夹,而不是文件)
4. 修改.conf文件:参照Redis官网Configuration文档
5. 设置挂载目录启动redis
6. 查看容器运行状态
7. 检验挂载目录和交互连接redis数据库
docker pull redis:7.2.1
docker images
#
mkdir -p /usr/local/redis/conf
touch /usr/local/redis/conf/redis.conf
#
vi /usr/local/redis/conf/redis.conf
#
docker run -p 6379:6379 --name redis721 --privileged=true \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:7.2.1 redis-server /etc/redis/redis.conf
#
docker exec -it redis721 redis-cli
auth redis
- redis.conf
设置AOF持久化文件默认存放路径
设置AOF持久化开启
requirepass redis
bind 0.0.0.0
protected-mode no
appendonly yes
port 6379
dir /data/
appendonly yes
问题请教(可留言感谢)
问题描述:主机无法连接docker创建的redis容器。。。
具体:
首先要说明的是在vagrant构建的虚拟机下使用的docker交互连接redis虚拟机完全没有问题。配置文件挂载,数据文件夹挂载都没有问题,ps进程也都没有问题,但所有都弄好后想要在主机可视化界面连接虚假机下配置好的redis就出现了问题,无法连接到服务器。
- 排查1(容器启动问题,是否没有成功启动,或者)
最开始的想法,所以重启了好几次,进去容器连接测试了几遍没问题
- 排查2:防火墙问题
关闭了主机防火墙,主机连接虚拟机出栈设置排查也没毛病,虚拟机先看端口6379没毛病
- 排查3:虚拟机ip
网上常见解决描述,都尝试了一下,一种直接注解掉bind,第二种就是设置成bind 0.0.0.0,第三种就是设置bind 127.0.0.1 容器ip都尝试没用
- 排查4:启动时以redis.conf为后缀条件启动,文件是否有问题
官网下载了官方配置同步了配置文件,虚拟机和容器同步没问题,设置一些参数也没问题,但还是没用,后来还是改回上文的一些基本配置感觉开始也够用,没办法改起来也方便。
大部分是可参考和用的,最后redis连接问题希望有遇到相同的能帮下的评论留言,感谢!!比心!