docker安装mysql

docker安装mysql

1、首先在docker官网下载mysql,执行命令:

docker pull mysql

[root@localhost ~]# docker pull mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
80369df48736: Already exists 
e8f52315cb10: Already exists 

Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee
Status: Downloaded newer image for docker.io/mysql:latest


[root@localhost ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat           latest              882487b8be1d        2 weeks ago         507 MB
docker.io/mysql            latest              c8ee894bd2bd        2 weeks ago         456 MB
docker.io/redis            latest              de25a81a5a0b        2 weeks ago         98.2 MB
docker.io/dordoka/tomcat   latest              1518b2f222d6        7 months ago        803 MB
[root@localhost ~]# 

2、启动mysql命令:

docker run --name mysql01 -d mysql

[root@localhost ~]# docker run --name mysql01 -d mysql
ff2dd1924ebfde0f05356cb7e806cb7f23aa4de36becb8495b7ced798cf8d57e
[root@localhost ~]# 

3、查看运行中的命令:

docker ps

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
0233e74e51ba        tomcat              "catalina.sh run"        20 minutes ago      Up 20 minutes       0.0.0.0:8890->8080/tcp   infallible_mestorf
821cd14027d9        tomcat              "catalina.sh run"        20 minutes ago      Up 20 minutes       0.0.0.0:8889->8080/tcp   objective_pare
f6100f2a584e        tomcat              "catalina.sh run"        35 minutes ago      Up 35 minutes       0.0.0.0:8888->8080/tcp   quizzical_wilson
3220de32dc86        docker.io/redis     "docker-entrypoint..."   40 minutes ago      Up 40 minutes       0.0.0.0:6379->6379/tcp   myredis
561cd11445dd        tomcat:latest       "catalina.sh run"        55 minutes ago      Up 55 minutes       8080/tcp                 mytomcat
[root@localhost ~]# 

发现没有用mysql01,我们可以查看所有的运行容器,执行命令:

docker ps -a

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
ff2dd1924ebf        mysql               "docker-entrypoint..."   4 minutes ago       Exited (1) 4 minutes ago                               mysql01
0233e74e51ba        tomcat              "catalina.sh run"        22 minutes ago      Up 22 minutes                 0.0.0.0:8890->8080/tcp   infallible_mestorf
821cd14027d9        tomcat              "catalina.sh run"        23 minutes ago      Up 23 minutes                 0.0.0.0:8889->8080/tcp   objective_pare
f6100f2a584e        tomcat              "catalina.sh run"        37 minutes ago      Up 37 minutes                 0.0.0.0:8888->8080/tcp   quizzical_wilson
3220de32dc86        docker.io/redis     "docker-entrypoint..."   43 minutes ago      Up 43 minutes                 0.0.0.0:6379->6379/tcp   myredis
561cd11445dd        tomcat:latest       "catalina.sh run"        57 minutes ago      Up 57 minutes                 8080/tcp                 mytomcat
1f398fad64d7        tomcat              "catalina.sh run"        About an hour ago   Exited (143) 47 minutes ago                            stupefied_hamilton
[root@localhost ~]# 

4、查看mysql容器的日志,执行命令:

docker logs

[root@localhost ~]# docker logs ff2dd1924ebf 

2019-11-04 04:34:18+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2019-11-04 04:34:20+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2019-11-04 04:34:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2019-11-04 04:34:20+00:00 [ERROR] [Entrypoint]: 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 run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 ‐d mysql

[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
/usr/bin/docker-current: Error response from daemon: Conflict. The container name "/mysql01" is already in use by container ff2dd1924ebfde0f05356cb7e806cb7f23aa4de36becb8495b7ced798cf8d57e. You have to remove (or rename) that container to be able to reuse that name..
See '/usr/bin/docker-current run --help'.

从上面提示发现container name 冲突。

解决方案:
1、首先执行docker ps,没发现mysql01

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

2、查看发现mysql01使用命令:

docker ps -l

[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
ff2dd1924ebf        mysql               "docker-entrypoint..."   3 hours ago         Exited (1) 3 hours ago                       mysql01

3、由于mysql有个Exited,表示容器已经停了,所以kill没用,需要rm,执行命令:

docker rm ff2dd1924ebf

[root@localhost ~]# docker rm ff2dd1924ebf 
ff2dd1924ebf

4、正确启动执行的命令:

docker run --name mysql01 -e MYSQL+ROOT_PASSWORD=123456 -d mysql

[root@localhost ~]# docker run --name mysql01 -e MYSQL+ROOT_PASSWORD=123456 -d mysql
be36cae18b3b7f73b08178a301224d2397b1e5317e29785b06ad1d502de2400b
[root@localhost ~]# 

查看运行的镜像:

执行命令:docker ps

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
1a52537fb3cc        mysql               "docker-entrypoint..."   14 seconds ago      Up 14 seconds       3306/tcp, 33060/tcp                 mymysql01
ef076de61117        mysql:8.0           "docker-entrypoint..."   About an hour ago   Up About an hour    33060/tcp, 0.0.0.0:3307->3306/tcp   mysql8.0
[root@localhost ~]# 

上面发现有mysql01镜像。

5、我们可以尝试连接mysql客户端的工具
发现连接不上,如图所示:
在这里插入图片描述
原因是:端口没有开放
解决问题:
把端口开放,把本地3306窗口映射到docker容器3306窗口执。
行命令:

docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=12346 -d mysql

[root@localhost ~]# docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=12346 -d mysql
/usr/bin/docker-current: Error response from daemon: Conflict. The container name "/mysql01" is already in use by container 7e0406ccc37893025e5dc1d719f1b35dc334265587d9bf748049f7f79297106f. You have to remove (or rename) that container to be able to reuse that name..
See '/usr/bin/docker-current run --help'.

发现一个错误,信息提示说:镜像容器mysql01已经存在了,发生冲突,无法启动!

第一种方式安装:mysql8.0

自己重新下拉一个mysql8.0的
步骤:
1、下拉下载mysql8.0,执行命令:

docker pull mysql:8.0

[root@localhost ~]# docker pull mysql:8.0
Trying to pull repository docker.io/library/mysql ... 
8.0: Pulling from docker.io/library/mysql
Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee
Status: Downloaded newer image for docker.io/mysql:8.0

2、查看下拉的mysql容器镜像,执行命令:

docker images

[root@localhost ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat                    latest              882487b8be1d        2 weeks ago         507 MB
docker.io/mysql                     8.0                 c8ee894bd2bd        2 weeks ago         456 MB
docker.io/mysql                     latest              c8ee894bd2bd        2 weeks ago         456 MB
docker.io/redis                     latest              de25a81a5a0b        2 weeks ago         98.2 MB
docker.io/centos/mysql-57-centos7   latest              f83a2938370c        3 weeks ago         452 MB
docker.io/dordoka/tomcat            latest              1518b2f222d6        7 months ago        803 MB
[root@localhost ~]# docker run --name mysql8.0 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
ef076de61117685d8850a7ff52ce4722c0ef17392a8e1e439eca469416521222

3、正常启动docker中镜像,执行命令:

docker run --name mysql8.0 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

[root@localhost ~]# docker run --name mysql8.0 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
ef076de61117685d8850a7ff52ce4722c0ef17392a8e1e439eca469416521222

4、查看运行的镜像,执行命令:

docker ps -a

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                           PORTS                               NAMES
ef076de61117        mysql:8.0                 "docker-entrypoint..."   8 seconds ago       Up 7 seconds                     33060/tcp, 0.0.0.0:3307->3306/tcp   mysql8.0
8a47ad475e54        centos/mysql-57-centos7   "container-entrypo..."   8 minutes ago       Created                                                              mysql
b47e31dc7048        mysql                     "docker-entrypoint..."   23 minutes ago      Created                                                              mysql01
0233e74e51ba        tomcat                    "catalina.sh run"        4 hours ago         Exited (143) About an hour ago                                       infallible_mestorf
821cd14027d9        tomcat                    "catalina.sh run"        4 hours ago         Exited (143) About an hour ago                                       objective_pare
f6100f2a584e        tomcat                    "catalina.sh run"        4 hours ago         Exited (143) About an hour ago                                       quizzical_wilson
3220de32dc86        docker.io/redis           "docker-entrypoint..."   4 hours ago         Exited (0) About an hour ago                                         myredis
561cd11445dd        tomcat:latest             "catalina.sh run"        5 hours ago         Exited (143) About an hour ago                                       mytomcat
1f398fad64d7        tomcat                    "catalina.sh run"        5 hours ago         Exited (143) 4 hours ago                                             stupefied_hamilton

5、进入镜像 运行mysql,执行命令:

docker exec -it mysql8.0 /bin/bash

备注:exec docker进入容器命令 -it 容器中服务别名 /bin/bash 表示命令行模式 与 -d 后台守护进行模式启动 形成两种运行方式
进入容器中如所示变化如下

[root@localhost ~]# docker exec -it mysql8.0 /bin/bash
root@ef076de61117:/#

命令:cd /usr/bin
命令:mysql -u root -p

root@ef076de61117:/# cd /usr/bin/
root@ef076de61117:/usr/bin# mysql -u root -p

备注: 在容器中进入用户目录启动mysql 输入密码连接成功

root@ef076de61117:/usr/bin# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> 

第二种方式安装:
1、下载Mysql镜像文件

docker pull mysql

[root@localhost ~]# docker pull mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
80369df48736: Pull complete 

Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee
Status: Downloaded newer image for docker.io/mysql:latest

2、启动Mysql容器

docker run --name=mysqlserver -d -i -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=root mysql

[root@localhost ~]# docker run --name=mysqlserver -d -i -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
065c890547807a36472ea834b35fe9510d8b730972e7ba029708b596b8192121
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint mysqlserver (9084e4b6fb7e6667d7d897b8ffc91a288b60b696e93d60885de033f66923a008): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.

命令参数说明

–name: 给容器起一个别名,可选,如果不指定,则Docker会自动生成不规则的字符串表示
-i :指定容器可以交互,有了此选项后,可以使用docker attach等与容器进行交互
-p: 映射宿主机与容器中服务端口
-e: 设置容器运行所需要的环境变量

3、通过docker ps –l可以查看容器是否正确启动

[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
065c89054780        mysql               "docker-entrypoint..."   21 seconds ago      Created                                 mysqlserver

4、通过docker top mysqlserver 可以查询容器的硬件资源占用情况

[root@localhost ~]# docker top mysqlserver 
Error response from daemon: Container 065c890547807a36472ea834b35fe9510d8b730972e7ba029708b596b8192121 is not running

5、查看容器启动日志

docker logs -f mysqlserver

[root@localhost ~]# docker logs -f mysqlserver 

6、访问Mysql数据库
由于我们在上面使用了-p参数映射了容器的3306端口到宿主机的3306端口,此时我们可以直接访问宿主机的3306端口来访问Docker中的mysql服务

mysql -h 127.0.0.1 -u root -p

[root@localhost ~]# mysql -h 127.0.0.1 -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值