《 Docker实例三Docker安装MySQL实例 》
前言
在前面一篇文章种,完成了 《 Docker安装Tomcat实例 》,本篇将继续镜像安装教程,并完成Docker安装MySQL实例。
Docker实例三Docker安装MySQL实例
第一种:使用 docker pull 镜像名 拉取镜像
1、查询星级数大于30的MySQL镜像(注:星级数越高,越受欢迎的,默认在 Docker Hub 查询的),
输入命令 “ docker search -s 300 mysql” ,查询内容如下:
[root@localhost ~]# docker search -s 300 mysql
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 7474 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2410 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 557 [OK]
2、拉取第一个镜像,也是官方版的镜像,输入命令 “ docker pull mysql”,默认拉取的为最新版本 latest ,内容如下:
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
f17d81b4b692: Already exists
c691115e6ae9: Pull complete
41544cb19235: Pull complete
254d04f5f66d: Pull complete
4fe240edfdc9: Pull complete
0cd4fcc94b67: Pull complete
8df36ec4b34a: Pull complete
720bf9851f6a: Pull complete
e933e0a4fddf: Pull complete
9ffdbf5f677f: Pull complete
a403e1df0389: Pull complete
4669c5f285a6: Pull complete
Digest: sha256:811483efcd38de17d93193b4b4bc4ba290a931215c4c8512cbff624e5967a7dd
Status: Downloaded newer image for mysql:latest
3、拉取完成后,输入命令 “ docker images mysql ”,可以在本地镜像列表里查到REPOSITORY为mysql的镜像,内容如下:
[root@localhost ~]# docker images mysql
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 2dd01afbe8df 5 weeks ago 485MB
第二种:通过 Dockerfile 构建Docker镜像
1、新建 MySQL 的 Dockerfile 文件存放目录,输入命令 “ mkdir -p /opt/dockerfile/mysql ” ,并进入到目录下。
[root@localhost ~]# mkdir -p /opt/dockerfile/mysql
[root@localhost ~]# cd /opt/dockerfile/mysql/
[root@localhost mysql]#
2、创建dockerfile文件,输入命令 “ vi mysqldockerfile ” ,并键入如下内容:
Ubuntu 版本:
# base 基础镜像
FROM debian:stretch-slim
# 首先添加我们的用户和组,以确保一致地分配他们的id
RUN groupadd -r mysql && useradd -r -g mysql mysql
RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/*
# 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 --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& gpgconf --kill all \
&& rm -rf "$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
RUN apt-get update && apt-get install -y --no-install-recommends \
# for MYSQL_RANDOM_ROOT_PASSWORD
pwgen \
# for mysql_ssl_rsa_setup
openssl \
# 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
perl \
&& 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 --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME"; \
apt-key list > /dev/null
ENV MYSQL_MAJOR 8.0
ENV MYSQL_VERSION 8.0.13-1debian9
RUN echo "deb http://repo.mysql.com/apt/debian/ stretch 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)
# 设置 debconf 键,使 APT 更安静
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-community-client="${MYSQL_VERSION}" mysql-community-server-core="${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 \
# 确保 /var/run/mysqld(用于 socket 和 lock 文件)是可写的,不管 mysqld 实例在运行时的UID是什么
&& chmod 777 /var/run/mysqld
VOLUME /var/lib/mysql
# 相关配置文件
COPY config/ /etc/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"]
# 暴露 mysql 端口
EXPOSE 3306 33060
CMD ["mysqld"]
3、通过 Dockerfile 的 docker build 构建一个 MySQL 镜像,这儿可以自定义镜像名,输入命令 “ docker build -f /opt/dockerfile/mysql/mysqldockerfile -t huazai/db/mysql:v1.0 . ” 进行构建,部分构建内容如下:
构建成功后,输入命令 “ docker images huazai/db/mysql ” ,可以在本地的镜像列表种查找到方才构建 tomcat 镜像,内容如下:
好了,关于 Docker系列(二十二)——Docker实例四Docker安装MySQL实例 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | who.seek.me@java98k.vip |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/84764231 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |