Docker 安装与操作 Mysql 数据库快速入门

目录

演示环境说明

Mysql 镜像检索

Mysql 镜像下载

Mysql 容器运行

错误运行方式

正确运行方式

端口映射

连接测试

高级命令·指定编码运行


演示环境说明

1、《 Docker 镜像操作 常用命令》中说明了如何从 Docker Hub 上下载镜像,《 Docker 容器操作 常用命令》中说明了如何启动容器

2、本文将以完整的安装 MySQL 为例将 镜像与 容器 操作完全串联起来

3、系统为 CentOS 7.5 发行版,内核为 3.10 版本,Docker 为 1.13 版本

[root@localhost ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.5.1804 (Core) 
Release:	7.5.1804
Codename:	Core
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      dded712/1.13.1
 Built:           Tue Jul 17 18:34:48 2018
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      dded712/1.13.1
 Built:           Tue Jul 17 18:34:48 2018
 OS/Arch:         linux/amd64
 Experimental:    false
[root@localhost ~]# 

4、此时 docker 中还只有一个 docker.io/tomcat 镜像,需要重新下载 Mysql 镜像

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    8.5.32              5808f01b11bf        3 days ago          463 MB
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat1
[root@localhost ~]# 

Mysql 镜像检索

1、就下载第一个 docker.io/mysql 官方发行版

[root@localhost ~]# docker search mysql
INDEX       NAME                                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                                                  MySQL is a widely used, open-source relati...   6749      [OK]       
docker.io   docker.io/mariadb                                                MariaDB is a community-developed fork of M...   2150      [OK]       
docker.io   docker.io/mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   495                  [OK]
docker.io   docker.io/percona                                                Percona Server is a fork of the MySQL rela...   360       [OK]       
docker.io   docker.io/zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       114                  [OK]
docker.io   docker.io/hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          93                   
docker.io   docker.io/zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   62                   [OK]
docker.io   docker.io/centurylink/mysql                                      Image containing mysql. Optimized to be li...   60                   [OK]
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          43                   [OK]
docker.io   docker.io/centos/mysql-57-centos7                                MySQL 5.7 SQL database server                   38                   
docker.io   docker.io/mysql/mysql-cluster                                    Experimental MySQL Cluster Docker images. ...   33                   
docker.io   docker.io/tutum/mysql                                            Base docker image to run a MySQL database ...   32                   
docker.io   docker.io/schickling/mysql-backup-s3                             Backup MySQL to S3 (supports periodic back...   20                   [OK]
docker.io   docker.io/bitnami/mysql                                          Bitnami MySQL Docker Image                      16                   [OK]
docker.io   docker.io/zabbix/zabbix-proxy-mysql                              Zabbix proxy with MySQL database support        15                   [OK]
docker.io   docker.io/linuxserver/mysql                                      A Mysql container, brought to you by Linux...   14                   
docker.io   docker.io/centos/mysql-56-centos7                                MySQL 5.6 SQL database server                   9                    
docker.io   docker.io/circleci/mysql                                         MySQL is a widely used, open-source relati...   6                    
docker.io   docker.io/openshift/mysql-55-centos7                             DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
docker.io   docker.io/dsteinkopf/backup-all-mysql                            backup all DBs in a mysql server                4                    [OK]
docker.io   docker.io/mysql/mysql-router                                     MySQL Router provides transparent routing ...   2                    
docker.io   docker.io/openzipkin/zipkin-mysql                                Mirror of https://quay.io/repository/openz...   1                    
docker.io   docker.io/ansibleplaybookbundle/mysql-apb                        An APB which deploys RHSCL MySQL                0                    [OK]
docker.io   docker.io/cloudfoundry/cf-mysql-ci                               Image used in CI of cf-mysql-release            0                    
docker.io   docker.io/cloudposse/mysql                                       Improved `mysql` service with support for ...   0                    [OK]
[root@localhost ~]# 

2、可以从 Docker Hub 上查看 所有 Mysql 的版本 ,同理也可以查询各个版本使用的详细命令

Mysql 镜像下载

[root@localhost ~]# docker pull mysql:5.5
Trying to pull repository docker.io/library/mysql ... 
5.5: Pulling from docker.io/library/mysql
be8881be8156: Pull complete 
c3995dabd1d7: Pull complete 
9931fdda3586: Pull complete 
bb1b6b6eff6a: Pull complete 
a65f125fa718: Pull complete 
b5332dacc087: Pull complete 
77378af32110: Pull complete 
c863c888ab89: Pull complete 
970e89bcad84: Pull complete 
199374dd7b11: Pull complete 
daf925b4c8c8: Pull complete 
Digest: sha256:973d09f802e90069f4090578bbfb5f1cc095d5c14bdd0bb2651d5e448751f907
Status: Downloaded newer image for docker.io/mysql:5.5
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    8.5.32              5808f01b11bf        3 days ago          463 MB
docker.io/mysql     5.5                 c43b4117afc4        2 weeks ago         205 MB
[root@localhost ~]# 

Mysql 容器运行

错误运行方式

1、如下所示演示的是 Mysql 镜像运行时没有指定 密码而导致异常退出启动失败的情况

2、通过 docker logs container-name/container-id 命令 查看日志已经提醒的很明显了,必须指定  root  密码、或者允许密码为空、或者使用随机密码

3、最后将此错误的容器删除掉:docker rm container-id

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    8.5.32              5808f01b11bf        3 days ago          463 MB
docker.io/mysql     5.5                 c43b4117afc4        2 weeks ago         205 MB
[root@localhost ~]# docker run --name mysql01 -d mysql:5.5
fb1c96d110c715034c263185e40f066dc688e2284c02c250243e25c017cf872b
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
fb1c96d110c7        mysql:5.5           "docker-entrypoint..."   9 seconds ago       Exited (1) 6 seconds ago                        mysql01
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                       myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                       myTtomcat1
[root@localhost ~]# docker logs fb1c96d110c7
error: database is uninitialized and password option is not specified 
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
[root@localhost ~]# docker rm fb1c96d110c7
fb1c96d110c7
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat1
[root@localhost ~]# 

正确运行方式

1、Docker Hub 上 Mysq 官方 提供的启动命令如下所示 ,需要使用 -e 参数指定 roor 账户密码进行启动:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.5
3a896a0867265c59d84d209a93d60f3d837b4667c649981eb3933e997a459c55
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
3a896a086726        mysql:5.5           "docker-entrypoint..."   3 seconds ago       Up 2 seconds                3306/tcp            mysql01
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                       myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                       myTtomcat1
[root@localhost ~]# 

2、如上所示,此时 mysql 容器运行是成功的,但是《 Docker 容器操作 常用命令》中已经说过,此时启动的 3306 端口是 Mysql 镜像在容器内部的端口,外部访问必须进行端口映射,再次删除此无效的容器。

[root@localhost ~]# docker stop 3a896a086726
3a896a086726
[root@localhost ~]# docker rm 3a896a086726
3a896a086726
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"   44 hours ago        Exited (143) 43 hours ago                       myTtomcat1
[root@localhost ~]# 

端口映射

1、端口映射加上 -p 参数即可,可以参考《 Docker 容器操作 常用命令》,因为 CentOS 服务器本身外部已经安装了 Mysql 已经占用了 3306 端口,所以使用 3307 映射 Docker 容器中的 3306 端口

[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:5.5
2aad1d2a8e76261715ac0f1d4ef03217ae54866db479d26b81364a39e2ec3801
[root@localhost ~]# netstat -ntlpu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1041/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1188/master         
tcp6       0      0 :::33060                :::*                    LISTEN      1308/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      1308/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      2892/docker-proxy-c 
tcp6       0      0 :::22                   :::*                    LISTEN      1041/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1188/master         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           857/dhclient        
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
2aad1d2a8e76        mysql:5.5           "docker-entrypoint..."   14 seconds ago      Up 14 seconds               0.0.0.0:3307->3306/tcp   mysql01
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 44 hours ago                            myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                            myTtomcat1
[root@localhost ~]# 

2、如上所示做了端口映射后,就可以从外部访问 Docker 容器内部的 Mysql 了,但是如果要从 CentOS 服务器外部访问,则还需要 CentOS 服务器开放 3307 端口

[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp
[root@localhost ~]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp 3307/tcp
[root@localhost ~]# 

连接测试

1、如下所示,从 Windows 上使用 Navicat 连接虚拟机 CentOS 中 Docker 中的 Mysql

高级命令·指定编码运行

1、例如,如果要更改所有表的默认编码和排序,使用UTF-8(UTF8Mb4),只需使用如下命令运行

2、更多命令,请参考官方文档:https://hub.docker.com/r/library/mysql/

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值