|
本帖最后由 java 于 2018-1-15 15:20 编辑
首先检查 MySQL 是否已安装
yum list installed | grep mysql
如果有的话 停止启用系统已有的mysql
systemctl stop mysqld
systemctl disable mysqld
http://www.runoob.com/docker/docker-install-mysql.html
通过 Dockerfile构建
创建Dockerfile
首先,创建目录mysql,用于存放后面的相关东西。- runoob@runoob:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf
复制代码 data目录将映射为mysql容器配置的数据文件存放路径
logs目录将映射为mysql容器的日志目录
conf目录里的配置文件将映射为mysql容器的配置文件
进入创建的mysql目录,创建Dockerfile
vi Dockerfile
把 https://github.com/docker-librar ... ster/5.6/Dockerfile 中的文件内容复制进去- FROM debian:jessie
- # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
- RUN groupadd -r mysql && useradd -r -g mysql mysql
- # add gosu for easy step-down from root
- ENV GOSU_VERSION 1.7
- RUN set -x \
- && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
- && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
- && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
- && export GNUPGHOME="$(mktemp -d)" \
- && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
- && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
- && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
- && chmod +x /usr/local/bin/gosu \
- && gosu nobody true \
- && apt-get purge -y --auto-remove ca-certificates wget
- RUN mkdir /docker-entrypoint-initdb.d
- # FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
- # File::Basename
- # File::Copy
- # Sys::Hostname
- # Data::Dumper
- RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/*
- RUN set -ex; \
- # gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
- key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
- export GNUPGHOME="$(mktemp -d)"; \
- gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
- gpg --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
- rm -r "$GNUPGHOME"; \
- apt-key list > /dev/null
- ENV MYSQL_MAJOR 5.6
- ENV MYSQL_VERSION 5.6.38-1debian8
- RUN echo "deb http://repo.mysql.com/apt/debian/ jessie mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
- # the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
- # also, we set debconf keys to make APT a little quieter
- RUN { \
- echo mysql-community-server mysql-community-server/data-dir select ''; \
- echo mysql-community-server mysql-community-server/root-pass password ''; \
- echo mysql-community-server mysql-community-server/re-root-pass password ''; \
- echo mysql-community-server mysql-community-server/remove-test-db select false; \
- } | debconf-set-selections \
- && apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
- && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
- && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
- # ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
- && chmod 777 /var/run/mysqld \
- # comment out a few problematic configuration values
- && find /etc/mysql/ -name '*.cnf' -print0 \
- | xargs -0 grep -lZE '^(bind-address|log)' \
- | xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/' \
- # don't reverse lookup hostnames, they are usually another container
- && echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf
- VOLUME /var/lib/mysql
- COPY docker-entrypoint.sh /usr/local/bin/
- RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
- ENTRYPOINT ["docker-entrypoint.sh"]
- EXPOSE 3306
- CMD ["mysqld"]
复制代码 再创建 docker-entrypoint.sh 文件
把 https://github.com/docker-librar ... ocker-entrypoint.sh 的内容复制进去并增加此文件的执行权限- chmod +x ./docker-entrypoint.sh
复制代码 通过Dockerfile创建一个镜像,替换成你自己的名字- runoob@runoob:~/mysql$ docker build -t mysql .
复制代码 创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像
runoob@runoob:~/mysql$ docker images |grep mysql
使用mysql镜像
运行容器
runoob@runoob:~/mysql$ docker run -p 3306:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql5.6:5.6 --restart=always
命令说明:
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v $PWD/conf/my.cnf:/etc/mysql/my.cnf:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
mysql5.6:5.6 --- imageID: mysql镜像ID
--restart:always:始终重启 Docker容器开机自动启动
|
|