使用Docker容器运行Mysql实战记录

 更新时间:2023年09月28日 10:30:52   作者:马大胡子  
这篇文章主要给大家介绍了关于使用Docker容器运行Mysql的相关资料,助大家更好的理解和学习使用docker,感兴趣的朋友可以了解下,需要的朋友可以参考下

前言

随着虚拟化技术和云计算的普及,容器技术的优点也逐步体现,软件部署和环境迁移的优势无可替代。

目前Docker已经成为容器技术中的主要代表,恰好涉及需要在liunux系统上部署Mysql数据库用于测试,由于是初次使用docker部署Mysql,所以对其中一些操作进行记录。

一、基础的虚拟机环境

使用虚拟机,安装ubuntu系统,发行版和内核信息如下:

root@ldap:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
root@ldap:/# uname -r
5.15.0-72-generic
root@ldap:/# 

只所以使用ubuntu是因为centos各大镜像站都已经停止维护,在基础系统安装过程中,经常出现一些莫名其妙的问题,虽然可以解决但比较浪费时间。

二、安装过程

安装配置docker

# 安装 docker 和 docker-compose
#先移除docker。其实也不用重装docker,我用的ubuntu里已经安装了完整的docker,但我想用用华为云发布的docker-ce,所以就按说明对原docker进行了移除操作
#如果不是root用户,则需要加sudo,否则不用。
sudo apt remove docker docker-engine dockdocker.io containerd runc
#更新后,安装依赖,apt源已经改为华为镜像源
sudo apt update
sudo apt install  -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
#运行公钥,添加docker软件仓库
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
#安装docker-ce docker-ce-clicontainerd.io
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

#sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#sleep 1
#sudo chmod +x /usr/local/bin/docker-compose
#安装docker-compose
apt install docker-compose docker-compose-plugin -y

#启动docker,开机自启动
systemctl start docker
systemctl enable docker

拉取Mysql镜像

