Docker容器化开发流程(四)制作mysql镜像

目标

使用mysql镜像文件

# 使用 docker pull 下载镜像   https://hub.docker.com/_/mysql?tab=tags
$ docker pull mysql:5.7
# 查看镜像
$ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 413be204e9c3        6 days ago          456MB
 
# 运行mysql容器
$ docker run -itd --name mysql-server1 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=111 mysql:5.7
 
-p 3307:3307 :映射容器服务的 3307 端口到宿主机的 3307 端口,外部主机可以直接通过 宿主机ip:3307 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=111:设置 MySQL 服务 root 用户的密码。
 
# 使用 docker ps 查看现在运行的容器信息
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                         NAMES
15c50777c383        mysql:5.7           "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   mysql-server1
 
# 将容器中的目录文件复制到宿主机中
mysql 配置文件;
数据存储目录,以便挂载(PS: 若不挂载到宿主机,容器万一被删除掉了,数据都会丢失)
mysql 的日志logs
 
# 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
$ mkdir -p /usr/local/docker/mysql/config
$ docker cp mysql-server1:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config
# 将容器中的 mysql 存储目录复制到宿主机中
$ mkdir -p /usr/local/docker/mysql/data
$ docker cp mysql-server1:/var/lib/mysql/ /usr/local/docker/mysql/data
 
# 将容器中的 mysql log复制到宿主机中
$ mkdir -p /usr/local/docker/mysql/logs
$ docker cp mysql-server1:/logs /usr/local/docker/mysql/logs
 
 
# 将刚才的容器删除 PS: mysql-server 是我们运行容器时,指定的名称,当然,你也可以先执行 docker ps, 通过容器 ID 来删除。
$ docker rm -f mysql-server1
 
# 修改mysql 配置
$ vi /usr/local/docker/mysql/config/mysqld.cnf
# 修改端口号 设置在 mysqld 项目下新增 port=3307 配置
[mysqld]
port=3307
 
# 重新运行mysql 容器
$ docker run -itd --name mysql-server1 -p 3307:3307 -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /usr/local/docker/mysql/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111 mysql:5.7
 
其他不变,额外添加了两个挂载子命令:
 
-v/usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
 
-v/usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下;
 
-d: 后台运行容器
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数
 
 
# 检查容器是否启动
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                         NAMES
15c50777c383        mysql:5.7           "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   mysql-server1
 
# mysql容器运行时,进入mysql
$ docker exec -it mysql-server1 bash
或者
docker exec -it 容器ID /bin/bash
 
# 如果修改配置文件
$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
 
# 保存后,重新启动mysql容器
$ docker restart mysql-server1
或者 docker restart 容器id
 
# 进入mysql 容器的命令行
$ docker exec -it mysql-server1 bash
# 连接mysql
$ mysql -uroot -p
剩下的操作,就是mysql 提供的语法了
 
# 退出容器,不关闭容器
ctrl+p+q
 
例子 : root@15c50777c383:/# mysql -uroot -p111

测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jlYn8dY-1586687431401)(index_files/1586661841314_4.png)]

将mysql镜像提交到仓库

由于私人仓库还没有建立,先提交至docker hub

# 修改标签
$ docker tag mysql:5.7 1164014750/mysql:5.7
# 提交
$ docker push 1164014750/mysql:5.7
# 就可以在dock hub 中搜索了
https://hub.docker.com/repository/docker/1164014750/mysql
 
# pull
docker push 1164014750/mysql:5.7

其他命令

# 容器外访问mysql容器
$ docker exec -it mysql-server1(容器id或者容器名称) bash
# 查看MySQL日志
$ docker logs 容器id或者容器名称
 
# 使用自定义MySQL配置文件
 
如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以mysql像这样启动容器(请注意,此命令仅使用自定义配置文件的目录路径):
 
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
 
# 不使用cnf文件的配置
 
可以将许多配置选项作为标志传递给mysqld。这将使您可以灵活地自定义容器而无需cnf文件。例如,如果您想更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),请运行以下命令:
 
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 
# 如果您想查看可用选项的完整列表,请运行:
$ docker run -it --rm mysql:tag --verbose --help
 
 

特别注意

参考:Docker官方映像(https://hub.docker.com/_/mysql?tab=description)

# 数据存储位置,我们在宿主机目录创建一个存放mysql数据目录,并将这个目录挂载到容器中,如果不挂载,容器丢失,之前的数据将丢失
1.在主机系统上的适当卷上创建数据目录,例如/my/own/datadir
2.mysql像这样启动您的容器:
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
 
-v /my/own/datadir:/var/lib/mysql命令的一部分/my/own/datadir从底层主机系统/var/lib/mysql在容器内部安装目录,默认情况下,MySQL将在该目录中写入其数据文件。
 
# 创建数据库转储到sql文件
大多数普通工具都可以使用,尽管在某些情况下它们的使用可能会有些麻烦,以确保它们可以访问mysqld服务器。确保这一点的一种简单方法是docker exec在同一容器中使用和运行该工具,类似于以下内容:
 
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
 
# 从sql文件还原数据
用于还原数据。您可以使用docker exec带-i标志的命令,类似于以下内容:
 
$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章