diff options
| author | startxfr <clarue@startx.fr> | 2014-11-29 04:11:44 +0100 | 
|---|---|---|
| committer | startxfr <clarue@startx.fr> | 2014-11-29 04:11:44 +0100 | 
| commit | de3cd0a17a285afa0dd783ec11024c992f4aa3ff (patch) | |
| tree | 673c92818acfa12d02f3342b94747d8792586212 | |
| parent | 6d20210fdecb7dda4181b5a743d104644d5dfbaa (diff) | |
modif pour mise en place avancé de mariadb
| -rw-r--r-- | OS/Centos/Dockerfile | 3 | ||||
| -rw-r--r-- | OS/Fedora/Dockerfile | 3 | ||||
| -rw-r--r-- | README.md | 76 | ||||
| -rw-r--r-- | Services/mariadb/Dockerfile | 22 | ||||
| -rw-r--r-- | Services/mariadb/README.md | 7 | ||||
| -rw-r--r-- | Services/mariadb/mariadb_run.sh | 56 | ||||
| -rw-r--r-- | Services/mariadb/sx/mariadb.sh | 174 | ||||
| -rw-r--r-- | Services/mariadb/sx/mariadb_run.sh | 22 | 
8 files changed, 258 insertions, 105 deletions
| diff --git a/OS/Centos/Dockerfile b/OS/Centos/Dockerfile index 70b83d9..28df09d 100644 --- a/OS/Centos/Dockerfile +++ b/OS/Centos/Dockerfile @@ -1,7 +1,8 @@  FROM centos:latest  MAINTAINER Christophe LARUE <dev@startx.fr> +USER root  # Install minimal packages -RUN yum -y install deltarpm pwgen tar \ +RUN yum -y install deltarpm pwgen tar psmisc \      && yum -y update \      && yum clean all diff --git a/OS/Fedora/Dockerfile b/OS/Fedora/Dockerfile index 0570fd1..b100398 100644 --- a/OS/Fedora/Dockerfile +++ b/OS/Fedora/Dockerfile @@ -1,7 +1,8 @@  FROM fedora:latest  MAINTAINER Christophe LARUE <dev@startx.fr> +USER root  # Install minimal packages -RUN yum -y install deltarpm pwgen tar \ +RUN yum -y install deltarpm pwgen tar psmisc \      && yum -y update \      && yum clean all @@ -5,58 +5,58 @@ Docker container images all based on red hat like distributions. Actually you ca  ## Running container from docker registry images  ### Operating Systems -| OS      | Command | -|---------|-----| -| Fedora Core | `docker run -it --name="fedora" startx/fedora bash` |  -| CentOS | `docker run -it --name="centos" startx/centos bash` | +| OS                  | Command                                                              | +|---------------------|----------------------------------------------------------------------| +| Fedora Core         | `docker run -it --name="fedora" startx/fedora bash`                  |  +| CentOS              | `docker run -it --name="centos" startx/centos bash`                  |  ### Services -| Services      | Command | -|---------|-----| -| **Apache** | `docker run -d -p 80:80 --name="apache" startx/sv-apache` |  -| **MariaDB** | `docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb` |  -| **Memcache** | `docker run -d -p 11211:11211 --name="memcache" startx/sv-memcache` |  -| **MongoDB** | `docker run -d -p 27017:27017 --name="mongo" startx/sv-mongo` |  -| **nodejs** | `docker run -d -p 8000:8000 --name="nodejs" startx/sv-nodejs` |  -| **ooconv** | `docker run -d -p XXX:XXX --name="ooconv" startx/sv-ooconv` |  -| **php** | `docker run -d -p 80:80 --name="php" startx/sv-php` |  -| **postgreSQL** | `docker run -d -p 5432:5432 --name="postgres" startx/sv-postgres` |  -| **SSH** | `docker run -d -p 22:22 --name="ssh" startx/sv-ssh` |  +| Services            | Command                                                              | +|---------------------|----------------------------------------------------------------------| +| **Apache**          | `docker run -d -p 80:80 --name="apache" startx/sv-apache`            |  +| **MariaDB**         | `docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb`      |  +| **Memcache**        | `docker run -d -p 11211:11211 --name="memcache" startx/sv-memcache`  |  +| **MongoDB**         | `docker run -d -p 27017:27017 --name="mongo" startx/sv-mongo`        |  +| **nodejs**          | `docker run -d -p 8000:8000 --name="nodejs" startx/sv-nodejs`        |  +| **ooconv**          | `docker run -d -p XXX:XXX --name="ooconv" startx/sv-ooconv`          |  +| **php**             | `docker run -d -p 80:80 --name="php" startx/sv-php`                  |  +| **postgreSQL**      | `docker run -d -p 5432:5432 --name="postgres" startx/sv-postgres`    |  +| **SSH**             | `docker run -d -p 22:22 --name="ssh" startx/sv-ssh`                  |   ### Applications -| Applications      | Command | -|---------|-----| -| **PhpMyAdmin** | `docker run -d -p 80:80 --name="pma" startx/app-pma` |  -| **RockMongo** | `docker run -d -p 80:80 --name="rockmongo" startx/app-rockmongo` |  +| Applications        | Command                                                              | +|---------------------|----------------------------------------------------------------------| +| **PhpMyAdmin**      | `docker run -d -p 80:80 --name="pma" startx/app-pma`                 |  +| **RockMongo**       | `docker run -d -p 80:80 --name="rockmongo" startx/app-rockmongo`     |   ## Flavors (tags) for Red Hat like container's  This repository offer various flavour of Red Hat like distribution. Tag `:latest` is actually pointing to fedora core 20  ### Operating Systems -| OS      | Docker Hub repository | Flavour 1 | Flavour 2 | Flavour 3 | -|---------|-----------------------|---------|-------|-------| -| Fedora Core | `startx/fedora` | `:latest` | `:20` | `:21` |  -| CentOS | `startx/centos` | `:6` | `:7` |  | +| OS            | Docker Hub repository          | Flavour                | +|---------------|--------------------------------|------------------------| +| Fedora Core   | `startx/fedora`                | `:latest` `:20` `:21`  |  +| CentOS        | `startx/centos`                | `:6` `:7`              |  ### Services -| Service | Docker Hub repository | latest | Fedora | Fedora | CentOS | CentOS | -|---------|-----------------------|---------|-------|-------|----------|----------| -| Apache | `startx/sv-apache` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| MariaDB | `startx/sv-mariadb` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| Memcache | `startx/sv-memcache` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| MongoDB | `startx/sv-mongo` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| nodejs | `startx/sv-nodejs` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| ooconv | `startx/sv-ooconv` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| php | `startx/sv-php` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| postgreSQL | `startx/sv-postgres` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| SSH | `startx/sv-ssh` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | +| Service    | Docker Hub repository | Fedora                    | CentOS                | +|------------|-----------------------|---------------------------|-----------------------| +| Apache     | `startx/sv-apache`    | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| MariaDB    | `startx/sv-mariadb`   | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| Memcache   | `startx/sv-memcache`  | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| MongoDB    | `startx/sv-mongo`     | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| nodejs     | `startx/sv-nodejs`    | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| ooconv     | `startx/sv-ooconv`    | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| php        | `startx/sv-php`       | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| postgreSQL | `startx/sv-postgres`  | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| SSH        | `startx/sv-ssh`       | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` |  ### Applications -| Service | Docker Hub repository | latest | Fedora | Fedora | CentOS | CentOS | -|---------|-----------------------|---------|-------|-------|----------|----------| -| PhpMyAdmin | `startx/sv-pma` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | -| RockMongo | `startx/sv-rockmongo` | `:latest` | `:fc20` | `:fc21` | `:centos6` | `:centos7` | +| Service    | Docker Hub repository | Fedora                    | CentOS                | +|------------|-----------------------|---------------------------|-----------------------| +| PhpMyAdmin | `startx/sv-pma`       | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` | +| RockMongo  | `startx/sv-rockmongo` | `:latest` `:fc20` `:fc21` | `:centos6` `:centos7` |  ### Running sample container's diff --git a/Services/mariadb/Dockerfile b/Services/mariadb/Dockerfile index 1bdf0ea..9140c96 100644 --- a/Services/mariadb/Dockerfile +++ b/Services/mariadb/Dockerfile @@ -1,22 +1,30 @@  FROM startx/fedora  MAINTAINER Christophe LARUE <dev@startx.fr> -COPY mariadb_run.sh /bin/ +COPY sx/* /sx/  RUN yum -y install \      mariadb-libs \      mariadb-server \      mariadb \ +        \ +    psmisc \ +        \      && yum clean all \      && mkdir -p /var/log/mysql \ +    && mkdir -p /sx \      && touch /var/log/mysql/.keep /var/lib/mysql/.keep \      && chown -R mysql:mysql /var/log/mysql /var/lib/mysql \ -    && chmod ug+rx /bin/mariadb_* +    && chmod ug+rx /sx/mariadb* \ +    && chown -R mysql:mysql /sx/mariadb* -VOLUME ["/var/lib/mysql", "/var/log/mysql"]  USER mysql -  EXPOSE 3306 +VOLUME ["/var/lib/mysql", "/var/log/mysql"] + +# if you wan't to set root password, otherwise auto-generated +# see docker logs <containerId> +ENV mysql_newadminpwd "newRootPassword" + -#CMD ["/usr/libexec/mysqld"] -CMD ["/bin/mariadb_run.sh"] -ONBUILD CMD ["/bin/mariadb_run.sh"]
\ No newline at end of file +#ENDPOINT ["/sx/mariadb_run.sh"] +CMD ["/sx/mariadb_run.sh"]
\ No newline at end of file diff --git a/Services/mariadb/README.md b/Services/mariadb/README.md index d9436cd..0d4dad8 100644 --- a/Services/mariadb/README.md +++ b/Services/mariadb/README.md @@ -4,8 +4,11 @@ This container run mariadb on fedora server.  ## Running from docker registry  	docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb -	when linked to another container -	docker run -d --name="mariadb" startx/sv-mariadb +	# when used with a volume container +	docker run -d -v /var/lib/mysql -v /var/log/mysql --name mariadb-data startx/sv-mariadb +	docker run -d --volumes-from mariadb-data -p 3306:3306 --name="mariadb" startx/sv-mariadb +	# when used in a linked container +	docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb  	docker run -d --name="php" --link mariadb:mariadb startx/sv-php  ## Build and run from local Dockerfile diff --git a/Services/mariadb/mariadb_run.sh b/Services/mariadb/mariadb_run.sh deleted file mode 100644 index b5b1421..0000000 --- a/Services/mariadb/mariadb_run.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -ln -s /dev/stderr /var/log/mysql/mysqld.log -if [ ! -f /var/lib/mysql/.created ]; then -  function wait_for_mysqld_start { -    for i in {1..30}; do -      if echo 'select 1' | mysql -u root > /dev/null 2>&1; then -        return 0 -      fi -      sleep 1 -    done - -    echo "MariaDB did not start in time" -    exit 1 -  } - - - -  password=${DB_PASSWORD:-password} -  dbname=${DB_NAME:-master} - -  /usr/bin/mysql_install_db -u mysql - -  /usr/libexec/mysqld & -  pid=$! - -  wait_for_mysqld_start - -  echo "Creating database $dbname ..." - -  sql=$(cat <<SQL -  drop database if exists test; -  create database \`$dbname\` -     DEFAULT CHARACTER SET utf8 DEFAULT -     COLLATE utf8_general_ci; -SQL -) -  echo $sql | mysql -u root - -  #delete from user; - -  sql=$(cat <<SQL -    delete from user where user=''; -    grant all on *.* to 'mysql'@'localhost' identified by '$password' with grant option; -    grant all on *.* to 'mysql'@'%' identified by '$password' with grant option; -    flush privileges; -SQL -) -  echo $sql | mysql -u root mysql - -  touch /var/lib/mysql/.created -  kill -TERM $pid - -  echo "Starting mysqld ..." -fi - -exec /usr/libexec/mysqld
\ No newline at end of file diff --git a/Services/mariadb/sx/mariadb.sh b/Services/mariadb/sx/mariadb.sh new file mode 100644 index 0000000..af6124b --- /dev/null +++ b/Services/mariadb/sx/mariadb.sh @@ -0,0 +1,174 @@ +#!/bin/bash + +export TERM=dumb +export logfile="/var/log/mysql/mysqld.log" + +# Begin configuration before starting daemonized process +# redirect mysql.log to /dev/stderr +function begin_config { +    echo "=> Begin mariadb configuration for host $HOSTNAME" +    ln -s /dev/stderr $logfile +    if [ "$(ls -1 /var/lib/mysql | wc -l)" -le "3"  ]; then +        echo "=> directory /var/lib/mysql is empty, start mysql installation ..." +        install_db +    else  +        echo "=> data found in /var/lib/mysql, skip mysql installation ..." +    fi; +    if [ ! -f /var/lib/mysql/mysql.sock ]; then +        echo "=> mysqld is not running, start server ..." +        start_server +    else +        echo "=> mysqld is already running ..." +    fi; +    update_rootuser +} + +# End configuration process just before starting daemon +# stop output of mysql.log to /dev/stderr and create mysql.log file +function end_config { +    stop_server +    rm $logfile +    touch $logfile +    echo "=> End mariadb configuration ..." +} + +# Preform installation of database structure. Must be used when no +# database is already set +function install_db { +    echo "===> Installing mariadb databases ..." +    mysql_install_db -u mysql > /dev/null 2>&1 +    chown -R mysql:mysql /var/lib/mysql +} + +# Start the mysqld server in background. Used to perform config +# against the database structure such as user creation +function start_server { +    echo "===> Starting mariadb server ..." +    /usr/bin/mysqld_safe > /dev/null 2>&1 & +    sleep 8 +} + +# Stop the mysqld server running in background.  +function stop_server { +    echo "===> Stopping mariadb server ..." +    killall mysqld mysqld_safe +    sleep 8 +} + +# Start the mysqld server as a deamon and execute it inside  +# the running shell +function start_daemon { +    echo "=> Starting mariadb daemon ..." +    exec /usr/libexec/mysqld +} + +# Set new root password and grant permissions to all databases +function update_rootuser { +    if [ "$mysql_newadminpwd" = "" ]; then +       export mysql_newadminpwd=$(pwgen 13 1); +    fi +    local n=$mysql_newadminpwd; +    echo "===> Update root user password and permission" +    mysqladmin -u root password $n +    mysql -u root -p$n -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$n' WITH GRANT OPTION; FLUSH PRIVILEGES;" +    unset mysql_newadminpwd; +    export MARIADB_ROOTPWD=$n; +    echo "========================================================================"; +    echo "You can now connect to this MariaDB Server using the following credentials:"; +    echo " "; +    echo "        user type : administrator"; +    echo "        username  : root"; +    echo "        password  : $n"; +    echo " "; +    echo "        mysql -u root -p$n"; +    echo "========================================================================"; +    echo " "; +    return 0 +} + +# Find all sqlfiles in /tmp/ and import then using admin user +function import_sqlfiles { +    local filedir=$1; local p=$MARIADB_ROOTPWD; +    if [ "$(ls -1 $filedir | wc -l)" -ge "1"  ]; then +        echo "=> Found SQL files to import ..." +        for filename in "$filedir"; do +                import_sqlfile $filename +        done; +    fi; +    return 0 +} + +# Find all sqlfiles in /tmp/ and import then using admin user +function import_sqlfile { +    local filename=$1; local p=$MARIADB_ROOTPWD; +    if [ -f "$filename" ]; then +        echo "===> Importing sql file : $filename" +        mysql -u root -p$p < $filename +    else  +        echo "====> Could not find sql file $filename. Skip import..." +    fi; +    return 0 +} + +# Set new root password and grant permissions to all databases +function create_userdb { +    local userdb="$1"; local pass="$2"; local p=$MARIADB_ROOTPWD; +    if [ "$pass" = "" ]; then +       local pass=$(pwgen 13 1); +    fi +    echo "===> Create new user $userdb with database $userdb" +    mysql -u root -p$p -e "CREATE USER '$userdb'@'%';SET PASSWORD FOR '$userdb'@'%' = PASSWORD('$pass');\ +                           CREATE USER '$userdb'@'localhost';SET PASSWORD FOR '$userdb'@'localhost' = PASSWORD('$pass');\ +                           DROP DATABASE IF EXISTS $userdb; \ +                           CREATE DATABASE $userdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; \ +                           GRANT ALL PRIVILEGES ON $userdb.* TO '$userdb'@'%' IDENTIFIED BY '$pass'; \ +                           GRANT ALL PRIVILEGES ON $userdb.* TO '$userdb'@'localhost' IDENTIFIED BY '$pass'; \ +                           FLUSH PRIVILEGES;" +    echo "========================================================================"; +    echo "You can now connect to this MariaDB Server using the following credentials:"; +    echo " "; +    echo "        user type : user "; +    echo "        username  : $userdb "; +    echo "        password  : $pass"; +    echo "        database  : $userdb "; +    echo " "; +    echo "        mysql -u $userdb -p$pass $userdb"; +    echo "========================================================================"; +    echo " "; +    return 0 +} + +# Set new root password and grant permissions to all databases +function create_user { +    local user="$1"; local pass="$2"; local p=$MARIADB_ROOTPWD; +    if [ "$pass" = "" ]; then +       local pass=$(pwgen 13 1); +    fi +    echo "===> Create new user $user" +    mysql -u root -p$p -e "CREATE USER '$user'@'%';SET PASSWORD FOR '$user'@'%' = PASSWORD('$pass');\ +                           CREATE USER '$user'@'localhost';SET PASSWORD FOR '$user'@'localhost' = PASSWORD('$pass');" +    echo "========================================================================"; +    echo "You can now connect to this MariaDB Server using the following credentials:"; +    echo " "; +    echo "        user type : user "; +    echo "        username  : $user "; +    echo "        password  : $pass "; +    echo " "; +    echo "        mysql -u $user -p$pass"; +    echo "========================================================================"; +    echo " "; +    return 0 +} + +# Create a new database +function create_db { +    local db=$1; local p=$MARIADB_ROOTPWD; +    echo "===> Create new database $db" +    mysql -u root -p$p -e "CREATE DATABASE $db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"; +    echo "===> New database $db CREATED" +    return 0 +} + +if [[ "$0" == *"mariadb.sh" && ! $1 = "" ]];then +    eval "$@";  +fi
\ No newline at end of file diff --git a/Services/mariadb/sx/mariadb_run.sh b/Services/mariadb/sx/mariadb_run.sh new file mode 100644 index 0000000..07a4c03 --- /dev/null +++ b/Services/mariadb/sx/mariadb_run.sh @@ -0,0 +1,22 @@ +#!/bin/bash +source /sx/mariadb.sh + +begin_config + +## if you wan't to add a new user with database +#create_userdb 'dbuser1' 'password' +## if you wan't to add a new user with database (generated password) +#create_userdb 'dbuser2' +## if you wan't to add a new user +#create_user 'username' 'password' +## if you wan't to add a new database +#create_db 'dbname' +## Execute an SQL request to get the user list +#mysql -u root -p$MARIADB_ROOTPWD -e 'select user, host FROM mysql.user;' +## Execute SQL scripts located into a directory +#import_sqlfiles /tmp/sql/*.sql +## Execute a single SQL script +#import_sqlfile /tmp/sql/example.sql + +end_config +start_daemon
\ No newline at end of file | 
