前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维实践|如何使用docker离线安装mysql

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

原创
作者头像
Aion
发布2024-02-27 23:04:57
5170
发布2024-02-27 23:04:57
举报

前言

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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1 环境准备
    • 1.1 检查环境
      • 1.2 安装docker
      • 2 联网拉取镜像
        • 2.1 拉取远程镜像
          • 2.2 检查拉取镜像
          • 3 保存镜像到本地
          • 4 离线环境实践
            • 4.1 装载镜像
              • 4.2 创建mysql容器
                • 4.3 连接到容器
                  • 4.4 测试安装是否成功
                  • 总结
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com