この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Docker を試してみる(1) の続きです。
超基本ですが重要な run & exec コマンドの説明です。
■ runコマンド
dockerの中で一番大事なコマンドです。コンテナを起動しコマンドを実行します。
オプションが非常にたくさんありますがリソースの設定が多いので覚えるのは少しだけ。
–name | コンテナの名前を指定する |
-it | 標準入力を開き仮想端末を割り当てる。シェルを使うときに使う |
-d | バックグラウンドでコンテナを実行する。サーバとして使うときなど |
-e | 環境変数を指定する |
-p | ポートフォワーディングする。ホスト->コンテナ |
–rm | 実行が終わったら コンテナを削除する |
-v | ボリュームを割り当てる。ホストのディスクをコンテナで使いたいときに使う |
実行例)
コンテナ上でシェルを実行する
対話型シェルを起動します。# のプロンプトはシェルに接続した状態です。
exitでコンテナと切断し、コンテナは終了します。終了後コンテナは削除されます。
$ docker run -it --rm ubuntu bash
root@92e455bcb613:/#
なお、ubuntuコンテナは、コマンド省略時はbashを起動するようになっているので、
bashをつけなくても結果は同じです。
$ docker run -it --rm ubuntu
root@92e455bcb613:/#
コマンドのみ実行する
プロセスを表示させてみます。psコマンドが実行されコンテナは終了します。終了後コンテナは削除されます。
$ docker run --rm ubuntu ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 25968 1236 ? Rs 09:27 0:00 ps aux
サーバとして実行する
memcachedサーバとして起動します。DockerHubのmemcachedイメージを使います。
次のコマンドでは memcached というコンテナ名でサーバを起動します。
16進数のIDを出力するのみでコマンドは終了します。
$ docker run -d --name memcached memcached
b40a0f915d7ade1b6ad91c7cc9b2257da1013c21ff61821cc1a59d597b9f734b
docker ps コマンドで実行状況を確認すると実行されていることが確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a40a0f915d7a memcached "/entrypoint.sh memca" About a minute ago Up 59 seconds 11211/tcp memcached
コンテナを停止するには stop コマンドを使います。さらにコンテナを削除する場合は rmコマンドを使います。
$ docker stop memcached
$ docker rm memcached
ポートフォワーディングする
ホストのアプリからmemcachedを使いたい、別のホストから接続したいときはポートフォワーディングを行います。
次のコマンドは ホストの11212ポートからコンテナの11211(memcachedのポート)に転送します。
$ docker run -d --name memcached -p 11212:11211 memcached
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec0da0dc6aba memcached "/entrypoint.sh memca" 5 seconds ago Up 4 seconds 0.0.0.0:11212->11211/tcp memcached
上記の出力の、
0.0.0.0:11212->11211/tcp
任意の接続元からホストの11212ポートへのアクセスを許可し、コンテナの11211ポートへの転送を許可します。
ホストから memcached に接続してみます。
$ telnet localhost 11212
set foo 0 60 3
bar
STORED
get foo
VALUE foo 0 3
bar
END
■ execコマンド
runコマンドと同様にコンテナ上でコマンドを実行しますが、
こちらは起動中のコンテナに対してのみ実行可能です。
$ docker exec memcached ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
memcache 1 0.0 0.2 313740 2228 ? Ssl 09:43 0:00 memcached
memcache 14 0.0 0.1 17492 1136 ? Rs+ 09:54 0:00 ps axu