【工具与中间件】Linux-Docker-Mysql下载与配置

Linux Docker Mysql

前言

准备做个新项目用于学习与练手,第0步当然是远程环境的配置了。
这里记录个人的Linux下Docker的下载与Docker下载并运行Mysql。

学习目标

  • 学习Linux下安装Docker
  • Docker下安装Mysql

Linux版本
CentOS7 停止维护,于是此处使用 Rocket Linux

  • RocketLinux,内核版本满足大于Docker所需最小版本3.10
  • 本文示例命令为root用户运行,其它权限的情况读者需要视情况使用sudo

下面我们开始!

1. Docker 下载与安装

1.1 内核版本检查

使用如下命令检查当前Linux的内核版本:

uname -r

如果版本小于 Docker 的最小内核要求 3.10,则需要先更换OS了。一般这种情况现在很少见,绝大多数的云服务器Linux内核版本都支持 Docker

1.2 更新yum

rocket linux 与 centOS 一样,使用的是 yum 作为软件包管理器

yum update

1.3 执行 Docker 安装脚本

curl -sSL https://get.docker.com | sh

官方 docker 手册推荐的安装脚本。若使用该命令无法安装,则参考文末的补充与总结小节,结合其它参考教程,解决网络等原因无法安装的问题。

1.4 检查安装结果

查看docker版本

docker -v

执行后若返回docker版本则说明成功

系统启动docker
检查并启动 docker:

systemctl status docker

systemctl start docker

之后,我们可以设置docker开机自启:

systemctl enable docker 

docker hello-world

docker run hello-world

若我们没有事先将 hello-world pull 下来,这个命令的执行会事先执行docker pull。

出现以下截图所示说明成功:
01

国内的服务器执行上述命令 docker pull 的过程也有可能因为网络等原因报443。遇到该问题的读者也可参考文末的补充与总结小节,结合其它参考教程,解决docker pull 443的问题。

移除 hello-world 容器镜像
考虑到hello-world镜像与容器仅仅是为了验证docker的安装与使用,无别的用途,若读者与我一样有洁癖,可参考如下移除hello-world容器与镜像:

查看当前所有容器并复制 hello-world 的 id:

docker ps -a

移除 hello-world 容器:

docker rm <container id>

查看镜像并复制 hello-world 的 id:

docker images

移除 hello-world 镜像:

docker rmi <image id>

2. Docker-Mysql下载与配置

2.1 docker 下载 mysql

搜索docker hub上的镜像

docker search mysql

我们可以使用 docker search 查看docker hub上的mysql镜像。如果没有指定版本的要求,查看到镜像后即可选择版本pull下来。

指定版本下载

docker pull mysql:8.0

我这里需要用到的是mysql 8.0, 于是我个人采用的是指定版本下载。

查看镜像

docker images

2.2 mysql 配置

下载完 docker 镜像后,我们通常需要做一些配置后再进行挂载。

创建挂挂载目录
例如,我个人是在home下创建mysql挂载目录

cd /home

mkdir -p docker_mysql_conf/config

mkdir -p docker_mysql_conf/data

在config文件夹创建cnf配置文件并配置

vi my.cnf

参考配置:

[mysqld]
# 设置 3306 端口
port = 3306

# 允许最大连接数
max_connections = 1000

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors = 100

# 服务端使用的字符集默认为 UTF8
character-set-server = utf8mb4

# 配置时区 
default_time_zone = '+8:00'

# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB

# 默认使用 mysql_native_password 插件认证
#default_authentication_plugin = mysql_native_password

# 是否对 sql 语句大小写敏感,1:不敏感
#lower_case_table_names = 1

# MySQL 连接闲置超过一定时间后(单位:秒)将会被强行关闭
# MySQL 默认的 wait_timeout 值为 8 个小时, interactive_timeout 参数需要同时配置才能生效
#interactive_timeout = 1800
#wait_timeout = 1800

# Metadata Lock最大时长(秒),一般用于控制 alter 操作的最大时长 sine mysql5.6
# 执行 DML 操作时除了增加 innodb 事务锁外还增加 Metadata Lock,其他 alter(DDL)session 将阻塞
#lock_wait_timeout = 3600

# 内部内存临时表的最大值。
# 比如大数据量的 group by / order by 时可能用到临时表,
# 超过了这个值将写入磁盘,系统 IO 压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4

关于更多更具体的my.cnf配置介绍,篇幅有限,需要读者自行查询

2.3 启动 mysql

查看当前Linux有哪些可用端口
我的个人项目出于安全考虑,需要将mysql服务的端口暴露在3306以外的端口。查看TCP(如SSH等)、UDP与其它正在监听的端口:

netstat -tuln

之后,选择一个目标端口,查看目前是否已被占用或监听:

netstat -tuln | grep :13301

若无返回,那么这个端口一般都是可用的。
若无换端口映射mysql服务的需要,读者可忽略此步。

带参数创建镜像实例

docker run -d -p 13301:3306 \
-v /home/docker_mysql_conf/config:/etc/my.cnf \
-v /home/docker_mysql_conf/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="nutrition_work" --name nutrition_work mysql

这个命令的具体意思是,-d使用docker守护进程后台启动,-p将虚拟机的3306端口映射到当前机器的13301端口,-v选择上面提到过的自定义目录及文件挂载,对应虚拟机里的mysql默认文件。之后,-e设置mysql的root密码属性值,最后–name 后面带别名以及镜像名。

2.4 连接 mysql

若读者和我一样是在服务器上配置的mysql,那么则需要事先提前查看服务器的安全组,确保端口能合理地开放。

此处我使用连接工具直接测试连接:
02

之后,就可以配置到项目里愉快地开发了!

3. 补充与总结

Docker 安装脚本443解决方案

实际上,由于众所周知的原因(特别是2024年6月以来),国内的服务器直接使用此安装脚本通常会报443网络无法连通。

于是我参考了CSDN-解决Docker安装不了的问题这篇文章进行解决。其中主要过程:

  • 安装yum-utils: yum install -y yum-utils
  • 我的服务器在国内,执行以下命令添加repo:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 阿里云的镜像repo截止至发文前尚可用,接着执行:
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

执行后系统会显示下载进度条,最终出现类似以下截图的Complete信息则说明下载完成:
03

Docker pull 443 解决方案

当我们执行 docker pull 命令时可能会因为网络原因出现类似以下报错信息的问题:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Retrying in 1 second
docker: error pulling image configuration: download failed after attempts=6: dial tcp 103.97.3.19:443: i/o timeout.

此时,我们可以给 docker 配置镜像加速器。一般大的服务器厂商都会提供镜像加速服务,此时,我们可以通过阅读其官方文档找到镜像加速的方法。

例如,我的是阿里云,于是我根据阿里云docker镜像加速器文档进行了如下步骤的配置:

etc下创建docker文件夹

mkdir -p /etc/docker

tee命令创建docker daemon.json文件并配置镜像加速url

tee /etc/docker/daemon.json <<-'EOF'

{
  "registry-mirrors": ["https://[your-mirror].mirror.aliyuncs.com"]
}

EOF

注意,这个步骤具体的镜像加速地址,每个用户的镜像工具不一样,需要在各自登录的阿里云镜像容器服务控制台获取。

reload守护进程,重启docker

systemctl daemon-reload

systemctl restart docker

之后,我们再重试docker pull命令,若成功则说明加速器起效,若依然不成功,就可能需要参考其它解决方案进行解决了,例如给服务器设置网络代理。

参考教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值