├── Dockerfile ├── README.md └── startup.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | MAINTAINER leafney "babycoolzx@126.com" 3 | 4 | RUN apk update && \ 5 | apk add mysql mysql-client && \ 6 | addgroup mysql mysql && \ 7 | mkdir /scripts && \ 8 | rm -rf /var/cache/apk/* 9 | 10 | VOLUME ["/var/lib/mysql"] 11 | 12 | COPY ./startup.sh /scripts/startup.sh 13 | RUN chmod +x /scripts/startup.sh 14 | 15 | EXPOSE 3306 16 | 17 | ENTRYPOINT ["/scripts/startup.sh"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Docker + Alpine-3.4 + Mysql/MariaDB-10.1.18 2 | 3 | #### parameter 4 | 5 | * `MYSQL_ROOT_PWD` : root Password default "mysql" 6 | * `MYSQL_USER` : new User 7 | * `MYSQL_USER_PWD` : new User Password 8 | * `MYSQL_USER_DB` : new Database for new User 9 | 10 | #### build image 11 | 12 | ``` 13 | $ docker build -t="leafney/docker-alpine-mysql" . 14 | ``` 15 | 16 | #### run a default contaier 17 | 18 | ``` 19 | $ docker run --name mysql -v /mysql/data/:/var/lib/mysql -d -p 3306:3306 leafney/docker-alpine-mysql 20 | ``` 21 | 22 | #### run a container with new User and Password 23 | 24 | ``` 25 | $ docker run --name mysql -v /mysql/data/:/var/lib/mysql -d -p 3306:3306 -e MYSQL_ROOT_PWD=123 -e MYSQL_USER=dev -e MYSQL_USER_PWD=dev leafney/docker-alpine-mysql 26 | ``` 27 | 28 | #### run a container with new Database for new User and Password 29 | 30 | ``` 31 | $ docker run --name mysql -v /mysql/data/:/var/lib/mysql -d -p 3306:3306 -e MYSQL_ROOT_PWD=123 -e MYSQL_USER=dev -e MYSQL_USER_PWD=dev -e MYSQL_USER_DB=userdb leafney/docker-alpine-mysql 32 | ``` 33 | -------------------------------------------------------------------------------- /startup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # parameters 4 | MYSQL_ROOT_PWD=${MYSQL_ROOT_PWD:-"mysql"} 5 | MYSQL_USER=${MYSQL_USER:-""} 6 | MYSQL_USER_PWD=${MYSQL_USER_PWD:-""} 7 | MYSQL_USER_DB=${MYSQL_USER_DB:-""} 8 | 9 | if [ ! -d "/run/mysqld" ]; then 10 | mkdir -p /run/mysqld 11 | chown -R mysql:mysql /run/mysqld 12 | fi 13 | 14 | if [ -d /var/lib/mysql/mysql ]; then 15 | echo '[i] MySQL directory already present, skipping creation' 16 | else 17 | echo "[i] MySQL data directory not found, creating initial DBs" 18 | 19 | chown -R mysql:mysql /var/lib/mysql 20 | 21 | # init database 22 | echo 'Initializing database' 23 | mysql_install_db --user=mysql > /dev/null 24 | echo 'Database initialized' 25 | 26 | echo "[i] MySql root password: $MYSQL_ROOT_PWD" 27 | 28 | # create temp file 29 | tfile=`mktemp` 30 | if [ ! -f "$tfile" ]; then 31 | return 1 32 | fi 33 | 34 | # save sql 35 | echo "[i] Create temp file: $tfile" 36 | cat << EOF > $tfile 37 | USE mysql; 38 | FLUSH PRIVILEGES; 39 | DELETE FROM mysql.user; 40 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PWD' WITH GRANT OPTION; 41 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_ROOT_PWD' WITH GRANT OPTION; 42 | EOF 43 | 44 | 45 | # Create new database 46 | if [ "$MYSQL_USER_DB" != "" ]; then 47 | echo "[i] Creating database: $MYSQL_USER_DB" 48 | echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_USER_DB\` CHARACTER SET utf8 COLLATE utf8_general_ci;" >> $tfile 49 | 50 | # set new User and Password 51 | if [ "$MYSQL_USER" != "" ] && [ "$MYSQL_USER_PWD" != "" ]; then 52 | echo "[i] Creating user: $MYSQL_USER with password $MYSQL_USER_PWD" 53 | echo "GRANT ALL ON \`$MYSQL_USER_DB\`.* to '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_USER_PWD';" >> $tfile 54 | fi 55 | else 56 | # don`t need to create new database,Set new User to control all database. 57 | if [ "$MYSQL_USER" != "" ] && [ "$MYSQL_USER_PWD" != "" ]; then 58 | echo "[i] Creating user: $MYSQL_USER with password $MYSQL_USER_PWD" 59 | echo "GRANT ALL ON *.* to '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_USER_PWD';" >> $tfile 60 | fi 61 | fi 62 | 63 | echo 'FLUSH PRIVILEGES;' >> $tfile 64 | 65 | # run sql in tempfile 66 | echo "[i] run tempfile: $tfile" 67 | /usr/bin/mysqld --user=mysql --bootstrap --verbose=0 < $tfile 68 | rm -f $tfile 69 | fi 70 | 71 | echo "[i] Sleeping 5 sec" 72 | sleep 5 73 | 74 | echo '[i] start running mysqld' 75 | exec /usr/bin/mysqld --user=mysql --console 76 | --------------------------------------------------------------------------------