从安装Docker到打包迁移MySQL的完整指南
每一天过得充实,眼中无迷茫,心中无烦恼。日子就会充满希望,岁月就会洒满清欢。
这篇文章将带你从零开始,在CentOS服务器上安装Docker、使用Docker部署MySQL数据库,并打包和迁移MySQL容器到另一台服务器。
1. 安装Docker
Docker是一个用于创建、部署和运行应用程序的开源平台。它允许你将应用程序与其所有依赖项打包成一个称为容器的标准单元。以下是在CentOS上安装Docker的步骤。
1.1 更新系统软件包
首先,更新系统的软件包索引,以确保你有最新的软件包版本。
sudo yum update -y
1.2 安装依赖包
安装一些必要的依赖包,这些包将帮助你管理Docker存储库。
sudo yum install -y yum-utils
1.3 添加Docker存储库
将Docker的官方存储库添加到你的系统中。
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 安装Docker引擎
安装Docker CE(社区版)以及CLI工具和containerd.io。
sudo yum install -y docker-ce docker-ce-cli containerd.io
1.5 启动并设置Docker为开机自启动
启动Docker服务并将其设置为开机自启动。
sudo systemctl start docker
sudo systemctl enable docker
1.6 验证Docker安装
运行以下命令,验证Docker是否已正确安装。
sudo docker run hello-world
如果你看到“Hello from Docker!”的消息,说明Docker安装成功。
在这篇关于从安装 Docker 到打包迁移 MySQL 的指南中,我们将详细介绍 Docker 的安装和使用过程,并包括一些关键配置,如 Docker 镜像加速器的设置。以下是文章的扩展内容,包括如何设置镜像加速器。
2. 配置 Docker 镜像加速器
为了提高 Docker 镜像的下载速度,特别是在网络环境不理想的情况下,设置镜像加速器是一个常见的优化手段。镜像加速器是国内一些高校和组织提供的服务,它们可以加速 Docker Hub 镜像的下载。
2.1 配置 Docker 镜像加速器
要配置 Docker 的镜像加速器,你可以在 Docker 的配置文件中添加以下内容:
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
参数解释
registry-mirrors
:这是一个列表,用于定义 Docker 的镜像加速器地址。当 Docker 拉取镜像时,会首先尝试从这些镜像加速器获取。https://dockerproxy.com
:一个通用的 Docker 镜像加速器。https://docker.nju.edu.cn
:由南京大学提供的镜像服务,加速效果显著。https://docker.mirrors.sjtug.sjtu.edu.cn
:由上海交通大学提供的镜像服务,优化了镜像下载速度。
2.2 如何应用配置
在 CentOS 上,你可以将上述配置添加到 Docker 的配置文件中:
-
打开或创建 Docker 的配置文件
/etc/docker/daemon.json
:sudo nano /etc/docker/daemon.json
-
将上述 JSON 配置粘贴到文件中并保存。
-
重新启动 Docker 以应用更改:
sudo systemctl daemon-reload sudo systemctl restart docker
通过配置镜像加速器,Docker 将优先从指定的加速器地址拉取镜像,极大地提高了镜像下载的速度,特别是在国内环境下,这一步尤为重要。
此部分内容将帮助用户在安装和配置 Docker 时,更有效地进行镜像管理,减少等待时间,提升整体使用体验。
3. 使用Docker部署MySQL
MySQL是一种流行的开源关系数据库管理系统。在Docker中部署MySQL非常简单。以下步骤将引导你如何在Docker中运行MySQL容器。
3.1 拉取MySQL镜像
为了加速镜像的下载速度,建议使用国内的镜像源。以下是从DaoCloud镜像源拉取MySQL官方镜像的命令:
sudo docker pull daocloud.io/library/mysql:8.0
千万千万不要使用下面命令
sudo docker pull mysql:8.0
3.2 运行MySQL容器
使用拉取的MySQL镜像启动一个容器,并将MySQL的3306端口映射到主机的3306端口,以便外部访问。
sudo docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:8.0
参数说明:
--name mysql-container
:指定容器名称为mysql-container
。-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置MySQL的root
用户密码为my-secret-pw
。-p 3306:3306
:将容器内的3306端口映射到主机的3306端口。-d mysql:8.0
:在后台运行MySQL 8.0镜像。
3.3 配置MySQL允许远程访问
进入MySQL容器,允许root
用户从任意主机访问数据库。
sudo docker exec -it mysql-container mysql -uroot -p
在MySQL命令行中,运行以下命令:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'my-secret-pw';
FLUSH PRIVILEGES;
如果你希望创建一个新用户以用于远程访问,可以运行以下命令:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'userpassword';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3.4 防火墙配置(如适用)
如果你的服务器有防火墙,需要确保3306端口对外开放。
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
4. 打包并迁移MySQL容器
当你需要将MySQL容器迁移到另一台服务器时,可以通过Docker的导入和导出功能轻松实现。
4.1 导出MySQL容器
首先,将正在运行的MySQL容器导出为一个.tar
文件。
sudo docker save -o mysql-container.tar mysql-container
这将生成一个包含MySQL容器文件系统的mysql-container.tar
文件。
4.2 将打包文件复制到新服务器
使用scp
或其他文件传输工具将导出的mysql-container.tar
文件传输到目标服务器。
scp mysql-container.tar user@new-server:/path/to/destination
4.3 在新服务器上导入MySQL容器
在新服务器上,首先确保Docker已经安装,然后导入容器。
sudo docker load -i mysql-container.tar
4.4 运行导入的MySQL容器
导入完成后,可以使用以下命令运行容器。
sudo docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d <loaded-image-name>
在Docker中,docker import
和docker load
是两个用于不同场景的命令。它们的区别导致了在某些情况下,docker import
不适合,而docker load
是正确的选择。
5.补充说明
5.1.docker import
和 docker load
的区别
-
docker import
:- 用途:
docker import
用于将一个容器快照(通常是通过docker export
导出的容器文件系统)导入为一个新的镜像。 - 特点:它会忽略导出的容器的历史记录和元数据,只保留文件系统。导入后的镜像将没有与Dockerfile相关的元数据(如标签、环境变量等),并且没有镜像历史记录。
- 使用场景:适合从其他工具或系统中获得的容器快照,但通常不用于正式的镜像迁移。
- 用途:
-
docker load
:- 用途:
docker load
用于从一个.tar
归档文件中加载完整的Docker镜像。这个.tar
文件通常是通过docker save
命令创建的。 - 特点:保留了所有的镜像历史记录、元数据、标签等。导入后,该镜像与通过
docker pull
拉取的镜像一致。 - 使用场景:适合完整的镜像迁移和备份。
- 用途:
5.2. 为什么docker load
是更好的选择
当你使用docker export
导出一个运行中的容器时,它只会导出容器的文件系统,不包含镜像的历史和元数据。因此,在某些情况下,使用docker import
导入时会丢失这些信息,这对于后续使用和管理可能是不利的。
相比之下,使用docker save
和docker load
来迁移镜像,可以确保镜像的完整性,包括所有历史、标签和元数据。这种方法适合需要在不同环境之间迁移的镜像,确保迁移后的一致性和可用性。