From ea6c29a437b45749bafdc5ae580e5ea75053c1f2 Mon Sep 17 00:00:00 2001 From: wjunLu Date: Wed, 20 Mar 2024 09:25:55 +0800 Subject: [PATCH] Add mysql docker image. --- mysql/8.3.0/22.03-lts-sp3/Dockerfile | 42 ++ .../8.3.0/22.03-lts-sp3/config/conf.d/my.cnf | 3 + mysql/8.3.0/22.03-lts-sp3/config/my.cnf | 29 ++ mysql/8.3.0/22.03-lts-sp3/entrypoint.sh | 416 ++++++++++++++++++ mysql/README.md | 31 ++ mysql/doc/image-info.yml | 93 ++++ mysql/doc/picture/logo.png | Bin 0 -> 38845 bytes mysql/meta.yml | 2 + 8 files changed, 616 insertions(+) create mode 100644 mysql/8.3.0/22.03-lts-sp3/Dockerfile create mode 100644 mysql/8.3.0/22.03-lts-sp3/config/conf.d/my.cnf create mode 100644 mysql/8.3.0/22.03-lts-sp3/config/my.cnf create mode 100644 mysql/8.3.0/22.03-lts-sp3/entrypoint.sh create mode 100644 mysql/README.md create mode 100644 mysql/doc/image-info.yml create mode 100644 mysql/doc/picture/logo.png create mode 100644 mysql/meta.yml diff --git a/mysql/8.3.0/22.03-lts-sp3/Dockerfile b/mysql/8.3.0/22.03-lts-sp3/Dockerfile new file mode 100644 index 00000000..ec66a8c3 --- /dev/null +++ b/mysql/8.3.0/22.03-lts-sp3/Dockerfile @@ -0,0 +1,42 @@ +ARG BASE=openeuler/openeuler:22.03-lts-sp3 +FROM ${BASE} + +ARG TARGETARCH +ARG VERSION=8.3.0 +ARG GOSU_VERSION=1.17 + +RUN yum update -y && \ + yum install -y git wget g++ make ncurses-devel cmake openssl openssl-devel libtirpc-devel rpcgen bison m4 && \ + yum clean all && \ + mkdir -p /docker-entrypoint-initdb.d && \ + wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${TARGETARCH}.asc" && \ + wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${TARGETARCH}" && \ + wget -O mysql.tar.gz https://github.com/mysql/mysql-server/archive/refs/tags/mysql-${VERSION}.tar.gz && \ + mkdir -p /mysql && tar -xvf mysql.tar.gz -C /mysql --strip-components=1 && \ + mkdir -p /mysql/build && cd /mysql/build && \ + cmake /mysql \ + -DDEFAULT_CHARSET=utf8mb4 \ + -DDEFAULT_COLLATION=utf8mb4_unicode_ci \ + -DENABLED_LOCAL_INFILE=ON \ + -DWITH_SSL=system \ + -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/server \ + -DMYSQL_DATADIR=/usr/local/mysql/data \ + -DMYSQL_TCP_PORT=3306 \ + -DDOWNLOAD_BOOST=0 && \ + make -j "$(nproc)" && make install && \ + rm -f mysql.tar.gz + +ENV PATH=$PATH:/usr/local/mysql/server/bin +COPY config/ /etc/mysql/ +COPY entrypoint.sh /usr/local/bin/ + +RUN groupadd -r mysql && \ + useradd -r -g mysql mysql && \ + mkdir -p /usr/local/mysql/data && \ + chown mysql:mysql /usr/local/mysql/data && \ + chmod 755 /usr/local/mysql/data && \ + ln -s /usr/local/bin/entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["entrypoint.sh"] +EXPOSE 3306 33060 +CMD ["mysqld"] diff --git a/mysql/8.3.0/22.03-lts-sp3/config/conf.d/my.cnf b/mysql/8.3.0/22.03-lts-sp3/config/conf.d/my.cnf new file mode 100644 index 00000000..248e0220 --- /dev/null +++ b/mysql/8.3.0/22.03-lts-sp3/config/conf.d/my.cnf @@ -0,0 +1,3 @@ +[mysqld] +host_cache_size=0 +skip-name-resolve \ No newline at end of file diff --git a/mysql/8.3.0/22.03-lts-sp3/config/my.cnf b/mysql/8.3.0/22.03-lts-sp3/config/my.cnf new file mode 100644 index 00000000..af9b6923 --- /dev/null +++ b/mysql/8.3.0/22.03-lts-sp3/config/my.cnf @@ -0,0 +1,29 @@ +# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# +# The MySQL Server configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysqld] +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +datadir = /var/lib/mysql +secure-file-priv= NULL + +# Custom config should go here +!includedir /etc/mysql/conf.d/ \ No newline at end of file diff --git a/mysql/8.3.0/22.03-lts-sp3/entrypoint.sh b/mysql/8.3.0/22.03-lts-sp3/entrypoint.sh new file mode 100644 index 00000000..98e43d19 --- /dev/null +++ b/mysql/8.3.0/22.03-lts-sp3/entrypoint.sh @@ -0,0 +1,416 @@ +#!/bin/bash +set -eo pipefail +shopt -s nullglob + +# logging functions +mysql_log() { + local type="$1"; shift + # accept argument string or stdin + local text="$*"; if [ "$#" -eq 0 ]; then text="$(cat)"; fi + local dt; dt="$(date --rfc-3339=seconds)" + printf '%s [%s] [Entrypoint]: %s\n' "$dt" "$type" "$text" +} +mysql_note() { + mysql_log Note "$@" +} +mysql_warn() { + mysql_log Warn "$@" >&2 +} +mysql_error() { + mysql_log ERROR "$@" >&2 + exit 1 +} + +# usage: file_env VAR [DEFAULT] +# ie: file_env 'XYZ_DB_PASSWORD' 'example' +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of +# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + mysql_error "Both $var and $fileVar are set (but are exclusive)" + fi + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" + elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + export "$var"="$val" + unset "$fileVar" +} + +# check to see if this file is being run or sourced from another script +_is_sourced() { + # https://unix.stackexchange.com/a/215279 + [ "${#FUNCNAME[@]}" -ge 2 ] \ + && [ "${FUNCNAME[0]}" = '_is_sourced' ] \ + && [ "${FUNCNAME[1]}" = 'source' ] +} + +# usage: docker_process_init_files [file [file [...]]] +# ie: docker_process_init_files /always-initdb.d/* +# process initializer files, based on file extensions +docker_process_init_files() { + # mysql here for backwards compatibility "${mysql[@]}" + mysql=( docker_process_sql ) + + echo + local f + for f; do + case "$f" in + *.sh) + # https://github.com/docker-library/postgres/issues/450#issuecomment-393167936 + # https://github.com/docker-library/postgres/pull/452 + if [ -x "$f" ]; then + mysql_note "$0: running $f" + "$f" + else + mysql_note "$0: sourcing $f" + . "$f" + fi + ;; + *.sql) mysql_note "$0: running $f"; docker_process_sql < "$f"; echo ;; + *.sql.bz2) mysql_note "$0: running $f"; bunzip2 -c "$f" | docker_process_sql; echo ;; + *.sql.gz) mysql_note "$0: running $f"; gunzip -c "$f" | docker_process_sql; echo ;; + *.sql.xz) mysql_note "$0: running $f"; xzcat "$f" | docker_process_sql; echo ;; + *.sql.zst) mysql_note "$0: running $f"; zstd -dc "$f" | docker_process_sql; echo ;; + *) mysql_warn "$0: ignoring $f" ;; + esac + echo + done +} + +# arguments necessary to run "mysqld --verbose --help" successfully (used for testing configuration validity and for extracting default/configured values) +_verboseHelpArgs=( + --verbose --help + --log-bin-index="$(mktemp -u)" # https://github.com/docker-library/mysql/issues/136 +) + +mysql_check_config() { + local toRun=( "$@" "${_verboseHelpArgs[@]}" ) errors + if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then + mysql_error $'mysqld failed while attempting to check config\n\tcommand was: '"${toRun[*]}"$'\n\t'"$errors" + fi +} + +# Fetch value from server config +# We use mysqld --verbose --help instead of my_print_defaults because the +# latter only show values present in config files, and not server defaults +mysql_get_config() { + local conf="$1"; shift + "$@" "${_verboseHelpArgs[@]}" 2>/dev/null \ + | awk -v conf="$conf" '$1 == conf && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }' + # match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)" +} + +# Ensure that the package default socket can also be used +# since rpm packages are compiled with a different socket location +# and "mysqlsh --mysql" doesn't read the [client] config +# related to https://github.com/docker-library/mysql/issues/829 +mysql_socket_fix() { + local defaultSocket + defaultSocket="$(mysql_get_config 'socket' mysqld --no-defaults)" + if [ "$defaultSocket" != "$SOCKET" ]; then + ln -sfTv "$SOCKET" "$defaultSocket" || : + fi +} + +# Do a temporary startup of the MySQL server, for init purposes +docker_temp_server_start() { + # For 5.7+ the server is ready for use as soon as startup command unblocks + if ! "$@" --daemonize --skip-networking --default-time-zone=SYSTEM --socket="${SOCKET}"; then + mysql_error "Unable to start server." + fi +} + +# Stop the server. When using a local socket file mysqladmin will block until +# the shutdown is complete. +docker_temp_server_stop() { + if ! mysqladmin --defaults-extra-file=<( _mysql_passfile ) shutdown -uroot --socket="${SOCKET}"; then + mysql_error "Unable to shut down server." + fi +} + +# Verify that the minimally required password settings are set for new databases. +docker_verify_minimum_env() { + if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then + mysql_error <<-'EOF' + Database is uninitialized and password option is not specified + You need to specify one of the following as an environment variable: + - MYSQL_ROOT_PASSWORD + - MYSQL_ALLOW_EMPTY_PASSWORD + - MYSQL_RANDOM_ROOT_PASSWORD + EOF + fi + + # This will prevent the CREATE USER from failing (and thus exiting with a half-initialized database) + if [ "$MYSQL_USER" = 'root' ]; then + mysql_error <<-'EOF' + MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user + Remove MYSQL_USER="root" and use one of the following to control the root user password: + - MYSQL_ROOT_PASSWORD + - MYSQL_ALLOW_EMPTY_PASSWORD + - MYSQL_RANDOM_ROOT_PASSWORD + EOF + fi + + # warn when missing one of MYSQL_USER or MYSQL_PASSWORD + if [ -n "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then + mysql_warn 'MYSQL_USER specified, but missing MYSQL_PASSWORD; MYSQL_USER will not be created' + elif [ -z "$MYSQL_USER" ] && [ -n "$MYSQL_PASSWORD" ]; then + mysql_warn 'MYSQL_PASSWORD specified, but missing MYSQL_USER; MYSQL_PASSWORD will be ignored' + fi +} + +# creates folders for the database +# also ensures permission for user mysql of run as root +docker_create_db_directories() { + local user; user="$(id -u)" + + local -A dirs=( ["$DATADIR"]=1 ) + local dir + dir="$(dirname "$SOCKET")" + dirs["$dir"]=1 + + # "datadir" and "socket" are already handled above (since they were already queried previously) + local conf + for conf in \ + general-log-file \ + keyring_file_data \ + pid-file \ + secure-file-priv \ + slow-query-log-file \ + ; do + dir="$(mysql_get_config "$conf" "$@")" + + # skip empty values + if [ -z "$dir" ] || [ "$dir" = 'NULL' ]; then + continue + fi + case "$conf" in + secure-file-priv) + # already points at a directory + ;; + *) + # other config options point at a file, but we need the directory + dir="$(dirname "$dir")" + ;; + esac + + dirs["$dir"]=1 + done + + mkdir -p "${!dirs[@]}" + + if [ "$user" = "0" ]; then + # this will cause less disk access than `chown -R` + find "${!dirs[@]}" \! -user mysql -exec chown --no-dereference mysql '{}' + + fi +} + +# initializes the database directory +docker_init_database_dir() { + mysql_note "Initializing database files" + "$@" --initialize-insecure --default-time-zone=SYSTEM + mysql_note "Database files initialized" +} + +# Loads various settings that are used elsewhere in the script +# This should be called after mysql_check_config, but before any other functions +docker_setup_env() { + # Get config + declare -g DATADIR SOCKET + DATADIR="$(mysql_get_config 'datadir' "$@")" + SOCKET="$(mysql_get_config 'socket' "$@")" + + # Initialize values that might be stored in a file + file_env 'MYSQL_ROOT_HOST' '%' + file_env 'MYSQL_DATABASE' + file_env 'MYSQL_USER' + file_env 'MYSQL_PASSWORD' + file_env 'MYSQL_ROOT_PASSWORD' + + declare -g DATABASE_ALREADY_EXISTS + if [ -d "$DATADIR/mysql" ]; then + DATABASE_ALREADY_EXISTS='true' + fi +} + +# Execute sql script, passed via stdin +# usage: docker_process_sql [--dont-use-mysql-root-password] [mysql-cli-args] +# ie: docker_process_sql --database=mydb <<<'INSERT ...' +# ie: docker_process_sql --dont-use-mysql-root-password --database=mydb /dev/null + + docker_init_database_dir "$@" + + mysql_note "Starting temporary server" + docker_temp_server_start "$@" + mysql_note "Temporary server started." + + mysql_socket_fix + docker_setup_db + docker_process_init_files /docker-entrypoint-initdb.d/* + + mysql_expire_root_user + + mysql_note "Stopping temporary server" + docker_temp_server_stop + mysql_note "Temporary server stopped" + + echo + mysql_note "MySQL init process done. Ready for start up." + echo + else + mysql_socket_fix + fi + fi + exec "$@" +} + +# If we are sourced from elsewhere, don't perform any further actions +if ! _is_sourced; then + _main "$@" +fi \ No newline at end of file diff --git a/mysql/README.md b/mysql/README.md new file mode 100644 index 00000000..2b001c07 --- /dev/null +++ b/mysql/README.md @@ -0,0 +1,31 @@ +# MySQL + +# Quick reference + +- The official mysql docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative) + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community) + +# Build reference + +1. Build images and push: +```shell +docker buildx build -t "openeuler/mysql:$TAG" --platform linux/amd64,linux/arm64 . --push +``` + +We are using `buildx` in here to generate multi-arch images, see more in [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/) + +2. Run: +```shell +docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d openeuler/mysql:{TAG} +``` +where `mysql` is the name you want to assign to your container, `my-secret-pw` is the password to be set for the MySQL root user. + +# Supported tags and respective Dockerfile links + +- 8.3.0-oe2203sp3: mysql v8.3.0, openEuler 22.03 LTS SP3 + +## Operating System +Linux/Unix, ARM64 or x86-64 architecture. diff --git a/mysql/doc/image-info.yml b/mysql/doc/image-info.yml new file mode 100644 index 00000000..819eac43 --- /dev/null +++ b/mysql/doc/image-info.yml @@ -0,0 +1,93 @@ +name: MySQL +category: database +description: MySQL是一种开源关系型数据库管理系统。与其他关系型数据库一样,MySQL将数据存储在由行和列组成的表中。用户可以使用结构化查询语言(通常称为SQL)定义、操作、控制和查询数据。MySQL凭借其经过验证的性能、可靠性和易用性成为基于Web的应用程序的领先数据库选择,涵盖从个人项目和网站,到电子商务和信息服务,一直到高端应用程序的整个范围。 +environment: | + 本应用以容器镜像的方式供用户使用,运行于预置docker的Linux环境。Docker的推荐安装方式如下: + ## apt安装 + ### 1.更新系统软件包依赖 + ``` + sudo spt update + sudo apt install ca-certificates curl gnupg lsb-release + ``` + ### 2.添加Docker官方GPG密钥 + ``` + sudo mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + ``` + ### 3.添加Docker官方APT源 + ``` + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + ``` + ### 4.再次更新软件包索引 + ``` + sudo apt update + ``` + ### 5.安装Docker + ``` + sudo apt install docker-ce docker-ce-cli containerd.io + ``` + + ## yum安装 + ### 1.安装yum-utils + ``` + sudo yum install -y yum-utils + ``` + ### 2.添加Docker源 + ``` + sudo yum-config-manager \ + > --add-repo \ + > https://download.docker.com/linux/centos/docker-ce.repo + ``` + ### 3.安装Docker + ``` + sudo yum install -y docker-ce docker-ce-cli containerd.io + ``` + + 注意,在openEuler环境安装docker时,可执行如下命令一键安装 + ``` + yum install -y docker + ``` + + ## 脚本安装 + ### 1.下载安装脚本 + ``` + curl -fsSL https://get.docker.com -o get-docker.sh + ``` + ### 2.使用root权限执行脚本 + ``` + sudo sh get-docker.sh + ``` + 使用脚本安装方式时,如果用户要指定安装的docker版本,需要自行修改`get-docker.sh`的源码内容。 + + ## 验证 + ``` + sudo docker run hello-world + ``` + +download: | + 获取容器镜像 + ``` + docker pull openeuler/mysql:{TAG} + ``` + +install: | + 启动容器 + ``` + docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d openeuler/mysql:{TAG} + ``` + 其中,mysql是分配给容器的名称,my-secret-pw是为MySQL根用户设置的密码。用户可根据自身需求,自定义启动选项。 + +license: View license +similar_packages: + - PostgreSQL: PostgreSQL是一个功能强大的开源关系型数据库管理系统,它提供了与MySQL类似的功能,并且支持广泛的标准SQL语法。PostgreSQL具有高度的可扩展性、可靠性和数据一致性,同时还提供了许多高级功能,如复杂查询、事务控制和触发器等。 + - Oracle Database: Oracle Database是一款商业的关系型数据库管理系统,它是市场上最受欢迎和广泛使用的数据库之一。Oracle Database提供了丰富的功能集,包括高级查询、分布式数据库、数据复制和高可用性选项等。 + - Microsoft SQL Server: Microsoft SQL Server是由Microsoft开发的关系型数据库管理系统。它提供了与MySQL类似的功能,同时还与Microsoft的其他产品和技术集成紧密。Microsoft SQL Server适用于Windows操作系统,并提供了高性能、可伸缩性和企业级功能。 + - SQLite: SQLite是一种嵌入式关系型数据库管理系统,它提供了轻量级的、零配置的数据库解决方案。SQLite具有小巧、高效、可嵌入的特点,适用于嵌入式设备和移动应用程序。 +dependency: + - ncurses-devel + - openssl + - libtirpc-devel + - rpcgen + - bison + - m4 \ No newline at end of file diff --git a/mysql/doc/picture/logo.png b/mysql/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..79eb4f36dbb1416c240b608f53413d77ee8f4b4f GIT binary patch literal 38845 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 I`u&&x2kwG4j{pDw literal 0 HcmV?d00001 diff --git a/mysql/meta.yml b/mysql/meta.yml new file mode 100644 index 00000000..6d231d7c --- /dev/null +++ b/mysql/meta.yml @@ -0,0 +1,2 @@ +8.3.0-oe2203sp3: + mysql/8.3.0/22.03-lts-sp3/Dockerfile \ No newline at end of file -- Gitee