日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

基于官方镜像MySQL做自定义业务扩充镜像

發(fā)布時(shí)間:2024/4/14 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于官方镜像MySQL做自定义业务扩充镜像 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先從https://hub.docker.com/_/mysql/拉取官方鏡像,如果速度緩慢,建議添加國(guó)內(nèi)加速

[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 5709795eeffa 4 days ago 408MB

查看如何使用mysql鏡像啟動(dòng)一個(gè)container:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

-e:設(shè)置環(huán)境變量

  MYSQL_ROOT_PASSWORD這個(gè)變量是強(qiáng)制性的,需要指定密碼,如果沒(méi)有設(shè)置此變量的值,那么創(chuàng)建container不會(huì)成功

  MYSQL_USER:為MySQL服務(wù)創(chuàng)建一個(gè)用戶(hù)(可選變量)

  MYSQL_PASSWORD:為創(chuàng)建的用戶(hù)給定密碼(可選變量,與上面變量連用)

  MYSQL_ALLOW_EMPTY_PASSWORD:指定允許mysql使用空密碼(針對(duì)的是MySQL服務(wù)的root用戶(hù)的密碼)

  MYSQL_DATABASE:為MySQL中創(chuàng)建庫(kù),指定庫(kù)名稱(chēng)

更多其他變量查看:https://hub.docker.com/_/mysql/

?

[root@docker ~]# docker run --name=mysql -e MYSQL_ROOT_PASSWORD=redhat -d mysql[root@docker ~]# docker exec -it mysql /bin/bash root@c240bb45b889:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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>

指定可以使用空密碼,然后不設(shè)置root密碼:

[root@docker ~]# docker run -d --name=mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql 9c9b61491d9c5f035a32c3ccbe8832ac025676051cc6513159d7bd7cec327d6e [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c9b61491d9c mysql "docker-entrypoint..." 3 seconds ago Up 2 seconds 3306/tcp mysql

然后登錄到mysql中:

[root@docker ~]# docker exec -it mysql /bin/bash root@9c9b61491d9c:/# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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>

映射端口到本機(jī)host,然后進(jìn)行-h host進(jìn)行登錄:

[root@docker ~]# docker run -d --name=mysql -p3306:3306 -e MYSQL_ROOT_PASSWORD=redhat mysql 19c8d047c38d445ca114433ef13f56921106b582e563d5763da61c5c8f48e898 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19c8d047c38d mysql "docker-entrypoint..." 4 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp mysql

使用mysql -uroot -p -h 192.168.101.14進(jìn)行登錄:

[root@docker ~]# docker exec -it mysql /bin/bash root@19c8d047c38d:/# mysql -uroot -p -h192.168.101.14 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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>

啟動(dòng)容器時(shí),掛載映射數(shù)據(jù)庫(kù)數(shù)據(jù)目錄:

[root@docker ~]# docker run -d --name=mysql -p3306:3306 -e MYSQL_ROOT_PASSWORD=redhat -v /data/mysql:/var/lib/mysql mysql a6f5ff4550fb13ae767cc1e1e37e344c33f90592dc19b2d2ddc80c5e6b842bf1 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6f5ff4550fb mysql "docker-entrypoint..." 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql

查看映射到本機(jī)host的數(shù)據(jù)目錄:

[root@docker ~]# ll /data/mysql/ total 188484 -rw-r-----. 1 systemd-bus-proxy input 56 Nov 9 14:58 auto.cnf -rw-------. 1 systemd-bus-proxy input 1679 Nov 9 14:58 ca-key.pem -rw-r--r--. 1 systemd-bus-proxy input 1107 Nov 9 14:58 ca.pem -rw-r--r--. 1 systemd-bus-proxy input 1107 Nov 9 14:58 client-cert.pem -rw-------. 1 systemd-bus-proxy input 1675 Nov 9 14:58 client-key.pem -rw-r-----. 1 systemd-bus-proxy input 1321 Nov 9 14:58 ib_buffer_pool -rw-r-----. 1 systemd-bus-proxy input 79691776 Nov 9 14:58 ibdata1 -rw-r-----. 1 systemd-bus-proxy input 50331648 Nov 9 14:58 ib_logfile0 -rw-r-----. 1 systemd-bus-proxy input 50331648 Nov 9 14:58 ib_logfile1 -rw-r-----. 1 systemd-bus-proxy input 12582912 Nov 9 14:58 ibtmp1 drwxr-x---. 2 systemd-bus-proxy input 4096 Nov 9 14:58 mysql drwxr-x---. 2 systemd-bus-proxy input 8192 Nov 9 14:58 performance_schema -rw-------. 1 systemd-bus-proxy input 1679 Nov 9 14:58 private_key.pem -rw-r--r--. 1 systemd-bus-proxy input 451 Nov 9 14:58 public_key.pem -rw-r--r--. 1 systemd-bus-proxy input 1107 Nov 9 14:58 server-cert.pem -rw-------. 1 systemd-bus-proxy input 1679 Nov 9 14:58 server-key.pem drwxr-x---. 2 systemd-bus-proxy input 8192 Nov 9 14:58 sys

當(dāng)啟動(dòng)容器時(shí),給MySQL服務(wù)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)wordpress,創(chuàng)建一個(gè)用戶(hù)wordpress,并指定密碼wordpress:

