Carpe Diem

備忘録。https://github.com/jun06t

Docker を使ってみる

コンテナー管理ソフトウェアの Docker を使ってみます。 「どっかーって何?」って方はこちらを参考にしてください。 アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 Docker の開発は Ubuntu で進められているので、今回ホストのOSはUbuntuにします。 またデフォルトの12.04以下のカーネルだとLXCのバグが有るみたいなので、カーネルのバージョンをあげるか13.04以降を使いましょう。 今回は Ubuntu14.04 を使用します。 ◆Dockerのインストール 公式のインストール方法はこちらです。 Installation - Ubuntu
$ sudo apt-get install docker.io
docker.ioサービスの自動起動を有効にしておきます。いつの間にかサービスの起動設定も変わってますね。
$ sudo update-rc.d docker.io defaults
これで docker.io コマンドで使えますが、ちょっと冗長なので docker にシンボリックリンクにするのがデフォみたいです。
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
bash_completion を設定して複雑な補完ができるようにします。
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
使用するソケットファイル()の権限の関係で常にsudoが必要になっちゃうので、それが嫌な人は使うユーザを dockerグループに追加しましょう。以下はvagrantユーザの例です。
$ sudo gpasswd -a vagrant docker
グループの編集はログオフ&ログインしないと反映されないのでご注意を。 ◆DockerイメージをDockerHubから持ってくる GitHubのようにDockerのイメージが管理されています。以下のように検索できます。
$ docker search イメージ名
今回はCentOSを使うことにします。
$ docker search centos
一番上に公式のイメージがあるのでそれをローカルに引っ張ってきましょう。
$ docker pull {イメージ名}:{タグ名}
という書式なので
$ docker pull centos:latest
とします。完了するまでしばらく待ちましょう。 ◆コンテナを起動してみる 書式は以下です。
$ docker run [オプション] [--name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]
長すぎですね。一番シンプルな起動をしてみましょう。
$ docker run centos echo "test"

test
これで一瞬だけコンテナが起動します。なぜ一瞬だけかというと、echoが実行されたらもう特にすることがないのですぐに休止状態になるためです。 休止状態になったコンテナは以下のコマンドで表示できます。
$ docker ps -a
-aを外すと実行中のコンテナのみ確認できます。またコンテナ名を指定せずに起動したため、自動で名前(tender_wright)がつけられてます。
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
6b237f9defe4        centos:latest       echo test              48 seconds ago      Exit 0                                   tender_wright  
今度はbashを起動してみましょう。またコンテナにも名前(bash-container)をつけます。
$ docker run -it --name bash-container centos /bin/bash
bash-4.1# 
別ターミナルでコンテナ一覧を見るとちゃんとあります。
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
9974739c12de        centos:latest       /bin/bash              22 seconds ago      Up 21 seconds                            bash-container 
コンテナで起動したbashhttpdでもインストールしてみましょう。
bash-4.1# yum install httpd
これでhttpdが入ったコンテナが作成できました。こんな感じで入れたいものを入れたコンテナを作ります。 ◆コンテナから自作イメージの作成 次にインストールしたコンテナをイメージ化します。bashから抜けます。 イメージを作るコマンドは以下です。
$ docker commit コンテナIDorコンテナ名 ユーザ名/イメージ名
$ docker commit bash-container vagrant/httpd
とでもしておきましょう。 イメージ一覧で確認します。
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
vagrant/httpd       latest              22ae6dde676c        8 seconds ago       205.4 MB
centos              latest              0c752394b855        3 weeks ago         124.1 MB
◆自作イメージを動かしてみる 先ほどのコンテナ起動と同じ要領です。今回はインストールしたhttpdを起動するコマンドを投げましょう。 こういうサービス起動の時はバックグラウンドで起動させます。オプションは -d です。
$ docker run -d -p 80:80 vagrant/httpd /usr/sbin/httpd -D FOREGROUND
-p はホスト側とコンテナのポートをつなげるオプションです。 ブラウザやcurlで動作確認するとCentOSのデフォルトページが表示されます。
$ curl http://localhost
◆その他 不要なコンテナを削除するときは
$ docker rm コンテナIDorコンテナ名
です。今回なら以下です。
$ docker rm bash-container
イメージの削除は
$ docker rmi イメージIDorリポジトリ
です。 最低限の使い方はこんな感じです。 次回はDockerファイルを扱ってみます。 ソース: アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 GitLab環境爆速準備(Ubuntu Server 12.04 LTS + Docker) Docker超入門