基于rockylinux9构建mysql8.0如何用entrypoint怎么写
时间: 2023-06-12 13:03:19 浏览: 174
docker mysql启动时执行初始化sql
可以使用以下示例的Dockerfile,其中包括了ENTRYPOINT命令和一些其他的设置。这个Dockerfile基于Rocky Linux 8.4,并使用MySQL 8.0官方的RPM仓库来安装MySQL。
```dockerfile
FROM rockylinux/rockylinux:8.4
RUN dnf install -y dnf-utils \
&& dnf module enable -y mysql:8.0 \
&& dnf install -y mysql-community-server \
&& dnf clean all \
&& rm -rf /var/cache/dnf/*
# Create the MySQL data directory
RUN mkdir -p /var/lib/mysql \
&& chown -R mysql:mysql /var/lib/mysql
# Copy the entrypoint script and make it executable
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Set the entrypoint command
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
# Expose the MySQL port
EXPOSE 3306
# Set some default environment variables
ENV MYSQL_ROOT_PASSWORD=changeme \
MYSQL_DATABASE=mydb \
MYSQL_USER=myuser \
MYSQL_PASSWORD=mypass
# Set the default command for the container
CMD ["mysqld"]
```
其中,`docker-entrypoint.sh`是一个自定义的脚本,用于在容器启动时运行一些初始化脚本和设置MySQL配置。以下是一个例子:
```bash
#!/bin/bash
set -eo pipefail
# Run any custom initialization scripts
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh)
echo "$0: running $f"
. "$f"
;;
*.sql)
echo "$0: running $f"
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < "$f"
;;
*)
echo "$0: ignoring $f"
;;
esac
echo
done
# Set the MySQL root password
if [ -n "$MYSQL_ROOT_PASSWORD" ]; then
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';"
fi
# Create the MySQL user and database
if [ -n "$MYSQL_USER" -a -n "$MYSQL_PASSWORD" -a -n "$MYSQL_DATABASE" ]; then
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" <<-EOSQL
CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD';
CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;
GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%';
EOSQL
fi
# Start the MySQL service
exec "$@"
```
该脚本会从`/docker-entrypoint-initdb.d`目录中读取任何初始化脚本(例如SQL或shell脚本),并在容器启动时运行它们。然后,它会设置MySQL的root密码,并创建一个MySQL用户和数据库。最后,它会启动MySQL服务。
在Dockerfile中,我们使用`ENTRYPOINT`命令设置了该脚本作为容器的入口点,这意味着该脚本将在容器启动时自动运行。我们还使用了`EXPOSE`命令来将MySQL端口3306暴露给主机。最后,我们使用`CMD`命令设置了默认的容器命令为`mysqld`,这意味着当容器启动时,它将自动启动MySQL服务。
希望这可以帮助你构建一个基于Rocky Linux 9的MySQL 8.0容器,并使用ENTRYPOINT命令来运行自定义初始化脚本和设置MySQL配置。
阅读全文