Learning Docker for a long time, this is my first time to create a service with it. In Docker’s concept, each service should have a container, and your application may comes with many containers.
This time, I am gonna create a MariaDB service.
-
First of all, let’s create a file named
Dockerfile
.Dockerfile
is used to build an image:FROM centos:latest MAINTAINER David Xie "david.scriptfan@gmail.com" EXPOSE 3306
-
With this file, we can get a clean CentOS image, but we don’t have MariaDB installed. MariaDB in CentOS’s repo is not the latest, we can install it from MariaDB’s official repo. This is easy, just create a repo file and put it
/etc/yum.repos.d/
. OurDockerfile
will look like this:FROM centos:latest MAINTAINER David Xie "david.scriptfan@gmail.com" ADD mariadb.repo /etc/yum.repos.d/mariadb.repo RUN yum install -y hostname MariaDB-server RUN yum clean all EXPOSE 3306
And
mariadb.repo
:[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
-
Now we have MariaDB installed, but how can I connect to it, and how to set password for
root
? Let’s add more files for it.server.cnf
is used to make sure we are not blocked by MariaDB:[mysqld] bind-address=0.0.0.0 console=1 general_log=1 general_log_file=/dev/stdout log_error=/dev/stderr collation-server=utf8_unicode_ci character-set-server=utf8
mariadb.sql
is used to update password forroot
toroot
and grant all privilliges to all IPs.USE mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; UPDATE user SET password=PASSWORD("root") WHERE user='root'; FLUSH PRIVILEGES;
mariadb.sh
is used to apply all updates and start MariaDB service for us:#!/bin/sh chown -R mysql:mysql /var/lib/mysql mysql_install_db --user mysql > /dev/null mysqld_safe --user mysql & sleep 5s mysql -v < /root/mariadb.sql sleep 5s ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 mysqld_safe --user mysql
-
Final thing, we need to update our
Dockerfile
:# application container for MySQL # VERSION 2014-07-14 FROM centos:latest MAINTAINER David Xie "david.scriptfan@gmail.com" ADD mariadb.repo /etc/yum.repos.d/mariadb.repo ADD mariadb.sql /root/mariadb.sql ADD server.cnf /etc/my.cnf.d/server.cnf ADD mariadb.sh /root/mariadb.sh RUN yum install -y hostname MariaDB-server RUN yum clean all RUN chmod +x /root/mariadb.sh EXPOSE 3306 CMD ["/root/mariadb.sh"]
-
We already have everything we need, we can create our container now.
docker build --rm=true --no-cache=true -t mariadb . docker run -d -p 3306:3306 mariadb
After 10s, our container is ready to use. If you are using Docker on
boot2docker
, useboot2docker ip
to get correct IP for it. Then you can connect your mariadb withIP:3306
.
This project is on github, please visit: mariadb. If anything is wrong here, please let me know.