Skip to content

Commit

Permalink
DMY-002 Fixing MySQL 5.7 startup-errors
Browse files Browse the repository at this point in the history
  • Loading branch information
cytopia committed Apr 20, 2017
1 parent 5e722c8 commit 78396db
Show file tree
Hide file tree
Showing 15 changed files with 489 additions and 333 deletions.
86 changes: 86 additions & 0 deletions .gitignore
@@ -0,0 +1,86 @@
# Note:
# To effectively apply the changes you will have
# to re-index the git index (if there are already
# commited files)
#
# $ git rm -r --cached .
# $ git add .
# $ git commit -m ".gitignore index rebuild"
#


######################################
# CUSTOM
######################################


######################################
# GENERIC
######################################

###### std ######
.lock
*.log

###### patches/diffs ######
*.patch
*.diff
*.orig
*.rej


######################################
# Operating Systems
######################################

###### OSX ######
._*
.DS*
.Spotlight-V100
.Trashes

###### Windows ######
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
*.lnk
*.shortcut

######################################
# Editors
######################################

###### Sublime ######
*.sublime-workspace
*.sublime-project

###### Eclipse ######
.classpath
.buildpath
.project
.settings/

###### Netbeans ######
/nbproject/

###### Intellij IDE ######
.idea/
.idea_modules/

###### vim ######
*.swp
*.swo
*.swn
*.swm
*~

###### TextMate ######
.tm_properties
*.tmproj

###### BBEdit ######
*.bbprojectd
*.bbproject

.vagrant
97 changes: 91 additions & 6 deletions Dockerfile
Expand Up @@ -13,20 +13,105 @@ LABEL \
image="mysql-5.7" \
vendor="cytopia" \
license="MIT" \
build-date="2016-11-03"
build-date="2017-04-20"


###
### Envs
###

# User/Group
ENV MY_USER="mysql"
ENV MY_GROUP="mysql"
ENV MY_UID="48"
ENV MY_GID="48"

# Files
ENV MYSQL_INCL="/etc/mysql/conf.d"
ENV MYSQL_CUST_INCL="/etc/mysql/docker-default.d"
ENV MYSQL_DEF_DAT="/var/lib/mysql"
ENV MYSQL_DEF_LOG="/var/log/mysql"
ENV MYSQL_DEF_PID="/var/run/mysqld"
ENV MYSQL_DEF_SCK="/var/sock/mysqld"


###
### Install
###
RUN groupadd -g ${MY_GID} -r ${MY_GROUP} &&\
adduser ${MY_USER} -u ${MY_UID} -M -s /sbin/nologin -g ${MY_GROUP}

RUN \
yum -y install epel-release && \
rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && \
yum-config-manager --disable mysql55-community && \
yum-config-manager --disable mysql56-community && \
yum-config-manager --enable mysql57-community && \
yum clean all

RUN yum -y update && yum -y install \
mysql-community-server

RUN \
yum -y autoremove && \
yum clean metadata && \
yum clean all && \
yum -y install hostname && \
yum clean all


##
## Bootstrap Scipts
## Configure
##
COPY ./scripts/docker-install.sh /
COPY ./scripts/docker-entrypoint.sh /
RUN \
mkdir -p ${MYSQL_INCL} && \
mkdir -p ${MYSQL_CUST_INCL} && \
mkdir -p ${MYSQL_DEF_DAT} && \
mkdir -p ${MYSQL_DEF_SCK} && \
mkdir -p ${MYSQL_DEF_PID} && \
mkdir -p ${MYSQL_DEF_LOG} && \
\
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_INCL} && \
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_CUST_INCL} && \
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_DEF_DAT} && \
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_DEF_SCK} && \
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_DEF_PID} && \
chown -R ${MY_USER}:${MY_GROUP} ${MYSQL_DEF_LOG} && \
\
chmod 0775 ${MYSQL_INCL} && \
chmod 0775 ${MYSQL_CUST_INCL} && \
chmod 0775 ${MYSQL_DEF_DAT} && \
chmod 0775 ${MYSQL_DEF_SCK} && \
chmod 0775 ${MYSQL_DEF_PID} && \
chmod 0775 ${MYSQL_DEF_LOG}

