Docker buildコマンドのimage作成〜コンテナ起動まで

Docker buildコマンドのimage作成〜コンテナ起動まで
目次

自宅PC(mac)で簡単なアプリケーションを作ろうと思い、Dockerを使ってmysqlを構築しようとした際の備忘録として残しておきます。

Dockerfile を作成する

まず、dockerのバージョンが古かったので、公式サイトからmac用のdockerを再度ダウンロードし、アップデートしておきます。

 1docker version
 2
 3Client:
 4 Version:      1.13.0
 5 API version:  1.25
 6 Go version:   go1.7.3
 7 Git commit:   49bf474
 8 Built:        Wed Jan 18 16:20:26 2017
 9 OS/Arch:      darwin/amd64
10
11Server:
12 Version:      1.13.0
13 API version:  1.25 (minimum version 1.12)
14 Go version:   go1.7.3
15 Git commit:   49bf474
16 Built:        Wed Jan 18 16:20:26 2017
17 OS/Arch:      linux/amd64
18 Experimental: true

以下のような簡単なDockerfileを作成し、プロジェクトのルートにおいておきます。 今回はmysql公式のdocker imageを使用することにしましょう。

1FROM mysql
2MAINTAINER soudegesu
3
4RUN echo "finished setup !!"

Dockerfile をビルドしてイメージを作成する

docker build コマンドを実行すると以下のようなエラーが出ました。

1docker build -t soudegesu/mysql:0.0.1 .
2
3Sending build context to Docker daemon 57.86 MB
4Error response from daemon: The Dockerfile (Dockerfile) cannot be empty

Dockerfileが配置されているディレクトリでコマンドを実行したので、Dockerfileを勝手に認識してくれるはずだったような。。 念のため、-f オプションを指定して、直接ファイルを指定してみたところ上手くいきました。

1docker build -f ./Dockerfile -t soudegesu/mysql:0.0.1 .
2
3Sending build context to Docker daemon 57.86 MB
4Step 1/3 : FROM mysql
5latest: Pulling from library/mysql
65040bd298390: Pull complete
7(以下略)

本当に先程のコマンドがNGだったのか怪しいので、docker imageを削除して、もう一度トライしてみましょう。

 1docker rmi soudegesu/mysql:0.0.1
 2
 3Untagged: soudegesu/mysql:0.0.1
 4Deleted: sha256:5cdbd0f32baa9bd25e39532ae9e660e35c0d9e57740406536b05bb7dbfbd4226
 5Deleted: sha256:b60d4e0b4ad869c06c6e874095d813c5d91990f0266897163d714b201501b577
 6
 7docker build -t soudegesu/mysql:0.0.1 .
 8
 9Sending build context to Docker daemon 57.86 MB
10Step 1/3 : FROM mysql
11 ---> 7666f75adb6b
12Step 2/3 : MAINTAINER soudegesu
13 ---> Using cache
14 ---> ebb2015c5850
15Step 3/3 : RUN echo "finished setup !!"
16(以下略)

コンテナを起動して確認する

次に docker run コマンドでコンテナを起動しましょう。 コンテナ起動後にコンテナ内で操作を行う場合に以下のオプションは良く利用されます。

  • -i:コンテナの標準入力を開きます
  • -t:tty(端末デバイス)を確保します
1docker run -it soudegesu/mysql:0.0.1 /bin/bash
2
3root@08671cc122c7:/#

OSを確認してみましょう。公式のmysqlのdocker imageはMoby Linuxを使っているようですね。

1root@0e512378b63d:/# cat /proc/version
2
3Linux version 4.9.4-moby (root@1d811a9194c4) (gcc version 5.3.0 (Alpine 5.3.0) ) #1 SMP Wed Jan 18 17:04:43 UTC 2017

mysql コマンドが生きているか確認しましょう。

1root@08671cc122c7:/# mysql
2
3ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

このままだとコンテナを立ち上げただけなので、mysql自体起動していません。

実はdocker run する際に オプションを指定してあげる必要があるようです。

1docker run --name soudegesu -e MYSQL_ROOT_PASSWORD=soudegesu -d soudegesu/mysql:0.0.1