mysql5.8 dockerfile_docker版mysql的使用和配置(2)——docker版mysql的dockerfile

既然目标是定制满足自己需要的dockerfile,那么就来看看mysql的dockerfile长什么样。

dockerfile选择的是 https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfile

原因是这个比较短(捂脸)

关于dockerfile中的各种命令,可以查看官方文档,或者参考这篇: https://www.cnblogs.com/jie-fang/p/7927643.html

1 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.2 #3 # This program is free software; you can redistribute it and/or modify4 # it under the terms of the GNU General Public License as published by5 # the Free Software Foundation; version 2of the License.6 #7 # This program is distributed inthe hope that it will be useful,8 # but WITHOUT ANY WARRANTY; without even the implied warranty of9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the10 # GNU General Public License for moredetails.11 #12 # You should have received a copy of the GNU General Public License13 # along with this program; if not, writeto the Free Software14 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301USA15 FROM oraclelinux:7-slim16

17 ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm

18 ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm

19

20 # Install server21 RUN rpmkeys --import https://repo.mysql.com/RPM-GPG-KEY-mysql \

22 && yum install -y $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL libpwquality \23 && yumclean all \24 && mkdir /docker-entrypoint-initdb.d25

26 VOLUME /var/lib/mysql27

28 COPY docker-entrypoint.sh /entrypoint.sh

29 COPY healthcheck.sh /healthcheck.sh

30 ENTRYPOINT ["/entrypoint.sh"]31 HEALTHCHECK CMD /healthcheck.sh

32 EXPOSE 3306 33060

33 CMD ["mysqld"]

咱们一行一行看。

FROM oraclelinux:7-slim

15行,这里是oracle自己的linux,不过看后面使用的是yum,我们自己配置的时候大概可以用centos代替。

ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm

ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm

17和18两行,定义了两个变量用来指向接下来需要用的rpm包的地址。

RUN rpmkeys --import https://repo.mysql.com/RPM-GPG-KEY-mysql \

&& yum install -y $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL libpwquality \&& yumclean all \&& mkdir /docker-entrypoint-initdb.d

21~24行,这里安装了mysql包。如果我们进行简化的话,rpmkeys和libpwquality都可以省略掉。

VOLUME /var/lib/mysql

COPY docker-entrypoint.sh /entrypoint.shCOPY healthcheck.sh /healthcheck.shENTRYPOINT ["/entrypoint.sh"]

HEALTHCHECK CMD/healthcheck.sh

26~31行,这里复制了需要的脚本文件,重点是entrypoint.sh。healthcheck如果进行简化的话也可以省略掉。

EXPOSE 3306 33060

32行规定了向主机暴露的端口号。如果不需要的话可以省略。另外注意,并不是expose了就可以用,还是需要在run的时候进行端口映射。

CMD ["mysqld"]

最后33行是dockerfile执行的启动命令(的参数)。

根据上面的分析,我们自己的dockerfile的mysql部分,大概应该是这样的:

FROM centos:7.2.1511ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm

ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm

RUN yum install -y --nogpgcheck $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL

COPY docker-entrypoint.sh /entrypoint.shENTRYPOINT ["/entrypoint.sh"]

CMD ["mysqld"]

然后就可以先试试看了:

shell> docker build -t mysql_basic .

Sending build context to Docker daemon10.24kB

Step1/7 : FROM centos:7.2.1511

--->ddc0fb7d7a72

Step2/7 : ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm

---> Running in3ff12f470551

Removing intermediate container 3ff12f470551--->a544211d9806

Step3/7 : ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm

---> Running infa793935528a

Removing intermediate container fa793935528a--->ecc70ab46823

Step4/7 : RUN yum install -y --nogpgcheck $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL---> Running in6f3dd9f850f2

Loaded plugins: fastestmirror

Examining/var/tmp/yum-root-2ratBJ/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm: mysql-community-server-minimal-5.7.23-1.el7.x86_64

Marking/var/tmp/yum-root-2ratBJ/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm to be installed

Examining/var/tmp/yum-root-2ratBJ/mysql-shell-8.0.12-1.el7.x86_64.rpm: mysql-shell-8.0.12-1.el7.x86_64

Marking/var/tmp/yum-root-2ratBJ/mysql-shell-8.0.12-1.el7.x86_64.rpm to be installed

Resolving Dependencies-->Running transaction check---> Package mysql-community-server-minimal.x86_64 0:5.7.23-1.el7 will be installed--> Processing Dependency: libaio.so.1(LIBAIO_0.1)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64

