RedisがインストールされたDockerイメージの作成
はじめに
本記事では、Installing Redis on Docker - John Costa's Blogの記事をもとに、RedisがインストールされたDockerイメージの作成手順を説明します。本記事は、Dockerがインストール済であることを前提としています。DockerがプリインストールされたVagrant boxは、以下のリンクより取得頂けます。(Vagrant boxファイルへの直接リンクです。私がPackerにて作成したものになります。)本記事にて記載しているコマンドは、現時点でのDockerの最新安定版である0.7.6にて動作確認を行っております。
https://s3-ap-northeast-1.amazonaws.com/yosssi/vagrant-boxes/ubuntu-13.10-server-amd64-docker.box
手順
Dockerの公式イメージであるubuntuイメージを使ってコンテナを新規に立ち上げます。
$ docker run -i -t ubuntu /bin/bash root@aaadab642e4c:/#
runコマンドは、引数で指定されたイメージ(今回の場合はubuntu)上にコンテナを新規に作成し、そのコンテナ上で引数で指定されたコマンド(今回の場合は/bin/bash)を実行します。-iオプションを指定することで標準入力からの入力を可能にします。-tオプションを指定することで疑似端末(pseudo-tty)が割り当てられます。
パッケージリストを最新化し、redis-serverをインストールします。
root@aaadab642e4c:/# apt-get update root@aaadab642e4c:/# apt-get install -y redis-server
redis-serverがインストールされていることを確認します。
root@aaadab642e4c:/# which redis-server /usr/bin/redis-server
コンテナのシェルから退出します。
root@aaadab642e4c:/# exit exit $
コンテナの一覧を出力し、先ほど作成したコンテナのIDを確認します。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aaadab642e4c ubuntu:12.04 /bin/bash 28 minutes ago Exit 0 pensive_torvalds
psコマンドは、コンテナの一覧を表示します。-aオプションを指定することで、現在実行されていないコンテナを含めた全てのコンテナが表示されます。このオプションが指定されていない場合は、現在実行中のコンテナのみが表示されます。
今回の場合、コンテナIDはaaadab642e4cとなります。
Dockerレジストリサーバへログインします。アカウントをお持ちでない場合は、ご希望のEメール、パスワード、ユーザ名を指定することで、アカウントが作成されます。
$ docker login -e あなたのEメール -p あなたのパスワード -u あなたのユーザ名 Login Succeeded
今回作成したコンテナのイメージを作成します。
$ docker commit aaadab642e4c あなたのユーザ名/redis 4b4b6b00568083fe438374c9078a3da75fbd0657b1ec8da572068803fbe1b8ac
commitコマンドは、引数のコンテナID(今回の場合はaaadab642e4c)に合致するコンテナからイメージを作成します。引数「あなたのユーザ名/redis」は、作成されるイメージのリポジトリとタグを表します。リポジトリにはあなたのユーザ名を指定します。
イメージが作成されたことを確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE yosssi/redis latest 4b4b6b005680 5 seconds ago 205.8 MB ubuntu 12.10 426130da57f7 5 days ago 127.6 MB ubuntu quantal 426130da57f7 5 days ago 127.6 MB ubuntu 10.04 8589d4e9c7c6 5 days ago 139.6 MB ubuntu lucid 8589d4e9c7c6 5 days ago 139.6 MB ubuntu 12.04 72e10143e54a 5 days ago 125.9 MB ubuntu latest 72e10143e54a 5 days ago 125.9 MB ubuntu precise 72e10143e54a 5 days ago 125.9 MB ubuntu 13.10 721f07d19f96 5 days ago 144.6 MB ubuntu saucy 721f07d19f96 5 days ago 144.6 MB ubuntu raring 476aa49de636 5 days ago 133.6 MB ubuntu 13.04 476aa49de636 5 days ago 133.6 MB
imagesコマンドはイメージの一覧を出力します。
作成したイメージをDockerレジストリサーバへアップロードします。
$ docker push あなたのユーザ名/redis
pushコマンドはイメージ・リポジトリをレジストリへアップロードします。
本コマンドの実行後、Docker indexにて、アップロードしたイメージが存在することを確認することができます。
作成したイメージのコンテナを実行し、Redisサーバを起動します。
$ docker run -p 6379 -d あなたのユーザ名/redis /usr/bin/redis-server
runコマンドで-pオプションを指定することで、ネットワークポートをコンテナに設定することができます。また、-dオプションを指定することで、コマンドをバックグラウンドで実行することができます。
実行中のコンテナのステータスを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79a9719d914f yosssi/redis:latest /usr/bin/redis-serve 3 minutes ago Up 3 minutes 0.0.0.0:49158->6379/tcp backstabbing_poincare
PORTSの項を見ると、コンテナ内のポート番号6379が、外部のポート番号(今回の例では49158)に紐付けられていることが分かります。コンテナ外からは、この外部ポート番号を指定することで、コンテナのポート番号6379のプロセスへアクセスすることができます。
telnetを使ってコンテナの外からコンテナ内のRedisサーバへアクセスしてみます。
$ telnet 0.0.0.0 49158 Trying 0.0.0.0... Connected to 0.0.0.0. Escape character is '^]'. monitor +OK +1391159705.184861 "monitor" set docker awesome +OK +1391159714.071889 "set" "docker" "awesome" get docker $7 awesome +1391159720.705523 "get" "docker" quit +OK Connection closed by foreign host. $
最後に
今回の例では、公式イメージubuntuをベースにコンテナを立ち上げ、RedisをインストールしてDockerイメージを新規に作成しました。その後、作成したイメージをリポジトリへアップロードする作業を実施しました。最後に、作成したDockerイメージよりコンテナを立ち上げ、そのコンテナ上でRedisサーバをバックグラウンドで起動し、コンテナ外からRedisサーバへアクセスする方法を確認しました。