#查看仓库mysql镜像
#docker search mysql
docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   14159     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5408      [OK]       
percona                         Percona Server is a fork of the MySQL relati…   609       [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   802       [OK]       
circleci/mysql                  MySQL is a widely used, open-source relation…   29                   
bitnami/mysql                   Bitnami MySQL Docker Image                      86                   [OK]
bitnami/mysqld-exporter                                                         5                    
ubuntu/mysql
#使用命令docker pull mysql ,默认tag:latest
docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
90e2fb2facff: Pull complete 
ba60eb20fd5f: Pull complete 
4f509402d469: Pull complete 
496c2cfa6815: Pull complete 
8ec1dfa9522c: Pull complete 
6dec7ba896f8: Pull complete 
dc9ff75362b0: Pull complete 
73e4682f9014: Pull complete 
9ffdeecd6fb6: Pull complete 
a4346ccfb53f: Pull complete 
434c13bc32de: Pull complete 
Digest: sha256:d6164ff4855b9b3f2c7748c6ec564ccff841f79a7023db0f9293143481a44b6e
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
   

用docker启动mysql

docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
60bc33b60efa81c32d93e3452fd5fbe3a5d72c4cfc898d77af1a70a83cdd77e5
root@l:/# 
root@l:/# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@:/# 

命令的使用和参数具体解释如下:

1.必要参数:

-p 3306:3306:将宿主主机的3306端口映射到容器的3306端口,使宿主主机可以连接容器内的MySQL服务。

–name mysql:为容器命名为mysql。

2.数据卷配置参数:

  • -v /mydata/mysql/log:/var/log/mysql:将宿主机上的/mydata/mysql/log目录挂载到容器的/var/log/mysql目录下,用于存储MySQL的日志文件。
  • -v /mydata/mysql/data:/var/lib/mysql:将宿主机上的/mydata/mysql/data目录挂载到容器的/var/lib/mysql目录下,用于存储MySQL的数据文件。
  • -v /mydata/mysql/conf:/etc/mysql:将宿主机上的/mydata/mysql/conf目录挂载到容器的/etc/mysql目录下,用于存储MySQL的配置文件。

3.MySQL账户安全参数:

-e MYSQL_ROOT_PASSWORD=root:设置MySQL的root账户密码为root。建议设置复杂的密码。

4.容器启动参数:

-d mysql:lates:使用MySQL:lates镜像,在宿主机后台启动容器,并命名为mysql。

通过以上参数配置,可以实现对MySQL容器的定制化部署,提高应用程序的性能和可靠性。

这时候,返回一串字符“60bc33b60efa81c32d93e3452fd5fbe3a5d72c4cfc898d77af1a70a83cdd77e5”
表示命令正常执行,而且已经运行了Mysql镜像容器。

当然,如果你这样做了,会发现:

#使用docker ps查看不到mysql的进程
docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#加参数-a后是有记录的
# docker ps -a
docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS                  PORTS     NAMES
60bc33b60efa   mysql     "docker-entrypoint.s…"   2 days ago   Exited (1) 2 days ago             mysql

原因是:虽然成功运行的了mysql容器,但是容器中没有在执行的程序,所以容器自动停止了。

你可以根据自己的需要,在启动时添加容器运行参数,例如

#以交互方式运行容器,并加载bash指令集
#docker run -it -p 3306:3306 --name mysql_new1 -e MYSQL_ROOT_PASSWORD=root -d mysql bash
#之前使用centos、ubuntu等基础镜像时,使用参数-it后,会进入到容器内,但这里不知道为什么,命令符还是宿主机的
docker run it -e MYSQL_ROOT_PASSWORD=root -d mysql bash

101258d2fdbf87f97dd533a05f164e2c6ec152e170a497b4ac787723cfc2cc81
# docker ps就可以看到运行容器状态
docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
101258d2fdbf   mysql     "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql_new1

#进入容器:docker exec -it mysql bash
docker exec -it 101 bash
bash-4.4# ls
bin   dev			  entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc		 lib   media  opt  root  sbin  sys  usr

bash-4.4# cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="8.8"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:8:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.8
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.8

#尴尬了,没用过Oracle Linux 8

总结

以上就是我使用docker运行mysql的过程记录,docker的使用使用虽然简单而且便利,但对不同程序镜像运行容器时,还是要对具体要运行的程序有一定的了解,比如mysql,至少要知道一些mysql的使用命令或者参数。

相关文章

  • windows 10安装和使用docker

    windows 10安装和使用docker

    这篇文章介绍了windows 10安装和使用docker的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Docker磁盘空间清理的方法实现

    Docker磁盘空间清理的方法实现

    在使用Docker的过程中,系统会逐渐积累一些无用的垃圾文件,占据宝贵的磁盘空间并影响系统性,本文主要介绍了Docker磁盘空间清理的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • docker部署nodejs开发环境详细步骤(基础示例篇)

    docker部署nodejs开发环境详细步骤(基础示例篇)

    这篇文章主要给大家介绍了docker部署nodejs开发环境详细步骤,docker是一个开源的应用容器引擎,可以为我们提供安全、可移植、可重复的自动化部署的方式,需要的朋友可以参考下
    2023-10-10
  • Elasticsearch使用常见问题解决方案

    Elasticsearch使用常见问题解决方案

    这篇文章主要介绍了Elasticsearch使用常见问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Docker部署web项目的实现

    Docker部署web项目的实现

    这篇文章主要介绍了Docker部署web项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Docker容器化部署尝试——多容器通信(node+mongoDB+nginx)

    Docker容器化部署尝试——多容器通信(node+mongoDB+nginx)

    这篇文章主要介绍了Docker容器化部署尝试——多容器通信(node+mongoDB+nginx),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 解决docker安装jenkins容器内无法访问外网

    解决docker安装jenkins容器内无法访问外网

    这篇文章为大家主要介绍了docker安装jenkins容器内无法访问外网的问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • linux上安装Docker(非常简单的安装方法)

    linux上安装Docker(非常简单的安装方法)

    今天小编就为大家分享一篇关于linux上安装Docker(非常简单的安装方法),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • docker搭建etcd集群方式 bitnami/etcd

    docker搭建etcd集群方式 bitnami/etcd

    这篇文章主要介绍了docker搭建etcd集群方式 bitnami/etcd,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 写给前端的nginx配置指南基于docker所有配置秒级运行(最新讲解)

    写给前端的nginx配置指南基于docker所有配置秒级运行(最新讲解)

    这篇文章主要介绍了写给前端的nginx配置指南基于docker所有配置秒级运行,通过 docker 高效学习 nginx 配置,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06

最新评论