Dockerって最近よく聞いたりするのですが、仮想マシン(KVM、VirtualBox)とどう違うのか、イメージ?コンテナ?と妄想だけでは整理できなかったので実際に使ってみようかと思います。
で、使ってみて何となく整理できてきたので、簡単に言うと(まだ簡単にしか言えませんけどね)Dockerfileに環境構築の手順のようなものを書いて、それを元にdockerでビルドすれば環境が出来上がって、docker runすればその環境が動き出すというわけです。
今回は環境の元となるUbuntuの日本語環境のイメージを練習がてら作っておこうと思います。(ubuntu:14.10のイメージは日本語化されていないので。。)
使い捨てのUbuntuの日本語環境がほんの数分で作れれば何かと便利だと思います。
今回は日本語化しかしていないのですが、WebサーバとWebアプリケーションをインストールした環境を作ったり、勉強のための各種言語の環境を作ったりして「Dockerfile」をアップロードしておいて、それを誰かがダウンロードしてビルドするだけで環境が出来上がってしまうのはとても便利ですね。。
また、今回作ったものは「DockerHub」と「GitHub」にアップロードしておこうと思います。
- Dockerfileを作成
- ubuntu:14.10の日本語化イメージを作成
- 動作確認
- DockerHubへのアップロード
- GitHubからDockerHubへの自動ビルド
- pullして実行してみる
最終的な成果物は下記に格納しました
●DockerHub
https://registry.hub.docker.com/u/brokendish/docker-ubuntu14.10-ja/
●GitHub
https://github.com/brokendish/Docker_ubuntu14.10_ja
●pullする場合
docker pull brokendish/docker-ubuntu14.10-ja
では、はじめてみます。(一気にやってしまうので今回は少し長いです)
●Dockerをインストール
sudo apt-get install docker.io |
●ubuntu14.10を動かしてみる
sudo docker.io run -i -t ubuntu:14.10 /bin/bash |
・ubuntu:14.10のイメージがダウンロードされてbashが起動される。
イメージは最小限の構成になっているので、PythonとかWebサーバは入っていないようです。
これに日本語環境を追加していきます
●Dockerfileからイメージを作成する
このファイルにUbuntuをベースとして、何をインストールして、環境変数は何を設定して、
何のファイルをコピーしてとかを書いていきます。(ここがインフラのコード化という所ですかね)
今回はUbuntuの日本語環境を作るだけです。
・ディレクトリを作成
mkdir -p ~/DockerFile/ubuntu14.10_ja cd ~/DockerFile/ cd ubuntu14.10_ja/ |
・Dockerfileを作成
vi Dockerfile --------------------------------------- #Ubuntu14.10をベースにする FROM ubuntu:14.10 MAINTAINER brokendish.org #インストールするもの RUN apt-get update && apt-get -y upgrade RUN apt-get -y install build-essential RUN apt-get -y install git RUN apt-get -y install python RUN apt-get -y install language-pack-ja-base language-pack-ja ibus-mozc RUN apt-get -y install man RUN apt-get -y install manpages-ja #日本語環境設定 RUN update-locale LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja #環境変数設定 ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ENV LC_CTYPE ja_JP.UTF-8 #その他設定(ファイルをコピー) ADD .alias / #RUN source .alias ←ビルドエラーになってしまうので今回は見送り --------------------------------------- |
・.aliasファイルを作成
vi .alias --------------------------------------- alias ll='ls -l --color=auto' alias ll='ls -laF --color=auto' alias h='history' alias la='ls -A --color=auto' alias l='ls -CF --color=auto' alias cls='clear' --------------------------------------- |
●イメージを作成(ビルドする)
sudo docker build -t 'brokendish/ubuntu:14.10' . |
●イメージ一覧で確認
sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE brokendish/ubuntu 14.10 e671c39db4af 11 seconds ago 877 MB ubuntu 14.10 525b6e4a4cc8 3 days ago 194.4 MB ubuntu 14.04 2103b00b3fdf 3 days ago 188.3 MB |
IMAGE ID:e671c39db4afでubuntu日本語環境が出来上がりました。
●ビルドして出来上がったコンテナを実行する
docker run -t -i e671c39db4af |
●日本語化できているか確認
●PythonもインストールするようにしたのでPythonの簡易Webサーバがちゃんと動くか確認
その前にコンテナのIPアドレスを確認
ifconfig
inetアドレス:172.17.0.50 |
・Pythonの簡易Webサーバ起動
root@0e91dcb06ea0:/# python -m CGIHTTPServer |
・ホスト側のWebブラウザで確認
—– コマンド —–
———————————————–
●コンテナを終了する
root@0e91dcb06ea0:/# exit
●コンテナをexitしないでバックグラウンドで実行する(デタッチ)
root@0e91dcb06ea0:/#
「Ctrl+P Ctrl+Q」
●バックグラウンドで実行(デタッチ)しているコンテナをフォアグラウンドにする(アタッチ)
sudo docker attach ubuntu
●プロセス表示
sudo docker ps -a
●イメージ一覧
sudo docker images
●イメージ削除
docker rmi c3d3fda311df
●いちいちsudoするの面倒くさいのでRootユーザでなくてもdockerを使えるようにする
sudo gpasswd -a hoge docker
●docker.ioって入力するの面倒くさいので「docker」に「docker.io」のシンボリックリンクを張る
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
———————————————–
●タグの付与〜DockerHubへのアップロード
だいたいの確認は出来たのでタグを付与する
まずは、イメージを確認
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE brokendish/ubuntu 14.10 e671c39db4af About an hour ago 877 MB |
イメージIDは「e671c39db4af」
・タグ付けする
docker tag e671c39db4af brokendish/ubuntu:latest |
・イメージを確認
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE brokendish/ubuntu 14.10 e671c39db4af About an hour ago 877 MB brokendish/ubuntu latest e671c39db4af About an hour ago 877 MB |
・コンテナをアップロードする。※DockerHubのユーザ登録は済んでいることとします
docker push brokendish/ubuntu:latest The push refers to a repository [brokendish/ubuntu] (len: 1) Sending image list Pushing repository brokendish/ubuntu (1 tags) 511136ea3c5a: Image already pushed, skipping 08f66fddfdaf: Image already pushed, skipping ec3b33bafe63: Image already pushed, skipping 499e0f86b235: Image already pushed, skipping 525b6e4a4cc8: Image already pushed, skipping b23adbd11312: Image successfully pushed : : e671c39db4af: Image successfully pushed Pushing tag for rev [e671c39db4af] on {https://cdn-registry-1.docker.io/v1/repositories/brokendish/ubuntu/tags/latest} |
●アップロードが済めばDocker Hubにも反映されている
https://registry.hub.docker.com/u/brokendish/ubuntu/
●アップロードしたイメージをダウンロードする場合は
docker pull brokendish/ubuntu |
とするとUbuntu14.10の日本語化のイメージがダウンロードされます
———————————————-
–
●GitHubからDockerHubへの自動ビルド
GitHubにコミットすればDockerHubで自動ビルドするようにしてみます。
上記の「●タグの付与〜DockerHubへのアップロード」だとDockerfileが見れないのでDockerfileでどんな設定をしているのかがわからないので、使っても大丈夫なのか不安な部分があるかと思います。
でも、GitHubとDockerHubを連携すればDockerfileが見れるので少しは安心なのかもしれません。
①GitHubのリポジトリに登録
foo@hoge:~/DockerFile/ubuntu14.10_ja$ cd ~/DockerFile/ubuntu14.10_ja |
・初期設定
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git init Initialized empty Git repository in /home/hoge/DockerFile/ubuntu14.10_ja/.git/ |
・READMEファイルを作成
foo@hoge:~/DockerFile/ubuntu14.10_ja$ vi README |
・ローカルリポジトリに登録
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git add README |
・ローカルリポジトリにコミット
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git commit -m 'first commit' [master (root-commit) 802a8d0] first commit 1 file changed, 2 insertions(+) create mode 100644 README foo@hoge:~/DockerFile/ubuntu14.10_ja$ |
・リモートリポジトリの登録
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git remote add origin git@github.com:brokendish/Docker_ubuntu14.10_ja.git |
・公開リポジトリに反映
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git push -u origin maste |
・ファイルをローカルリポジトリに追加する
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git add .alias Dockerfile foo@hoge:~/DockerFile/ubuntu14.10_ja$ git commit -m 'first commit' [master 0cde4e4] first commit 2 files changed, 34 insertions(+) create mode 100644 .alias create mode 100644 Dockerfile |
・公開リポジトリに反映する
foo@hoge:~/DockerFile/ubuntu14.10_ja$ git push -u origin master Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 798 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) To git@github.com:brokendish/Docker_ubuntu14.10_ja.git 802a8d0..0cde4e4 master -> master Branch master set up to track remote branch master from origin. |
・反映されたか確認
https://github.com/brokendish/Docker_ubuntu14.10_ja
②DockerHubとGitHubのリポジトリ紐付け
③ビルドまち
・pullする
docker pull brokendish/docker-ubuntu14.10-ja Pulling repository brokendish/docker-ubuntu14.10-ja 0b0ddfd34cbe: Download complete : 5eb2c7aa99f7: Download complete |
・イメージを確認
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE brokendish/docker-ubuntu14.10-ja latest 0b0ddfd34cbe 3 hours ago 803.8 MB |
・実行する
docker run -i -t 0b0ddfd34cbe root@2652d8486cd9:/# |