[root@docker ~]# docker run -d --name=mysql -p3306:3306 -e MYSQL_ROOT_PASSWORD=redhat -v /data/mysql:/var/lib/mysql -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress mysql 4ec8d2d23af884a90aed4e8f5ffd81a7beaa7a3e65065dfdaba49056880d985a [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ec8d2d23af8 mysql "docker-entrypoint..." 4 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp mysql

驗(yàn)證創(chuàng)建的結(jié)果:

root@b5f97b989c51:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | wordpress | +--------------------+ 5 rows in set (0.00 sec)mysql> select user from mysql.user; +-----------+ | user | +-----------+ | root | | wordpress | | mysql.sys | | root | +-----------+ 4 rows in set (0.00 sec)mysql>

當(dāng)這次創(chuàng)建的時(shí)候,必須先將上次創(chuàng)建的數(shù)據(jù)目錄進(jìn)行刪除掉,因?yàn)槿绻粍h除的話(huà),還是上次創(chuàng)建container時(shí)的那次的數(shù)據(jù)

?

根據(jù)上面的一些操作可以明顯的了解到,利用官方鏡像啟動(dòng)容器然后執(zhí)行sql必須麻煩,所以為了需求需要將鏡像進(jìn)行自定義擴(kuò)容,能夠在官方鏡像上執(zhí)行sql等其他需求

[root@docker mysql]# tree . ├── business.sql ├── Dockerfile ├── mysqld.cnf └── setup.sh

查看Dockerfile文件:

[root@docker mysql]# cat Dockerfile FROM mysqlMAINTAINER json_hc@163.comENV MYSQL_ALLOW_EMPTY_PASSWORD yesCOPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf COPY business.sql /root/business.sql COPY setup.sh /root/setup.shRUN chmod +x /root/setup.sh EXPOSE 3306ENTRYPOINT ["/root/setup.sh"]

Dockerfile中基于官方MySQL鏡像,目前是MySQL5.7的版本,所以MySQL軟件不需要進(jìn)行安裝,根據(jù)上一篇自定義構(gòu)建MySQL的原理,可以知道在MySQL服務(wù)安裝好的情況下

編寫(xiě)shell腳本重新將MySQL服務(wù)進(jìn)行初始化,然后在啟動(dòng)和關(guān)閉數(shù)據(jù)庫(kù)服務(wù)起降執(zhí)行所需要的sql,最后前臺(tái)執(zhí)行MySQL進(jìn)程就行

在最開(kāi)始有一個(gè)ENV MYSQL_ALLOW_EMPTY_PASSWORD yes環(huán)境變量的設(shè)置,這是由于官方的MySQL鏡像必須進(jìn)行二選一進(jìn)行root用戶(hù)的密碼要求

