Dockerfile构建MySQL

利用Dockerfile自定义构建MySQL服务折腾了几天,一直在启动服务上出现错误,现在终于解决了该问题,这里进行记录一下

本文参考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/

此次Dockerfile文件中以centos:latest为基础镜像,在此基础上进行安装MySQL服务(这里以mariadb为例)

构建的原理:

1、利用Dockerfile进行安装MySQL服务(yum安装或者以rpm包安装(由于网络问题可将需要安装的包下载到本地进行安装))

2、编写shell脚本,将安装好的mariadb进行重新初始化,并启动mariadb,执行需要的sql脚本,关闭mariadb,最后通过前台开启服务

3、由于MySQL5.6和MySQL5.7的初始化方式不一样,本文介绍的适用于MySQL5.6(后面会有5.7的案例)

 

查看整个构建目录:

[root@docker mysql]# tree 
.
├── business.sql
├── Dockerfile
├── MariaDB-10.0.33-centos7-x86_64-client.rpm
├── MariaDB-10.0.33-centos7-x86_64-common.rpm
├── MariaDB-10.0.33-centos7-x86_64-compat.rpm
├── MariaDB-10.0.33-centos7-x86_64-server.rpm
├── mariadb.repo
├── server.cnf
├── setup.sh
└── setup.sh.bak

目录中有下载好的mariadb安装的包,当然如果你网络好,只需要配置repo就行,然后将Dockerfile中的安装rpm的过程换成替换repo就ok

下面介绍Dockerfile文件,并介绍构建过程执行了什么:

[root@docker mysql]# cat Dockerfile 
FROM centos

MAINTAINER json_hc@163.com

COPY MariaDB-10.0.33-centos7-x86_64-client.rpm /root/MariaDB-10.0.33-centos7-x86_64-client.rpm
COPY MariaDB-10.0.33-centos7-x86_64-common.rpm /root/MariaDB-10.0.33-centos7-x86_64-common.rpm 
COPY MariaDB-10.0.33-centos7-x86_64-compat.rpm  /root/MariaDB-10.0.33-centos7-x86_64-compat.rpm
COPY MariaDB-10.0.33-centos7-x86_64-server.rpm  /root/MariaDB-10.0.33-centos7-x86_64-server.rpm
WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.cnf
ADD setup.sh /root/setup.sh

RUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306

CMD ["/root/setup.sh"]

1、构建使用的基础镜像为centos:latest

2、将下载好的rpm包copy到镜像中,然后进行安装

3、将需要执行的sql、配置文件,最后执行的shell脚本也copy到镜像中

在执行setup.sh脚本之前mariadb服务已经安装完毕,基本的数据目录还是/var/lib/mysql

将配置文件拷贝到了镜像中,查看配置文件:

[root@docker mysql]# cat server.cnf 
[mysqld]
bind-address=0.0.0.0
console=1
general_log=1
general_log_file=/dev/stdout
#log_error=/dev/stderr
collation-server=utf8_unicode_ci
character-set-server=utf8

里面的内容可以进行修改或者添加更多

查看setup.sh的内容:

[root@docker mysql]# cat setup.sh
#!/bin/sh
chown -R mysql:mysql /var/lib/mysql

mysql_install_db --user=mysql > /dev/null

mysqld_safe --user=mysql &

sleep 5

mysql < /root/business.sql

sleep 5

ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9

mysqld_safe --user=mysql

由于需要重新将安装好的mariadb服务进行初始化,所以避免出错可以将数据目录进行权限授予

MySQL5.6的初始化为mysql_install_db加上一些参数

初始化数据库后,后台开启mariadb服务,然后将sql进行执行:

[root@docker mysql]# cat business.sql 
create database wordpress DEFAULT CHARACTER SET utf8;

USE mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

UPDATE user SET password=PASSWORD("root") WHERE user='root';
FLUSH PRIVILEGES;

sql内容就是创建的库和设置root账号的密码

sql执行完成后setup.sh脚本后面就是将mariadb进程杀掉,最后由前台运行mariadb服务,如果在启动容器中遇见了错误,请利用docker logs container_name/container_id

进行查看,根据错误提示进行解决

自定义构建MySQL服务的项目可以在github查看:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/lnmp/mysql

