デザイン開発部の大嶽です。 今日も路線変更で、Dockerネタに迫ってみたいと思います!
Dockerってなんぞや?
上司: ちょっとDockerって使えないか調べてみてよ。
部下: ああ、はいはい。
早速、グぐってみました。
コンテナ管理・・・・。
仮想化・・・・・。ホストOS・・コンテナ・・・
Infra….code…..
なんだかシステムの人じゃないと頭が痛くなりますね。
手短に書くと、OS上にdockerがあれば何処でも動く仮想環境(?)のようですね。なんだかJavaのVMみたいな感じですね。
VirtualPCと何が違う?と言われると長くなるので他の記事に任せておきましょう。
参考:
http://www.atmarkit.co.jp/ait/series/1511/
Dockerいれてみる
上司: なんか情報あつまった?
部下: ええ。
上司: じゃあ、デモ環境つくってみてよ?
部下: ああ、はいはい。
参考記事を一読した限りではLinux環境で動く仕組みのようで。
Windows,Mac版もあるようですが、インストールが必要なので見送り。今回もAWS環境に作ってみましょ-。
色々調べること小一時間・・・・・
1 | # sudo yum install docker |
これでインストールできるようですね。
root権限がないとコマンドが実行できないので、sudo su しておきます。
バージョンの確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # docker version Client: Version: 1.12.6 API version: 1.24 Go version: go1.6.3 Git commit: 7392c3b/1.12.6 Built: Tue Mar 7 20:34:04 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Go version: go1.6.3 Git commit: 7392c3b/1.12.6 Built: Tue Mar 7 20:34:04 2017 OS/Arch: linux/amd64 |
Dockerで環境をつくってみる
インストールは無事完了したので、早速環境をつくってみることに。
色々調べること小一時間・・・・・
buildしてimage作って、runする?
どうやら次の3ステップで起動までできるようです。
- コンテナに対応したLinuxイメージを用意する
- Dockerfileを用意してイメージを作る
- 作成したイメージからコンテナを起動する
LinuxイメージはAWSからも提供されているようなので利用してみることに。
https://www.infoq.com/jp/news/2017/01/amazon-linux-container-image
Dockerfileを用意してbuildするとimageが出来上がるとのこと。
githubにミニマムな環境用のファイルが公開されているのでこれを使います。
https://github.com/aws/amazon-linux-docker-images
1 2 | # git clone https://github.com/aws/amazon-linux-docker-images # git checkout 2017.03 |
Dockerfileの置いてあるフォルダへ移動します。
1 | # docker build -t awslinux . |
作成したイメージを確認
1 | # docker images |
イメージからコンテナを起動
1 2 3 4 | # docker run -it --name myawslinux1 awslinux bash-4.2# ls bin dev home lib64 media opt root selinux sys usr boot etc lib local mnt proc sbin srv tmp var |
「-it」はインタラクティブモードで起動するので、コンテナ上のbashを使用してる状態になります。
起動した状態を確認するには別のterminalから確認します。
1 2 3 | # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7e559cc32118 awslinux "/bin/bash" 2 hours ago Up About an hour myawslinux1 |
起動状態はSTATUSの部分を確認します。Upであれば起動中。
コンテナは起動すると指定されたコマンドを実行して停止するようになっています。
bashからexitするとコンテナは停止します。
1 2 | bash-4.2# exit exit |
停止したコンテナは「-a」をつけると確認することができます。
1 2 3 | # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7e559cc32118 awslinux "/bin/bash" 2 hours ago Exited(127) About an hour myawslinux1 |
https://hub.docker.com/_/amazonlinux/
イメージ自体は下記のコマンドでも取得できるようです。
1 | # docker pull amazonlinux |
Dockerでapache環境をつくってみる
上司: なんか情報あつまった?
部下: ええ。起動するところまでは確認できましたよ。
上司: じゃあ、Webサーバー環境つくってみてよ?
部下: ああ、はいはい。
とりあえず停止したコンテナを起動してみます。
そのままyumでapacheをインストールしてみることに。
AWSのyumリポジトリがそのまま使えるのでEC2を利用している場合は余り違いがないので割と楽です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # docker start -i [コンテナID] bash-4.2# yum install httpd24 Loaded plugins: ovl, priorities amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.3 kB 00:00:00 (1/5): amzn-updates/latest/group | 35 kB 00:00:00 (2/5): amzn-main/latest/group | 35 kB 00:00:00 (3/5): amzn-updates/latest/primary_db | 113 kB 00:00:00 (4/5): amzn-updates/latest/updateinfo | 380 kB 00:00:00 (5/5): amzn-main/latest/primary_db | 3.6 MB 00:00:01 Resolving Dependencies --> Running transaction check ---> Package httpd24.x86_64 0:2.4.25-1.68.amzn1 will be installed --> Processing Dependency: httpd24-tools = 2.4.25-1.68.amzn1 for package: httpd24-2.4.25-1.68.amzn1.x86_64 --> Processing Dependenc |
インストールされているようですね・・。
1 2 | # service httpd start command not found. |
起動に必要な設定がないみたいですね・・。
1 | # yum install httpd24 |
とりあえずサービスとして起動できるようになりました。
別のterminalからapacheにアクセスしてみます。
1 2 3 | # curl localhost curl: (7) Failed to connect to localhost port 80: Connection refused |
ポートが空いてないみたいですね・・・・。
調べること数十分・・
どうやらコンテナを起動するときにポートの割当が必要みたいですね。
1 | # docker run -it -p 80:80 --name myawslinux1 awslinux |
コンテナを起動してるホストのポートとマッピングする場合は80:80といった書き方で割当てます。
別のterminalからapacheにアクセスしてみます。
念のためホスト側に入っているapacheを停止しておきます。
1 2 | # servie httpd stop Stopping httpd: [FAILED] |
1 | # curl localhost |
htmlのレスポンスが返ってくる状態であれば正常です。
ブラウザからIPを指定してアクセスするとapacheのテストページが表示されます。
まとめ!?
部下: とりあえず例の物、できましたけど。
上司: ほぉ、いいんじゃない!?
部下:イメージかDockerfileを作ってしまえば他の環境に即構築できるので開発用途には向いてそうです。gitとかでソースを同期するように組んでおけばリリース環境としても使えそうですよ。
上司: ああ、そうかい。コマンド操作が多くて大変だの-。イメージ作って利用手順書にまとめてみてよ。
部下: はいはい、わかりましたよ。
環境作るまでは、通常のサーバー環境を作る手順と差はないですが、Dockerfileに記述して必要なものをインストールしていくことができるので、コードとして残しておける点が大きなメリットかもしれませんね。
イメージとして残さなくても、dockerのホスト環境があれば同じ環境を即構築できるようになる点がVirtualPCやクラウドなどの仮想環境と扱い方が大きく違うみたいですね。
それでは、また-。