于是Dockerfile就是將需要執(zhí)行的sql和shell腳本以及配置文件進(jìn)行了copy

查看setup.sh這個(gè)shell腳本:

[root@docker mysql]# cat setup.sh #!/bin/sh chown -R mysql:mysql /var/lib/mysql#mysql_install_db --user=mysql --datadir=/var/lib/mysql > /dev/null mysqld --initialize-insecure --user=mysql > /dev/nullmysqld --user=mysql &sleep 5mysql < /root/business.sqlsleep 5ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9mysqld --user=mysql

由于MySQL5.6和MySQL5.7初始化的過(guò)程不一樣,默認(rèn)情況下MySQL5.7初始化會(huì)生成一個(gè)root用戶(hù)的隨機(jī)密碼,可以使用--initialize-insecure進(jìn)行初始化使root用戶(hù)

的密碼為空,達(dá)到初始化的目的

查看business.sql

[root@docker mysql]# cat business.sql grant all privileges on *.* to 'root'@'localhost' identified by 'root';create database wordpress DEFAULT CHARACTER SET utf8;USE mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;UPDATE user SET password=PASSWORD("root") WHERE user='root'; FLUSH PRIVILEGES;

查看配置文件

[root@docker mysql]# cat mysqld.cnf [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log # By default we only accept connections from localhost bind-address = 0.0.0.0 COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf這是官方配置文件的所在地
最后進(jìn)行構(gòu)建:
[root@docker mysql]# docker build -t mysql:v1 . [root@docker mysql]# docker run -d --name=mysql -p3306:3306 -v /data/mysql:/var/lib/mysql mysql:v1 9a7509d3f48eba1a67ec690db652c5b73cbcc88c96ff871701c0ef7becc3ecc4 [root@docker mysql]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9a7509d3f48e mysql:v1 "/root/setup.sh" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql

驗(yàn)證business.sql的內(nèi)容:

[root@docker mysql]# docker exec -it mysql /bin/bash root@9a7509d3f48e:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | wordpress | +--------------------+ 5 rows in set (0.00 sec)mysql>

映射并掛載到本機(jī)host的數(shù)據(jù)目錄:(掛載之前刪掉/data/mysql,避免遺留的是上次掛載的數(shù)據(jù))

[root@docker ~]# ll /data/mysql/ total 122916 -rw-r-----. 1 systemd-bus-proxy input 56 Nov 9 15:22 auto.cnf -rw-r-----. 1 systemd-bus-proxy input 419 Nov 9 15:22 ib_buffer_pool -rw-r-----. 1 systemd-bus-proxy input 12582912 Nov 9 15:22 ibdata1 -rw-r-----. 1 systemd-bus-proxy input 50331648 Nov 9 15:22 ib_logfile0 -rw-r-----. 1 systemd-bus-proxy input 50331648 Nov 9 15:22 ib_logfile1 -rw-r-----. 1 systemd-bus-proxy input 12582912 Nov 9 15:22 ibtmp1 drwxr-x---. 2 systemd-bus-proxy input 4096 Nov 9 15:22 mysql drwxr-x---. 2 systemd-bus-proxy input 8192 Nov 9 15:22 performance_schema drwxr-x---. 2 systemd-bus-proxy input 8192 Nov 9 15:22 sys drwxr-x---. 2 systemd-bus-proxy input 20 Nov 9 15:22 wordpress

配置文件和sql語(yǔ)句都可以根據(jù)業(yè)務(wù)進(jìn)行替換,然后在MySQL鏡像的基礎(chǔ)上進(jìn)行構(gòu)建

該構(gòu)建項(xiàng)目在GitHub:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/mysql

?

轉(zhuǎn)載于:https://www.cnblogs.com/jsonhc/p/7809571.html

總結(jié)

以上是生活随笔為你收集整理的基于官方镜像MySQL做自定义业务扩充镜像的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。