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>