ゴンの気まぐれなるままに
DB

DockerでMariaDBのコンテナを作成

今回既存のDBコンテナを利用しないで一から作成します。
Dockerのインストールの仕方はこちらをご確認ください。

やる事

  • OSはAlpineを利用したコンテナイメージの作成
  • DBはMariaDBをインストールする

イメージ確認

Alpineのイメージがあるか確認します。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy-amd64                v1.10.11            7387003276ac        6 months ago        98.3MB
k8s.gcr.io/kube-apiserver-amd64            v1.10.11            e851a7aeb6e8        6 months ago        228MB
k8s.gcr.io/kube-controller-manager-amd64   v1.10.11            978cfa2028bf        6 months ago        151MB
k8s.gcr.io/kube-scheduler-amd64            v1.10.11            d2c751d562c6        6 months ago        51.2MB
docker/kube-compose-controller             v0.4.12             02a45592fbea        8 months ago        27.8MB
docker/kube-compose-api-server             v0.4.12             0f92c77fa676        8 months ago        41.2MB
k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        14 months ago       193MB
k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        16 months ago       41MB
k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        16 months ago       42.2MB
k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        16 months ago       50.5MB
k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        17 months ago       742kB

Kubernetesを入れているので関連のイメージしか無い事を確認します。

イメージをプル

どのバージョンのAlpineをプルできるか分からないので、まずはdocker search alpineのコマンドで探します。

$ docker search alpine
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
alpine                                 A minimal Docker image based on Alpine Linux…   5330                [OK]                
mhart/alpine-node                      Minimal Node.js built on Alpine Linux           431                                     
anapsix/alpine-java                    Oracle Java 8 (and 7) with GLIBC 2.28 over A…   408                                     [OK]
frolvlad/alpine-glibc                  Alpine Docker image with glibc (~12MB)          203                                     [OK]
gliderlabs/alpine                      Image based on Alpine Linux will help you wi…   180                                     
mvertes/alpine-mongo                   light MongoDB container                         98                                      [OK]
alpine/git                             A  simple git container running in alpine li…   86                                      [OK]
kiasaki/alpine-postgres                PostgreSQL docker image based on Alpine Linux   43                                      [OK]
yobasystems/alpine-mariadb             MariaDB running on Alpine Linux [docker] [am…   41                                      [OK]
zzrot/alpine-caddy                     Caddy Server Docker Container running on Alp…   35                                      [OK]
davidcaste/alpine-tomcat               Apache Tomcat 7/8 using Oracle Java 7/8 with…   34                                      [OK]
easypi/alpine-arm                      AlpineLinux for RaspberryPi                     32                                      
alpine/socat                           Run socat command in alpine container           29                                      [OK]
byrnedo/alpine-curl                    Alpine linux with curl installed and set as …   25                                      [OK]
jfloff/alpine-python                   A small, more complete, Python Docker image …   25                                      [OK]
etopian/alpine-php-wordpress           Alpine WordPress Nginx PHP-FPM WP-CLI           21                                      [OK]
hermsi/alpine-sshd                     OpenSSH-server upon a slim and vanilla alpin…   21                                      [OK]
hermsi/alpine-fpm-php                  Dockerize your FPM PHP 7.3 upon a lightweigh…   16                                      [OK]
bashell/alpine-bash                    Alpine Linux with /bin/bash as a default she…   13                                      [OK]
zenika/alpine-chrome                   Chrome running in headless mode in a tiny Al…   12                                      [OK]
davidcaste/alpine-java-unlimited-jce   Oracle Java 8 (and 7) with GLIBC 2.21 over A…   11                                      [OK]
spotify/alpine                         Alpine image with `bash` and `curl`.            9                                       [OK]
tenstartups/alpine                     Alpine linux base docker image with useful p…   8                                       [OK]
rawmind/alpine-traefik                 This image is the traefik base. It comes fro…   5                                       [OK]
casept/alpine-amd64                    A basic alpine linux image.                     0           

色々出てきたけど、STARTSが一番多いalpineを使う事にします。なので次はalpineイメージをプルします。

$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
e7c96db7181b: Pull complete 
Digest: sha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6
Status: Downloaded newer image for alpine:latest

プルできたかを確認します。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
alpine                                     latest              055936d39205        2 weeks ago         5.53MB
k8s.gcr.io/kube-proxy-amd64                v1.10.11            7387003276ac        6 months ago        98.3MB
k8s.gcr.io/kube-apiserver-amd64            v1.10.11            e851a7aeb6e8        6 months ago        228MB
k8s.gcr.io/kube-controller-manager-amd64   v1.10.11            978cfa2028bf        6 months ago        151MB
k8s.gcr.io/kube-scheduler-amd64            v1.10.11            d2c751d562c6        6 months ago        51.2MB
docker/kube-compose-controller             v0.4.12             02a45592fbea        8 months ago        27.8MB
docker/kube-compose-api-server             v0.4.12             0f92c77fa676        8 months ago        41.2MB
k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        14 months ago       193MB
k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        16 months ago       41MB
k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        16 months ago       42.2MB
k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        16 months ago       50.5MB
k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        17 months ago       742kB

alpineがあるのを確認出来ました。

めっちゃサイズが小さいのに驚きです。

コンテナはサイズが小さいほどセキュリティやスケールした際に良いということが調査してわかりました。

MariaDBのコンテナの作成

ここからはDockerfileを作る為に、MariaDBをインストールします。

Dockerfileにインストール方法を記入しないといけないので、インストールの内容はメモしておきます。

まずは、コンテナをバックグランドで起動をします。

docker run -itd –name コンテナ名 コンテナイメージ:タグ名

オプションの-itdについては他のサイトを参考にしてください。

$ docker run -itd --name my-mariadb alpine:latest

起動しているか確認してみます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d34859ac30db        alpine:latest       "/bin/sh"           2 minutes ago       Up 2 minutes                            my-mariadb
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d34859ac30db        alpine:latest       "/bin/sh"           3 minutes ago       Up 3 minutes                            my-mariadb

プロセスが起動しているのを確認できたので、ではコンテナの中に入ってみます。

$ docker exec -it my-mariadb /bin/sh

MariaDBをインストール

yumやapt-getの様なコマンドは無いです。

apkと言うパッケージマネージャがあるのでそれでインストールを行います。

検索search
インストールadd
アンインストールdel
アップデートupdate
ごみファイルを削除–no-cache

MariaDBのサーバをインストールします。

クライアントについては他のコンテナからアクセスする為にここではインストールしません。

$ apk add --update --no-cache mariadb

永続ボリュームにデータを入れるとか、my.cnfとかの細かい設定についてはここでは行いません。

上記のapkコマンドを利用してDockerfileを作成していきます。

Dockerfile作成

下記がDockerfileの内容になります。

FROM alpine:latest
RUN apk add --update --no-cache mariadb
EXPOSE 3306
  • FROMでイメージを設定しています
  • RUNに先ほどのapkのインストールを行うコマンドを書きます
  • EXPUSEでコンテナに3306ポードの解放になる

Dockerfileからイメージをbuild

$ docker build -t my-mariadb:latest .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM alpine:latest
 ---> 055936d39205
Step 2/3 : RUN apk add --update --no-cache mariadb
 ---> Running in 4ec2799c112b
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/11) Installing mariadb-common (10.3.15-r0)
(2/11) Installing libaio (0.3.111-r0)
(3/11) Installing xz-libs (5.2.4-r0)
(4/11) Installing ncurses-terminfo-base (6.1_p20190105-r0)
(5/11) Installing ncurses-terminfo (6.1_p20190105-r0)
(6/11) Installing ncurses-libs (6.1_p20190105-r0)
(7/11) Installing pcre (8.42-r1)
(8/11) Installing libgcc (8.3.0-r0)
(9/11) Installing libstdc++ (8.3.0-r0)
(10/11) Installing libxml2 (2.9.9-r1)
(11/11) Installing mariadb (10.3.15-r0)
Executing mariadb-10.3.15-r0.pre-install
Executing busybox-1.29.3-r10.trigger
OK: 152 MiB in 25 packages
Removing intermediate container 4ec2799c112b
 ---> d84e5cc9486f