Determining fastest mirrors*base: mirror.hmc.edu*extras: mirror.nodesdirect.com*updates: mirror.teklinks.com--> Processing Dependency: libaio.so.1(LIBAIO_0.4)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64--> Processing Dependency: libnuma.so.1(libnuma_1.1)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64--> Processing Dependency: libnuma.so.1(libnuma_1.2)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64--> Processing Dependency: libaio.so.1()(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64--> Processing Dependency: libnuma.so.1()(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64---> Package mysql-shell.x86_64 0:8.0.12-1.el7 will be installed-->Running transaction check---> Package libaio.x86_64 0:0.3.109-13.el7 will be installed---> Package numactl-libs.x86_64 0:2.0.9-7.el7 will be installed-->Finished Dependency Resolution

Dependencies Resolved================================================================================Package Arch Version Repository Size================================================================================Installing:

mysql-community-server-minimal

x86_645.7.23-1.el7 /mysql-community-server-minimal-5.7.23-1.el7.x86_6467M

mysql-shell x86_64 8.0.12-1.el7 /mysql-shell-8.0.12-1.el7.x86_64 25M

Installingfordependencies:

libaio x86_640.3.109-13.el7 base 24k

numactl-libs x86_64 2.0.9-7.el7 base 29k

Transaction Summary================================================================================Install2 Packages (+2Dependent packages)

Total size:92M

Total download size:54k

Installed size:92M

Downloading packages:--------------------------------------------------------------------------------Total33 kB/s | 54 kB 00:01Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Installing : numactl-libs-2.0.9-7.el7.x86_64 1/4Installing : libaio-0.3.109-13.el7.x86_64 2/4Installing : mysql-community-server-minimal-5.7.23-1.el7.x86_64 3/4Installing : mysql-shell-8.0.12-1.el7.x86_64 4/4Verifying : mysql-community-server-minimal-5.7.23-1.el7.x86_64 1/4Verifying : libaio-0.3.109-13.el7.x86_64 2/4Verifying : numactl-libs-2.0.9-7.el7.x86_64 3/4Verifying : mysql-shell-8.0.12-1.el7.x86_64 4/4Installed:

mysql-community-server-minimal.x86_64 0:5.7.23-1.el7

mysql-shell.x86_64 0:8.0.12-1.el7

Dependency Installed:

libaio.x86_640:0.3.109-13.el7 numactl-libs.x86_64 0:2.0.9-7.el7

Complete!Removing intermediate container 6f3dd9f850f2--->e118192698af

Step5/7 : COPY docker-entrypoint.sh /entrypoint.sh

--->1aab375ae211

Step6/7 : ENTRYPOINT ["/entrypoint.sh"]---> Running in4c99517c3da0

Removing intermediate container 4c99517c3da0--->54f44871daeb

Step7/7 : CMD ["mysqld"]---> Running inf534cb3d8f0e

Removing intermediate container f534cb3d8f0e--->dc0ae9f1dc87

Successfully built dc0ae9f1dc87

Successfully tagged mysql_basic:latest

看看image

shell>docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

mysql_basic latest dc0ae9f1dc87 About a minute ago 400MB

跑起来看看

shell> docker run -d --name mysqlbasic mysql_basic

shell> docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

a7efdfdaa91d mysql_basic"/entrypoint.sh mysq…" 5 seconds ago Up 3 seconds mysqlbasic

再看看docker里面的情况

docker exec -it mysqlbasic bash

[root@a7efdfdaa91d/]# mysql

ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

哈哈access denied。上一篇说过的,第一次密码是随机生成的。那么我们来拿密码试试。

shell>docker logs mysqlbasic

[Entrypoint] MySQL Docker Image5.7.23-1.1.7[Entrypoint] No password option specifiedfornew database.

[Entrypoint] A random onetime password will be generated.

[Entrypoint] Initializing database

[Entrypoint] Database initialized

Warning: Unable to load'/usr/share/zoneinfo/iso3166.tab' as timezone. Skipping it.

Warning: Unable to load'/usr/share/zoneinfo/zone.tab' as timezone. Skipping it.

[Entrypoint] GENERATED ROOT PASSWORD: 0D0horOvZOHufUpuvAr0L]UkOBX3

[Entrypoint] ignoring/docker-entrypoint-initdb.d/*[Entrypoint] Server shut down

[Entrypoint] Setting root user as expired. Password will need to be changed before database can be used.

[Entrypoint] MySQL init process done. Ready for start up.

[Entrypoint] Starting MySQL 5.7.23-1.1.7

[root@a7efdfdaa91d /]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.23

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

成功的登录了root账号。这样,我们就把dockerfile里关键的部分提取出来,并且可以正常的build和run了。

接下来的问题,我们不能每次都先找随机生成的密码,然后再登录。所以我们要把mysql的初始化和启动服务的过程搞清楚。这样才能根据自己的要求进行修改。

接下来是下一篇的内容了!

PS:其实这种方法是有其本身的问题的……比如,很多时候,我们并不要把docker扔到后台运行,而是直接在前台运行一个bash。

那么我们来试试刚才build的image。

shell> docker run -it --name mysqlbasic mysql_basic /bin/bash

[Entrypoint] MySQL Docker Image5.7.23-1.1.7[root@4e2ee3952247/]# mysql

ERROR2002 (HY000): Can't connect to local MySQL server through socket'/var/lib/mysql/mysql.sock'(2)

首先,我们和刚才用docker logs打出的log对比一下,发现这里Entrypoint只有一行。看来前后台的docker启动方式有一些不同。

那么这种不同导致了什么区别呢?尝试一下mysql。哎呀居然报了错误。

看来需要仔细研究一下entrypoint.sh到底干了什么。(就是下一篇的内容了!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值