转载于:https://www.cnblogs.com/jsonhc/p/7807931.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Dockerfile构建MySQL 8镜像的步骤如下: 1. 选择一个基础镜像,例如Ubuntu或Alpine。 2. 在Dockerfile中安装MySQL 8,可以使用apt-get或yum命令。 3. 配置MySQL 8,包括设置root密码、创建用户和数据库等。 4. 将MySQL 8配置文件复制到镜像中,例如my.cnf。 5. 暴露MySQL 8端口,例如3306。 6. 设置启动命令,例如启动MySQL 8服务。 7. 构建镜像,例如使用docker build命令。 8. 运行MySQL 8容器,例如使用docker run命令。 以上是构建MySQL 8镜像的基本步骤,具体实现可以根据需要进行调整。 ### 回答2: 首先需要明确的是,Dockerfile 是用来构建 Docker 镜像的文件,而镜像则是运行 Docker 容器所需的基础环境和应用程序的集合。在构建 MySQL8 镜像的过程中,需要遵循以下步骤: 1. 在 Dockerfile 中指定镜像的基础操作系统,例如 Ubuntu、Alpine 等。 2. 从镜像仓库中下载 MySQL8 的安装包,并在容器中安装 MySQL8。 3. 配置 MySQL 的运行环境,包括调整软件参数、创建用户账户等。 4. 将配置文件和数据文件打包成镜像,其中配置文件包括 my.cnf 等。 下面的步骤是一个基于 Ubuntu 18.04 的 Dockerfile 模板: ``` # 使用 Ubuntu 18.04 作为基础镜像 FROM ubuntu:18.04 # 更新镜像软件源 RUN apt-get update && apt-get -y upgrade # 安装 mysql8 RUN apt-get -y install mysql-server # 配置 mysql8 运行环境 RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf RUN service mysql start && mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PRIVILEGES;" # 添加数据库文件 ADD data/ /var/lib/mysql/ # 暴露容器的端口 EXPOSE 3306 # 设置容器启动时执行的命令 CMD ["mysqld_safe"] ``` 在这个例子中,Dockerfile 使用了 Ubuntu 18.04 作为镜像的基础操作系统,下载了 MySQL8 的安装包,并在容器中安装了 MySQL8。接下来,该镜像对 MySQL 的运行环境进行了一些配置,包括调整了网络地址和用户密码等。最后,通过添加数据文件、暴露容器端口和设置容器启动命令等操作,构建了一个可用的 MySQL8 镜像。 总的来说,在 Dockerfile构建 MySQL8 镜像,需要结合 MySQL8 的安装和配置过程,对镜像里包含的软件和数据文件进行相关的操作,使得它最终成为一个可行的镜像。同时,还要注意镜像的大小和设计思路,以便让它更易于管理和共享。 ### 回答3: Docker 是一款著名的容器化技术,它能够让软件在任何平台上运行,而不会出现依赖问题。MySQL 是一款著名的关系型数据库管理系统,本文旨在介绍如何使用 Dockerfile 构建 MySQL 8 镜像。 1. 创建 Dockerfile 在本地创建一个名为 Dockerfile 的文件,用于描述如何构建 MySQL 8 镜像。Dockerfile 的内容如下: ``` FROM mysql:8.0.22 ENV MYSQL_ROOT_PASSWORD=123456 COPY my.cnf /etc/mysql/conf.d/ ``` 其中: - FROM mysql:8.0.22 表示构建的镜像基于 MySQL 8.0.22 版本的镜像。 - ENV MYSQL_ROOT_PASSWORD=123456 表示设置 MySQL 的 root 用户的密码为 123456。 - COPY my.cnf /etc/mysql/conf.d/ 表示将当前目录下的 my.cnf 文件复制到镜像的 /etc/mysql/conf.d/ 目录下,用于设置 MySQL 配置。 2. 构建镜像 使用以下命令在本地构建 MySQL 8 镜像: ``` docker build -t mysql8 . ``` 其中 -t mysql8 表示构建的镜像名为 mysql8。需要注意的是,Dockerfile 文件所在的目录为当前目录。 3. 运行容器 使用以下命令在本地启动 MySQL 8 容器: ``` docker run -d -p 3306:3306 --name mysql8 mysql8 ``` 其中: - -d 表示在后台运行容器。 - -p 3306:3306 表示将本地 3306 端口映射到容器的 3306 端口。 - --name mysql8 表示容器的名称为 mysql8。 - mysql8 表示运行的镜像名称为 mysql8。 4. 连接 MySQL 最后,使用以下命令连接 MySQL 数据库: ``` mysql -h 127.0.0.1 -u root -p ``` 输入密码 123456 后即可成功连接。 总结 通过以上步骤,我们成功地使用 Dockerfile 构建MySQL 8 镜像,并且在本地运行了容器,连接到了 MySQL 数据库。通过 Dockerfile 的方式,我们可以完全自定义 MySQL 环境的配置,使得应用程序的部署更加便捷和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值