## [MySQL](https://hub.docker.com/_/mysql/) ### 基本信息 [MySQL](https://en.wikipedia.org/wiki/MySQL) 是开源的关系数据库实现。 该仓库位于 https://hub.docker.com/_/mysql/ ,提供了 MySQL 各个版本的镜像,包括 5.6 系列、5.7 系列等。 ### 使用方法 默认会在 `3306` 端口启动数据库。 ``` $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql ``` 之后就可以使用其它应用来连接到该容器。 ``` $ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql ``` 或者通过 `mysql`。 ``` $ docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' ``` ### Dockerfile #### 5.6 版本 ``` FROM debian:wheezy # 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 # 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 --no-install-recommends && rm -rf /var/lib/apt/lists/* # mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/* # gpg: key 5072E1F5: public key "MySQL Release Engineering " imported RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 ENV MYSQL_MAJOR 5.6 ENV MYSQL_VERSION 5.6.20 # note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path? RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \ && curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \ && curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \ && apt-get purge -y --auto-remove curl \ && gpg --verify mysql.tar.gz.asc \ && mkdir /usr/local/mysql \ && tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \ && rm mysql.tar.gz* \ && rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \ && rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \ && find /usr/local/mysql -type f -name "*.a" -delete \ && apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \ && { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \ && apt-get purge -y --auto-remove binutils ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts WORKDIR /usr/local/mysql VOLUME /var/lib/mysql COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 3306 CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"] ``` #### 5.7 版本 ``` FROM debian:wheezy # 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 # 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 --no-install-recommends && rm -rf /var/lib/apt/lists/* # mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/* # gpg: key 5072E1F5: public key "MySQL Release Engineering " imported RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 ENV MYSQL_MAJOR 5.7 ENV MYSQL_VERSION 5.7.4-m14 # note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path? RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \ && curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \ && curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \ && apt-get purge -y --auto-remove curl \ && gpg --verify mysql.tar.gz.asc \ && mkdir /usr/local/mysql \ && tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \ && rm mysql.tar.gz* \ && rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \ && rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \ && find /usr/local/mysql -type f -name "*.a" -delete \ && apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \ && { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \ && apt-get purge -y --auto-remove binutils ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts WORKDIR /usr/local/mysql VOLUME /var/lib/mysql COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 3306 CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"] ```