docker mysql容器的安装使用
docker拉取镜像的命令为
docker pull image[:TAG]
如果我们想安装的mysql版本不是最新的版本,则需要填充TAG,如果不带上TAG,则默认安装的为最新版本,虽然可以通过docker search查询相关的镜像信息,但该命令不会显示其TAG,我们可以通过docker hub官网来获取到docker中镜像的TAG,如查询mysql的TAG
1、登录docker hub网站https://hub.docker.com/,并搜索mysql,得到mysql相关的Containers
2、点击右侧查询出的mysql container(https://hub.docker.com/_/mysql?tab=tags),并选择TAGS标签,即可看到mysql相关的TAG
这里我们安装的是8.0.17的mysql
一、拉取镜像(如果使用docker run命令,可以忽略该步,docker run在不存在镜像的情况下,会自动拉取镜像,并且启动该镜像对应的容器,如果已经存在镜像,则直接启动镜像对应容器)
docker pull mysql:8.0.17
二、启动mysql容器,其中--name为指定容器名称,-p暴露内部容器端口给宿主机,前一个端口为宿主机端口, -e为设置环境变量,-d为后台运行,mysql:8.0.17为镜像名称,这个表示我们要启动的镜像,如果不存在,则会下载一个8.0.17的镜像。如果已经拉取了镜像,也可以将mysql:8.0.17
替换成docker images查询出的IMAGE ID
docker run --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:8.0.17
三、查看容器运行状态
docker ps
四、进入l容器,退出容器可以使用exit。其中也可以使用NAMES列对应mysql_test代替CONTAINER ID,下同
docker exec -it a77ede15e664 bash
五、连接容器中mysql。若宿主机安装了mysql客户端,则可以通过mysql -uroot -p -h 127.0.0.1连接,注意,必须要添加上-h,因为宿主机连接mysql容器需要通过tcp,而宿主机连接宿主机本地的mysql则不需要,使用socket就可以连接。如果宿主机未安装mysql客户端,则可通过如下命令连接mysql容器中mysql server
docker exec -it a77ede15e664 bash -c "mysql -uroot -p"
六、停止容器。通过docker ps查看已经不存在运行中的容器了
docker stop a77ede15e664
七、查看所有容器。可以看到上一步骤停止mysql容器后,mysql处于Exited状态
docker ps -a
八、启动一个停止的容器
docker start a77ede15e664
九、查看某个容器的具体信息
docker inspect a77ede15e664
十、查看当前宿主机已存在镜像
docker images
十一、删除容器。删除前先停止容器,否则将会出现如下错误,-f为强制停止,最好不要使用。按照正常操作先停止再删除
[root@localhost ~]# docker rm a77ede15e664 Error response from daemon: You cannot remove a running container a77ede15e6644527b4e55b8660347f23a331a75bab03511aea1f7c10761ef807. Stop the container before attempting removal or use -f [root@localhost ~]#
十二、删除镜像。删除镜像前可以通过docker images查询当前镜像的信息,并根据IMAGE ID删除,删除镜像时需要保证该镜像没有容器在使用,否则会出现如下错误
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mysql 8.0.17 2151acc12881 3 weeks ago 445 MB [root@localhost ~]# docker rmi 2151acc12881 Error response from daemon: conflict: unable to delete 2151acc12881 (cannot be forced) - image is being used by running container a77ede15e664 [root@localhost ~]#
十三、拷贝文件。如下示例为在宿主机新建一个test文件,并填充内容,将该文件拷贝到mysql容器/下,进入到容器,并查看拷贝的文件内容(MySQ配置文件在容器中的位置为/etc/mysql/my.cnf)
[root@localhost ~]# echo "it is a test" >> test [root@localhost ~]# docker cp test a77ede15e664:/ [root@localhost ~]# docker exec -it a77ede15e664 bash root@a77ede15e664:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var root@a77ede15e664:/# cat test it is a test root@a77ede15e664:/#
十四、查看容器相关日志
docker logs a77ede15e664
mysql在docker中安装也可以参照mysql官方文档
https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-getting-started.html
另外,在启动mysql时,如果不确定mysql启动可配置的启动环境参数是那些,可以先通过docker ps --no-trunc查找到当前容器启动时使用的COMMAND,然后找到其中对应的sh文件,在里面即可查找到可以设置的环境变量
如mysql使用command
find / -name docker-entrypoint.sh查找出该sh文件后,打开,可以找到我们在上面启动mysql时所使用的环境变量MYSQL_ROOT_PASSWORD,通过该脚本,也可以看出,如果我们不希望设置密码,添加环境变量MYSQL_ALLOW_EMPTY_PASSWORD即可