その他
    ホーム 技術発信 DoRuby Docker を試してみる(2)

    Docker を試してみる(2)

    この記事はアピリッツの技術ブログ「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