Rubyと筋肉とギターとわたし

エンジニア二年目の雑魚です。プログラミング・ギター・筋トレのことをメインにブログを書いていきます。

ubuntuで初めてのDockerfile

今まで人が作ったDockerfileを使ってdocker buildしていてほとんど触れていなかったのですが、それもDockerfileを作るのが難しいという勝手な苦手意識からでした。

ですがそうも言っていられないので、もっとdockerとお友達になるために超簡単なDockerfileを作成してみたいと思います。

環境

  • ubuntu16.04.1(elementary OS 0.4.1 Loki)
  • docker 17.12.0-ce

予想以上に簡単だった

最近Linuxに触れたからというのもあるとは思うのですが、結構簡単でした。

UNIXコマンドをDockerfileに書くことが多いので、Linuxの知識がある前提です。
Macでも同じようなコマンドが使えるのでLinuxを触っておいて損はないと思います。

てか、MacubuntuやらCentOSやらのコンテナ立ててシェルに入ってコマンドの練習すればいいんじゃないですかね。

winは知らん。

Dockerfileを作成する

それぞれ命令の意味はリファレンスが一番わかり易いと思います。

Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント

なんか適当なディレクトリを作ってそこにDockerfileを作成します。

$ mkdir ~/docker-pratice && cd !!$ && touch Dockerfile

ベースイメージをCentOS7にしてapacheでサーバーを立ててみます。

$ vim Dockerfile

FROM centos:centos7

RUN yum install -y httpd

CMD ["usr/sbin/httpd", "-D", "FOREGROUND"] 

多分これでおk。単純にCentOS上でapacheをインストールしてサーバー立てる命令を入れただけ。

ビルドするぞお

$ docker build -t docker-practice .
・
・
・
Complete!
Removing intermediate container 1f221c2502d5
 ---> 328e4875d499
Step 3/3 : CMD ["usr/sbin/httpd", "-D", "FOREGROUND"]
 ---> Running in 20abda19727c
Removing intermediate container 20abda19727c
 ---> 9f2a89281a6a
Successfully built 9f2a89281a6a
Successfully tagged docker-practice:lates

ビルド成功したのでイメージが作成されているか確認。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-practice     latest              9f2a89281a6a        52 seconds ago      334MB

いけてますね\(^o^)/

作成したdockerイメージを起動する

先ほどのイメージでapacheコンテナを立てます。デタッチドでポートを指定して起動すれば行ける。

$ docker run -d -p 80:80 docker-practice

本当に起動しているのかわからんので一応確認。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
754fab174a33        docker-practice     "usr/sbin/httpd -D F…"   10 seconds ago      Up 9 seconds        0.0.0.0:80->80/tcp   gifted_boyd

おお動いてますね。

これでlocalhostにアクセスしてみる。

f:id:rdwbocungelt5:20180411115238p:plain

いけました\(^o^)/

最後に

立てたサーバーのコンテナは閉じるのを忘れないように。

$ docker stop 754fab174a33
#=> docker psで出てきたコンテナID

とりあえずここまで出来たらDockerfile作成できるって言っていいんじゃね?とか偉そうなこと思ってみたりする。