RUN \
echo "[client]" > /etc/my.cnf && \
echo "socket = ${MYSQL_DEF_SCK}/mysqld.sock" >> /etc/my.cnf && \
\
echo "[mysql]" >> /etc/my.cnf && \
echo "socket = ${MYSQL_DEF_SCK}/mysqld.sock" >> /etc/my.cnf && \
\
echo "[mysqld]" >> /etc/my.cnf && \
echo "skip-host-cache" >> /etc/my.cnf && \
echo "skip-name-resolve" >> /etc/my.cnf && \
echo "datadir = ${MYSQL_DEF_DAT}" >> /etc/my.cnf && \
echo "user = ${MY_USER}" >> /etc/my.cnf && \
echo "port = 3306" >> /etc/my.cnf && \
echo "bind-address = 0.0.0.0" >> /etc/my.cnf && \
echo "socket = ${MYSQL_DEF_SCK}/mysqld.sock" >> /etc/my.cnf && \
echo "pid-file = ${MYSQL_DEF_PID}/mysqld.pid" >> /etc/my.cnf && \
echo "general_log_file = ${MYSQL_DEF_LOG}/mysql.log" >> /etc/my.cnf && \
echo "slow_query_log_file = ${MYSQL_DEF_LOG}/slow.log" >> /etc/my.cnf && \
echo "log-error = ${MYSQL_DEF_LOG}/error.log" >> /etc/my.cnf && \
echo "!includedir ${MYSQL_INCL}/" >> /etc/my.cnf && \
echo "!includedir ${MYSQL_CUST_INCL}/" >> /etc/my.cnf


##
## Install
## Bootstrap Scipts
##
RUN /docker-install.sh
COPY ./scripts/docker-entrypoint.sh /


##
Expand Down
9 changes: 8 additions & 1 deletion README.md
@@ -1,6 +1,6 @@
# MySQL 5.7 Docker

[![Build Status](https://travis-ci.org/cytopia/docker-mysql-5.7.svg?branch=master)](https://travis-ci.org/cytopia/docker-mysql-5.7) [![](https://images.microbadger.com/badges/version/cytopia/mysql-5.7.svg)](https://microbadger.com/images/cytopia/mysql-5.7 "mysql-5.7") [![](https://images.microbadger.com/badges/image/cytopia/mysql-5.7.svg)](https://microbadger.com/images/cytopia/mysql-5.7 "mysql-5.7") [![](https://images.microbadger.com/badges/license/cytopia/mysql-5.7.svg)](https://microbadger.com/images/cytopia/mysql-5.7 "mysql-5.7")
<small>**Latest build:** 2017-04-20</small>

[![cytopia/mysql-5.7](http://dockeri.co/image/cytopia/mysql-5.7)](https://hub.docker.com/r/cytopia/mysql-5.7/)

Expand Down Expand Up @@ -116,3 +116,10 @@ Configuration files inside this docker are read in the following order:
| 2 | `/etc/mysql/my.cnf` | Operating system default |
| 3 | `/etc/mysql/docker-default.d/*.cnf` | Alters additional settings via this dockers optional environmental variables (`socket` and `general_log`) |
| 4 | `/etc/mysql/conf.d/` | Can be mounted to provide custom `*.cnf` files which can overwrite anything of the above. |


## Modules

**[Version]**

mysqld Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL))
56 changes: 56 additions & 0 deletions build/docker-attach.sh
@@ -0,0 +1,56 @@
#!/bin/sh -eu


###
### Globals
###
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)/.."


###
### Funcs
###
run() {
_cmd="${1}"
_red="\033[0;31m"
_green="\033[0;32m"
_reset="\033[0m"
_user="$(whoami)"

printf "${_red}%s \$ ${_green}${_cmd}${_reset}\n" "${_user}"
sh -c "LANG=C LC_ALL=C ${_cmd}"
}


###
### Checks
###

# Check Dockerfile
if [ ! -f "${CWD}/Dockerfile" ]; then
echo "Dockerfile not found in: ${CWD}/Dockerfile."
exit 1
fi

# Get docker Name
if ! grep -q 'image=".*"' "${CWD}/Dockerfile" > /dev/null 2>&1; then
echo "No 'image' LABEL found"
exit
fi

# Make sure exactly 1 container is running
NAME="$( grep 'image=".*"' "${CWD}/Dockerfile" | sed 's/^[[:space:]]*//g' | awk -F'"' '{print $2}' )"
COUNT="$( docker ps | grep -c "cytopia/${NAME}" || true)"
if [ "${COUNT}" != "1" ]; then
echo "${COUNT} 'cytopia/${NAME}' container running. Unable to attach."
exit 1
fi


###
### Attach
###
DID="$(docker ps | grep "cytopia/${NAME}" | awk '{print $1}')"

echo "Attaching to: cytopia/${NAME}"
run "docker exec -it ${DID} env TERM=xterm /bin/bash -l"
70 changes: 70 additions & 0 deletions build/docker-build.sh
@@ -0,0 +1,70 @@
#!/bin/sh -eu


###
### Globals
###
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)/.."


