本文展示怎么制作一个 mysql 镜像:
FROM hub.jdcloud.com/baseimages/centos:7-amd64-secure-config-v20230315
# Base on the centos install mysql-server, then push to hub.jdcloud.com/dbs/mysql-server:5.7.41-1
COPY ./mysql-community-common-5.7.34-1.el7.x86_64.rpm ./
COPY ./mysql-community-libs-5.7.34-1.el7.x86_64.rpm ./
COPY ./mysql-community-client-5.7.34-1.el7.x86_64.rpm ./
COPY ./mysql-community-server-5.7.34-1.el7.x86_64.rpm ./
ENV DB_USER root
ENV DB_PASSWORD mypassword
RUN yum install -y mysql-community-common-5.7.34-1.el7.x86_64.rpm \
&& yum install -y mysql-community-libs-5.7.34-1.el7.x86_64.rpm \
&& yum install -y mysql-community-client-5.7.34-1.el7.x86_64.rpm \
&& yum install -y mysql-community-server-5.7.34-1.el7.x86_64.rpm \
&& mysqld --initialize --user=root \
&& mysqld --daemonize --user=root \
&& export OLD_DBPASSWORD=`cat /var/log/mysqld.log | grep "A temporary password is generated for root@localhost" | awk '{print $11}'` \
&& mysqladmin -u${DB_USER} -p${OLD_DBPASSWORD} password ${DB_PASSWORD} \
&& mysqladmin shutdown -p${DB_PASSWORD}
ENTRYPOINT /usr/sbin/mysqld --user=${DB_USER}
---------------------------------------
case1:
ENTRYPOINT ["/usr/sbin/mysqld"]
CMD ["--user=root"]
docker run mysql_diy:v3
case2:
ENTRYPOINT ["/usr/sbin/mysqld", "--user"]
CMD ["bala bala"]
docker run mysql_diy:v3 root //这样就会以 root 用户启动, 命令行的参数替换掉 dockerfile 中的 CMD
case3:
ENTRYPOINT ["/usr/sbin/mysqld", "--user=${DB_USER}"] // 这种写法,读取不到环境变量 DB_USER
case4:
ENTRYPOINT /usr/sbin/mysqld --user=${DB_USER}
ENTRYPOINT "/usr/sbin/mysqld" "--user=${DB_USER}" // 和上面的写法等价
docker run mysql_diy:v3 //这样就会以 root 用户启动
docker run -e DB_USER=abc mysql_diy:v3 //这样就会以 abc 用户启动,只不过会失败,这是因为没有 abc 用户造成的
---------------------------------------
# MySQL start or stop command
mysqld --user=${DB_USER} // front boot
mysqld --daemonize --user=${DB_USER} // daemon boot
mysqladmin shutdown -p${DB_PASSWORD} // shutdown mysql