Step 3/3 : EXPOSE 3306
 ---> Running in 7cfd65780a5b
Removing intermediate container 7cfd65780a5b
 ---> 6c04e21bb7bf
Successfully built 6c04e21bb7bf
Successfully tagged my-mariadb:latest

作成するのに成功したみたいなので、docker imagesでイメージが作成出来ているか確認してみます。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED              SIZE
my-mariadb                                 latest              6c04e21bb7bf        About a minute ago   154MB
alpine                                     latest              055936d39205        2 weeks ago          5.53MB
k8s.gcr.io/kube-proxy-amd64                v1.10.11            7387003276ac        6 months ago         98.3MB
k8s.gcr.io/kube-apiserver-amd64            v1.10.11            e851a7aeb6e8        6 months ago         228MB
k8s.gcr.io/kube-controller-manager-amd64   v1.10.11            978cfa2028bf        6 months ago         151MB
k8s.gcr.io/kube-scheduler-amd64            v1.10.11            d2c751d562c6        6 months ago         51.2MB
docker/kube-compose-controller             v0.4.12             02a45592fbea        8 months ago         27.8MB
docker/kube-compose-api-server             v0.4.12             0f92c77fa676        8 months ago         41.2MB
k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        14 months ago        193MB
k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        16 months ago        41MB
k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        16 months ago        42.2MB
k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        16 months ago        50.5MB
k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        17 months ago        742kB

my-mariadb:latestのイメージが作成できているのが確認できました。

まとめ

DockerでMariaDBのコンテナを作成を行いましたが、kubernetesで利用する為に色々省きました。

省いた理由としては、クライアントを入れなかったのは別のコンテナからアクセスする為に不要と判断しました。

永続ボリュームに関してはdockerのものを使わずkubernetesのものを利用する為です。

サーバーにDBをインストールするのと同じで、Alpineにインストールしただけになります。

MariaDBのバージョンによって、初期設定のログインがめんどくさいことになっているので、注意が必要です。