###
### Funcs
###
run() {
_cmd="${1}"
_red="\033[0;31m"
_green="\033[0;32m"
_reset="\033[0m"
_user="$(whoami)"

printf "${_red}%s \$ ${_green}${_cmd}${_reset}\n" "${_user}"
sh -c "LANG=C LC_ALL=C ${_cmd}"
}


###
### Checks
###

# Check Dockerfile
if [ ! -f "${CWD}/Dockerfile" ]; then
echo "Dockerfile not found in: ${CWD}/Dockerfile."
exit 1
fi

# Get docker Name
if ! grep -q 'image=".*"' "${CWD}/Dockerfile" > /dev/null 2>&1; then
echo "No 'image' LABEL found"
exit
fi
NAME="$( grep 'image=".*"' "${CWD}/Dockerfile" | sed 's/^[[:space:]]*//g' | awk -F'"' '{print $2}' )"
DATE="$( date '+%Y-%m-%d' )"


###
### Build
###

# Update build date
run "sed -i'' 's/<small>\*\*Latest\sbuild.*/<small>**Latest build:** ${DATE}<\/small>/g' ${CWD}/README.md"
run "sed -i'' 's/build-date=\".*\"/build-date=\"${DATE}\"/g' ${CWD}/Dockerfile"

# Build Docker
run "docker build -t cytopia/${NAME} ${CWD}"


###
### Retrieve information afterwards and Update README.md
###

docker run -d --rm --name my_tmp_${NAME} -e MYSQL_ROOT_PASSWORD= -t cytopia/${NAME}
SQL_VERSION="$( docker exec my_tmp_${NAME} mysqld -V )"
docker stop "$(docker ps | grep "my_tmp_${NAME}" | awk '{print $1}')"

echo "${SQL_VERSION}"

sed -i'' '/##[[:space:]]Modules/q' "${CWD}/README.md"
echo "" >> "${CWD}/README.md"
echo "**[Version]**" >> "${CWD}/README.md"
echo "" >> "${CWD}/README.md"
echo "${SQL_VERSION}" >> "${CWD}/README.md"
46 changes: 46 additions & 0 deletions build/docker-enter.sh
@@ -0,0 +1,46 @@
#!/bin/sh -eu


###
### Globals
###
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)/.."


###
### Funcs
###
run() {
_cmd="${1}"
_red="\033[0;31m"
_green="\033[0;32m"
_reset="\033[0m"
_user="$(whoami)"

printf "${_red}%s \$ ${_green}${_cmd}${_reset}\n" "${_user}"
sh -c "LANG=C LC_ALL=C ${_cmd}"
}


###
### Checks
###

# Check Dockerfile
if [ ! -f "${CWD}/Dockerfile" ]; then
echo "Dockerfile not found in: ${CWD}/Dockerfile."
exit 1
fi

# Get docker Name
if ! grep -q 'image=".*"' "${CWD}/Dockerfile" > /dev/null 2>&1; then
echo "No 'image' LABEL found"
exit
fi
NAME="$( grep 'image=".*"' "${CWD}/Dockerfile" | sed 's/^[[:space:]]*//g' | awk -F'"' '{print $2}' )"


###
### Enter
###
run "docker run -i --entrypoint /bin/bash -t cytopia/${NAME}"

0 comments on commit 78396db

Please sign in to comment.