##はじめに
前回はDockerのコマンド操作を学ぶために主な操作の記事を書かせて頂きました。
他にもいろいろ調べていたらdockerfileなるのもがありそれを使用してイメージを作成するとのことでした。
見た感じ難しそうで抵抗があったのですが、そういうものこそ試していかないといけないと思いやってみましたので備忘録件まとめ用として記事にしてみたいと思います。
##dockerfielってなんぞ?
コンテナを作成する場合、docker hubから欲しいイメージを取得してコンテナを作成したり、最小限のイメージから自分で新しくミドルウェアを追加したものをイメージ化して展開したりするとたくさんの情報が出ていましたが、自分でイメージを一から作成する場合などに使用するファイルです。
dockerfileはベースとするイメージに対して行う操作を記載する。
##dockerfileを使用する利点
- OSや各種ミドルウェアなどの設定をコードとして管理できる
- 上記により細かく設定した環境を漏れなく簡単に再作成したり同一環境を用意したい人に配布できる。
- jenkinsなどのCIツールを使用することでイメージ作成やコンテナのデプロイを自動化することもできる(らしい)
##書き方について
調べてみたのですが結構難しそうでした(笑)
まずは簡単にコードについて
- FROM イメージ名 →ベースにするイメージを指定する
- LABEL →管理用の情報などを記載する バージョン情報やなにを作るためのdockerfileですよ的な
- RUN →コマンド実行を命令するリターンキーの役割(こいつがコマンドを実行していく感じ)
- CMD →コンテナ起動時にファイルやコマンドを実行する命令を記載する
- ENV →環境変数を設定する
おおまかにはこんな感じでした。ほかにもたくさんありましたが、いったんこれくらいにしておきました。(覚える自信ない)
##実際に書いてみる
簡単にapache用のdockerfileを書いてみます。
FROM centos:centos7 #ベースになるイメージ指定
RUN yum -y update #パッケージ更新
RUN yum -y upgrade #更新、不要なもの削除(してくれるらしい)
RUN yum install -y httpd #apacheインストール
RUN systemctl enable httpd #apache自動起動設定
EXPOSE 80 #ポート開放
できたので上記ファイルを使用してイメージの作成をしてみます。
$ docker build -t apache .
ずーーーーと実行されて終わったみたいなのでイメージができてるか確認してみます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache latest 827d4f21614f 15 seconds ago 599MB
ありました!apacheという名前で作成したのでできています。
##イメージからコンテナ作成して起動
起動
$ docker run --privileged -d -p 80:80 apache /sbin/init
8a86bb505eca2b7143ac70a1033e34205ffbbccf48a3ca89e96031194b00ffd9
確認
しっかり起動しているのがわかりました!
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a86bb505eca apache "/sbin/init" 9 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp sweet_hodgkin
テストページが表示されたので問題なさそうです!!!
ちなみにcentos7の場合はコンテナの起動を上記のようにしないとうまくapacheがうまく起動しないようです。(めっちゃはまった)
ここら辺の起動の仕方とコンテナ内の動きについては調べなおして書かせていただければと思います。
##まとめ
- Dockerfileはベースのイメージに対して行う命令を記載するもの
- 構築過程のコマンドや起動時の命令もコードとして管理できる
- 実行するだけで何回でも同じ環境をミスなく作れる
- まだまだ勉強しないとdockerを扱って環境構築は厳しそうw