运维实践|如何使用docker离线安装mysql

2024-02-27 23:04:57 浏览数 (1)

前言

docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个隔离的容器,然后在任何操作系统中运行。MySQL是一个流行的开源关系型数据库管理系统。本文将介绍拉取镜像、保存镜像、创建容器、启动应用容器以及测试。

1 环境准备

  • 本机器macOS 13.2
  • Homebrew 3.6.15 (在macOS中主要是使用brew命令来安装docker)
  • 终端(我这里使用iTerm2来代替)

1.1 检查环境

打开终端,如果没有就安装一个。在终端中,使用docker info或者docker version来检查是否安装docker工具,如果已经安装,请直接拉取。

1.2 安装docker

如果没有安装镜像工具,那么我们可以使用homebrew来安装一个docker,可以执行search,然后找到docker执行安装命令 docker install docker 即可。

代码语言:javascript复制
$ brew search docker
Warning: Unexpected method 'on_sonoma' called on Cask safari-technology-preview.
Follow the instructions here:
  https://github.com/Homebrew/homebrew-cask#reporting-bugs
==> Formulae
chipmk/tap/docker-mac-net-connect       docker-compose-completion               docker-machine-completion               docker-machine-parallels                lazydocker
docker                                  docker-credential-helper                docker-machine-driver-hyperkit          docker-slim                             powerman-dockerize
docker-buildx                           docker-credential-helper-ecr            docker-machine-driver-vmware            docker-squash                           wenjunxiao/brew/docker-accessor
docker-clean                            docker-gen                              docker-machine-driver-vultr             docker-swarm                            wenjunxiao/brew/docker-connector ✔
docker-completion                       docker-ls                               docker-machine-driver-xhyve             docker2aci                              mockery
docker-compose                          docker-machine                          docker-machine-nfs                      dockerize

==> Casks
docker                                  docker-edge                             docker-toolbox                          dockey                                  dozer

2 联网拉取镜像

2.1 拉取远程镜像

在联网状态下,当我们使用docker拉取远程镜像,并指定版本即可。例如我这里想要拉取远程的mysql-8.0.31 ,然后我们使用啦去命令 docker pull mysql:8.0.31 。下面是实践:

代码语言:javascript复制
$ docker pull mysql:8.0.31
8.0.31: Pulling from library/mysql
0ed027b72ddc: Pull complete
0296159747f1: Pull complete
3d2f9b664bd3: Pull complete
df6519f81c26: Pull complete
36bb5e56d458: Pull complete
054e8fde88d0: Pull complete
f2b494c50c7f: Pull complete
132bc0d471b8: Pull complete
135ec7033a05: Pull complete
5961f0272472: Pull complete
75b5f7a3d3a4: Pull complete
Digest: sha256:3d7ae561cf6095f6aca8eb7830e1d14734227b1fb4748092f2be2cfbccf7d614
Status: Downloaded newer image for mysql:8.0.31
docker.io/library/mysql:8.0.31

这个阶段会有一个等待时间,等所有的拉取都执行完成后,会打印一些镜像信息,例如版本签名(Digest)、拉取镜像状态以及镜像的版本(Status)。

默认情况下,docker会拉取镜像的最新版本,当我们执行 docker pull mysql 命令等同于 docker pull mysql:latest,他们都是拉取镜像库最新的版本。

2.2 检查拉取镜像

可以使用 docker images 来再次确认是否成功拉取、下载镜像。如果不知道想要的版本,可以去docker的官方仓库查询一下https://hub.docker.com/_/mysql/tags?page=1&name=8.0.31

代码语言:javascript复制
$ docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE 
……
mysql           8.0.31    7484689f290f   14 months ago   538MB
mysql           latest    3218b38490ce   2 years ago     516MB
……

3 保存镜像到本地

检查拉取的镜像没有问题后,需要将MySQL镜像导出为文件,提供给其他无网络环境安装使用。

导出文件格式

docker save -o [保存文件全路径] [镜像名称]:[镜像版本]

一般情况下,我们会将MySQL镜像保存为tar文件,名称和版本作为镜像名称,例如:

代码语言:javascript复制
$ docker save -o /Users/Aion/mysql-8.0.31.tar mysql:8.0.31
$ cd /Users/Aion
$ ll

4 离线环境实践

4.1 装载镜像

上传或者拷贝镜像文件到服务器的某一个位置,当然这里的离线服务器也需要安装docker环境,安装完成后,使用docker load命令来装载即可。为了方便演示,我们将本地的镜像中的mysql删除即可,删除命令为 docker image rm [镜像容器ID|镜像名称:镜像版本]

