今回既存の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のバージョンによって、初期設定のログインがめんどくさいことになっているので、注意が必要です。