MySQL в контейнере Docker - часть II
В первой части мы рассмотрели то, как можно создать контейнер Docker с работающей в нем MySQL, сделали основу для контейнера, обновили адресную привязку и сделали данные постоянными. Однако, осталась еще пара штрихов, которые необходимо сделать.
1. Складываем все вместе
Не хотите следовать всем пошаговым инструкциям, чтобы получить ваши файлы правильно? Вот готовый продукт (плюс некоторые вспомогательные сценарии для сборки, запуска сервера и подключения к клиенту cli.)Также эти файлы можно найти на гитхабе.Dockerfile
FROM ubuntu
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -s /bin/true /sbin/initctl
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install mysql-client mysql-server
RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
ADD ./startup.sh /opt/startup.sh
EXPOSE 3306
CMD ["/bin/bash", "/opt/startup.sh"]
<h5>startup.sh</h5>
#!/bin/bash
if [ ! -f /var/lib/mysql/ibdata1 ]; then
mysql_install_db
/usr/bin/mysqld_safe &
sleep 10s
echo "GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'changeme' WITH GRANT OPTION; FLUSH PRIVILEGES" | mysql
killall mysqld
sleep 10s
fi
/usr/bin/mysqld_safe
2. Вспомогательные скрипты
build.sh
#!/bin/sh
docker build -t mysql .
run-server.sh
#!/bin/sh
docker run -d -p 3306:3306 -v /data/mysql:/var/lib/mysql mysql
run-client.sh
#!/bin/sh
TAG="mysql"
CONTAINER_ID=$(docker ps | grep $TAG | awk '{print $1}')
IP=$(docker inspect $CONTAINER_ID | python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]')
mysql -u admin -p -h $IP