前言:在关系型数据库中,MySQL 是当下最流行的开源数据库软件。
准备
MySQL源配置
下载MySQL源的deb包,因为包会更新,所有可能会更新地址。deb 包在MySQL源的页面的最下方,如下图所示:
下载 deb 包,放在 Dockerfile 所在的文件夹。
安装 MySQL 的操作系统用 debian:stretch ,为了加快软件更新,换用国内163源,源在 Dockerfile 文件所在文件夹下面的 sources.list 文件,通过 ADD 加入容器中。sources.list 内容如下:
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
Dockerfile 内容
# MySQL
# VERSION 0.0.1
# 基础镜像
FROM debian:stretch
# 维护者信息
MAINTAINER Geng Li
ADD sources.list /etc/apt/sources.list
ADD mysql-apt-config_0.8.11-1_all.deb /
# 增加安装源
RUN apt-get update \
&& apt-get -y install wget gnupg lsb-release \
&& dpkg -i /mysql-apt-config_0.8.11-1_all.deb \
&& rm /mysql-apt-config_0.8.11-1_all.deb \
&& apt-get update \
&& apt-get install -y --no-install-recommends mysql-server
# 增加运行用户
RUN userdel mysql && groupadd -rf mysql && useradd -r -g mysql mysql \
&& { \
echo mysql-community-server mysql-community-server/root-pass password ''; \
echo mysql-community-server mysql-community-server/re-root-pass password ''; \
} | debconf-set-selections \
&& apt-get install -y mysql-server \
&& mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
&& chmod 777 /var/run/mysqld
# 以数据卷的形式挂载MySQL存储目录
VOLUME /var/lib/mysql
# 暴露 MySQL 默认端口
EXPOSE 3306
# 启动MySQL
CMD ["mysqld", "--user", "mysql"]
之前报错E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation… 加入安装 wget, gnupg 就好了,具体见 Dockerfile 文件。
构建镜像
sudo docker build -t gengli/mysql:0.0.1 ./Mysql
把 gengli/mysql:0.0.1
换成你想要的镜像名字, ./Mysql
换成你的 Dockerfile 文件所在的实际目录。
因为我之前构建过一次镜像,利用之前的一些信息,下图的构建过程就很快,几乎只要几秒钟。如果是第一次构建,需要的几分钟甚至更多。
展示
测试
sudo docker run -d --name mysql -p 3306:3306 gengli/mysql:0.0.1
sudo docker run -it --rm --name mysql-client --link mysql gengli/mysql:0.0.1 /bin/bash
不知为什么报错,书上是可以的。具体的以后再来看。根据网上其他一些资料,感觉不是容器的安装过程中的问题,可能是容器间的网络通信等问题造成的。成功的话会出现: Welcome to the MySQL monitor. 等内容。