1. 获取构建mysql镜像的脚本
git clone https://github.com/docker-library/mysql.git
2.预先下载gosu-arm64、gosu-arm64.asc ,并放到mysql/8.0目录下
wget -c https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64
wget -c https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64.asc
3.修改Dockerfile.oracle,使用本地下载的gosu
- #
- # NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
- #
- # PLEASE DO NOT EDIT IT DIRECTLY.
- #
- FROM oraclelinux:8-slim
- RUN set -eux; groupadd --system --gid 999 mysql; useradd --system --uid 999 --gid 999 --home-dir /var/lib/mysql --no-create-home mysql; mkdir /var/lib/mysql /var/run/mysqld; chown 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 1777 /var/lib/mysql /var/run/mysqld; mkdir /docker-entrypoint-initdb.d
- # add gosu for easy step-down from root
- # https://github.com/tianon/gosu/releases
- ENV GOSU_VERSION 1.14
- COPY ./gosu-arm64 /usr/local/bin/gosu
- COPY ./gosu-arm64.asc /usr/local/bin/gosu.asc
- RUN set -eux; # TODO find a better userspace architecture detection method than querying the kernel
- arch="$(uname -m)"; case "$arch" in aarch64) gosuArch='arm64' ;; x86_64) gosuArch='amd64' ;; *) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;; esac; # curl -fL -o /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$gosuArch.asc"; # curl -fL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$gosuArch"; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; # gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; chmod +x /usr/local/bin/gosu; gosu --version; gosu nobody true
- RUN set -eux; microdnf install -y gzip openssl xz zstd # Oracle Linux 8+ is very slim :)
- findutils ; microdnf clean all
- RUN set -eux; # https://dev.mysql.com/doc/refman/8.0/en/checking-gpg-signature.html
- # gpg: key 3A79BD29: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
- key='859BE8D7C586F538430B19C2467B942D3A79BD29'; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; gpg --batch --export --armor "$key" > /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql; rm -rf "$GNUPGHOME"
- ENV MYSQL_MAJOR 8.0
- ENV MYSQL_VERSION 8.0.28-1.el8
- RUN set -eu; . /etc/os-release; { echo '[mysql8.0-server-minimal]'; echo 'name=MySQL 8.0 Server Minimal'; echo 'enabled=1'; echo "baseurl=https://repo.mysql.com/yum/mysql-8.0-community/docker/el/${VERSION_ID%%[.-]*}/\$basearch/"; echo 'gpgcheck=1'; echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql'; # https://github.com/docker-library/mysql/pull/680#issuecomment-825930524
- echo 'module_hotfixes=true'; } | tee /etc/yum.repos.d/mysql-community-minimal.repo
- RUN set -eux; microdnf install -y "mysql-community-server-minimal-$MYSQL_VERSION"; microdnf clean all; # the "socket" value in the Oracle packages is set to "/var/lib/mysql" which isn't a great place for the socket (we want it in "/var/run/mysqld" instead)
- # https://github.com/docker-library/mysql/pull/680#issuecomment-636121520
- grep -F 'socket=/var/lib/mysql/mysql.sock' /etc/my.cnf; sed -i 's!^socket=.*!socket=/var/run/mysqld/mysqld.sock!' /etc/my.cnf; grep -F 'socket=/var/run/mysqld/mysqld.sock' /etc/my.cnf; { echo '[client]'; echo 'socket=/var/run/mysqld/mysqld.sock'; } >> /etc/my.cnf; # make sure users dumping files in "/etc/mysql/conf.d" still works
- ! grep -F '!includedir' /etc/my.cnf; { echo; echo '!includedir /etc/mysql/conf.d/'; } >> /etc/my.cnf; mkdir -p /etc/mysql/conf.d; mysqld --version; mysql --version
- RUN set -eu; . /etc/os-release; { echo '[mysql-tools-community]'; echo 'name=MySQL Tools Community'; echo "baseurl=https://repo.mysql.com/yum/mysql-tools-community/el/${VERSION_ID%%[.-]*}/\$basearch/"; echo 'enabled=1'; echo 'gpgcheck=1'; echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql'; # https://github.com/docker-library/mysql/pull/680#issuecomment-825930524
- echo 'module_hotfixes=true'; } | tee /etc/yum.repos.d/mysql-community-tools.repo
- ENV MYSQL_SHELL_VERSION 8.0.28-1.el8
- RUN set -eux; microdnf install -y "mysql-shell-$MYSQL_SHELL_VERSION"; microdnf clean all; mysqlsh --version
- VOLUME /var/lib/mysql
- COPY docker-entrypoint.sh /usr/local/bin/
- ENTRYPOINT ["docker-entrypoint.sh"]
- EXPOSE 3306 33060
- CMD ["mysqld"]
4.执行构建Docker镜像
到此这篇关于构建aarch64环境Mysql8.0的Docker镜像的文章就介绍到这了,更多相关Mysql Docker镜像内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!