Docker 安装 mysql
Docker 安装 MySQL
方法一、docker pull mysql
查找Docker Hub上的mysql镜像
[Bash shell] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
|
runoob@runoob: /mysql $ docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open - source relati... 2529 [OK] mysql /mysql-server Optimized MySQL Server Docker images. Crea... 161 [OK] centurylink /mysql Image containing mysql. Optimized to be li... 45 [OK] sameersbn /mysql 36 [OK] google /mysql MySQL server for Google Compute Engine 16 [OK] appcontainers /mysql Centos /Debian Based Customizable MySQL Con... 8 [OK] marvambass /mysql MySQL Server based on Ubuntu 14.04 6 [OK] drupaldocker /mysql MySQL for Drupal 2 [OK] azukiapp /mysql Docker image to run MySQL by Azuki - http:... 2 [OK] ... |
这里我们拉取官方的镜像,标签为5.6
[Bash shell] 纯文本查看 复制代码
1
|
runoob@runoob:~ /mysql $ docker pull mysql:5.6 |
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.6的镜像。
[Bash shell] 纯文本查看 复制代码
1
2
|
runoob@runoob:~ /mysql $ docker images | grep mysql mysql 5.6 2c0964ec182a 3 weeks ago 329 MB |
方法二、通过 Dockerfile构建
创建Dockerfile
首先,创建目录mysql,用于存放后面的相关东西。
[Bash shell] 纯文本查看 复制代码
1
|
runoob@runoob:~$ mkdir -p ~ /mysql/data ~ /mysql/logs ~ /mysql/conf |
data目录将映射为mysql容器配置的数据文件存放路径
logs目录将映射为mysql容器的日志目录
conf目录里的配置文件将映射为mysql容器的配置文件
进入创建的mysql目录,创建Dockerfile
[Bash shell] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
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/ * # gpg: key 5072E1F5: public key "MySQL Release Engineering <[url=mailto:mysql-build@oss.oracle.com]mysql-build@oss.oracle.com[/url]>" imported RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 ENV MYSQL_MAJOR 5.6 ENV MYSQL_VERSION 5.6.31-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 # don't reverse lookup hostnames, they are usually another container RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my .cnf \ && echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my .cnf > /tmp/my .cnf \ && mv /tmp/my .cnf /etc/mysql/my .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" ] |
通过Dockerfile创建一个镜像,替换成你自己的名字
[Bash shell] 纯文本查看 复制代码
1
|
runoob@runoob:~ /mysql $ docker build -t mysql . |
创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像
[Bash shell] 纯文本查看 复制代码
1
2
|
runoob@runoob:~ /mysql $ docker images | grep mysql mysql 5.6 2c0964ec182a 3 weeks ago 329 MB |
使用mysql镜像运行容器
[Bash shell] 纯文本查看 复制代码
1
2
3
|
runoob@runoob:~ /mysql $ docker run -p 3306:3306 --name mymysql - v $PWD /conf : /etc/mysql/conf .d - v $PWD /logs : /logs - v $PWD /data : /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6 21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e runoob@runoob:~ /mysql $ |
命令说明:
-
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
查看容器启动情况
[Bash shell] 纯文本查看 复制代码
1
2
3
|
runoob@runoob:~ /mysql $ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 21cb89213c93 mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306 /tcp mymysql |
更多免费技术资料可关注:annalin1203