代码语言:javascript复制
$ docker image rm 3218b38490ce
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
$
$ docker image rm mysql:8.0.31
Untagged: mysql:8.0.31
Untagged: mysql@sha256:3d7ae561cf6095f6aca8eb7830e1d14734227b1fb4748092f2be2cfbccf7d614
Deleted: sha256:7484689f290f1defe06b65befc54cb6ad91a667cf0af59a265ffe76c46bd0478
Deleted: sha256:fb249074ba1621ae2f0021b89488f93d6d591fd42f8bbc760be96a653d18a066
Deleted: sha256:d7912527c048a7e206c51080f7f1b6b6c383ac8954e3da7d113b00d0a96c7044
Deleted: sha256:994f05094d147f16e330dd7c9afd5e1472fbf1ce1038eb707e379ae507de6167
Deleted: sha256:1337fe7eaf3ed7bac1f1842205c3c80466781cf2ed39d755043a24939a9c4408
Deleted: sha256:4524762c7e21412b3fef00e189fe6b81e78f2751fef4f30355018dc3ab5f3cf2
Deleted: sha256:5222c8df3c5115dcf6c3bb957d5160d5d7124437fa2f214368d67b8e1e6d670e
Deleted: sha256:169fcf64e0d193fda3e49267b454ddeb4083f05e70bbcbbc6de2798944c3e555
Deleted: sha256:bc87451b8005b06fa948e48c2644bc42107cf037499d15dad7f341064035dfc2
Deleted: sha256:93c1acbf3bfcdd2a82a68687481569a07d619469a596b5f017f17cc092498eef
Deleted: sha256:29bd3d7c6e1683e422776b9d3285e8a3f1272f07656fc63a941cb7729a169100
Deleted: sha256:d3cc7b6aa7bc15725c1a856ce06fe436da3fbccf0c9c06b04e45f79b3439c154
$

装载过程界面如下所示:

装载提示信息成功后,我们检查下docker中是否准确装载,从下面的信息中,我们看到mysql被装载到docker环境中。

代码语言:javascript复制
$ docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE 
……
mysql           8.0.31    7484689f290f   14 months ago   538MB
……

4.2 创建mysql容器

万事俱备,只欠东风。下面的操作步骤如我们在其他linux或windows中的操作类似。我们使用docker创建一个mysql的容器,其实是一个类似存放mysql的环境。

  • 格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

如果不需要挂载则直接使用命令创建容器,并返回创建的容器的ID:

代码语言:javascript复制
$ docker run --name mysql -p 13306:13306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31
1b794ee4a9e6b56244cbb561b7fce88ff20a1b5dae3cd0827bd2812199d99787

如果需要挂载,例如我这里需要挂载已经装载的mysql镜像

代码语言:javascript复制
docker run --name mysql -p 13306:13306 
-v /var/mysql/log:/var/log/mysql 
-v /var/mysql/data:/var/lib/mysql 
-v /var/mysql/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31

参数解释和说明:

  • --name mysql:指定容器的名称。
  • -p 13306:13306 :将容器的13306端口映射到主机的13306端口,冒号前面是宿主机的端口,冒号后面是容器内部端口。
  • -v /var/mysql/conf/my.cnf:/etc/my.cnf: 将配置文件夹挂载到主机。
  • -v /var/mysql/log:/var/log/mysql: 将日志文件夹挂载到主机。
  • -v /var/mysql/data:/var/lib/mysql: 将数据配置文件夹挂载到主机。
  • -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码为123456。
  • -d mysql:8.0.31 :后台运行容器,并返回容器id。

4.3 连接到容器

连接容器,其实就类似我们使用mysql命令连接到mysql服务端,连接容器的格式如同非容器时差不多:

docker exec -it [容器名称] mysql -uroot -p

  • 容器名称:上述所讲到的--name后的参数
  • 其他参数:同mysql连接一致

执行结果如下:

代码语言:javascript复制
$ docker exec -it mysql  mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

4.4 测试安装是否成功

为了验证是否成功,我们可以执行一些命令来验证是否成功。

代码语言:javascript复制
mysql> 
mysql> select version();
 ----------- 
| version() |
 ----------- 
| 8.0.31    |
 ----------- 
1 row in set (0.00 sec)

mysql>
mysql> show databases;
 -------------------- 
| Database           |
 -------------------- 
| information_schema |
| mysql              |
| performance_schema |
| sys                |
 -------------------- 
4 rows in set (0.01 sec)

mysql>

总结

通过上面的实践,是否学会了如何在离线环境中使用Docker拉取MySQL镜像,并在离线环境中使用Docker创建、连接、使用MySQL容器。Docker提供了便捷的方式来搭建和管理容器化的MySQL环境,使得开发和部署变得更加灵活和可靠。还有一方面就是起到了隔离性,避免因为硬件问题导致的一些问题,尤其是arm内核下遇到的很多问题。


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