はじめに

DockerのインタラクティブなチュートリアルDeploying Your First Docker Containerをやった。

Dockerを理解していく過程をメモしていく。

docker imageを検索する

docker search <name>の構文でコマンドでimageを検索するができる

$ docker search redis

dockerhubから探すこともできる。

docker containerを実行する

docker run <option> <image-name>でimageからcontainerを実行できる。

デフォルトではforegroundで実行されるが、-dオプションを付けるとbackground実行できる。

$ docker run -d redis   #最新バージョンを使う
$ docker run -d redis:3.2  #3.2バージョンを使う

実行中のcontainer情報を見る

バックグランドで実行中のコンテナ一覧を取得する。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2df624854d8c        redis               "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        6379/tcp            heuristic_yonath

コンテナの詳細情報取得する

$ docker inspect redis

コンテナの標準出力、エラー出力を取得する

$ docker logs redis

コンテナのポートをHostマシンに見えるようにする

コンテナはデフォルトでは、Hostマシンにポートを開いていない。 -p <host-port>:<container-port>で、ホスト側とコンテナ側のポート番号を指定してコンテナ実行する必要がある。 また、--nameで任意のコンテナ名を付与することもできる。

$ docker run -d --name redisHostPort -p 6379:6379 redis
832d7883e42e2b5fd187d133dd7934afd48b52523aa9a89e3cc69da23751d14f
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
832d7883e42e        redis               "docker-entrypoint.s…"   8 seconds ago       Up 7 seconds        0.0.0.0:6379->6379/tcp   redisHostPort
d9f4bccfe765        redis               "docker-entrypoint.s…"   35 minutes ago      Up 35 minutes       6379/tcp                 silly_newton

0.0.0.0は全てのIPから接続を受け付けることを表している。 ローカルホストIPを指定したい場合は、 -p 127.0.0.1:6379:6379となる。

$ docker run -d --name redisDynamic -p 127.0.0.1:6379:6379 redis

上記はホストマシンのポート番号を固定しているため、複数コンテナを立ち上げるとホスト側のポートが重なってしまう。 ホスト側ポートを動的にするには下記となる。

$ docker run -d --name redisDynamic -p 6379 redis

データの永続化

コンテナ内のデータは、コンテナを再構築すると消えてしまう。 ホスト側のディレクトリをコンテナが覗きにいけるようにして、ホスト側にファイルを保存することで、コンテナ再構築してもデータを永続化することができる。

-v <host-directory>:<container-dirctirt>と指定する。

$ docker run -d --name redisMapped -v /opt/docker/data/redis:/data redis

フォアグラウンドでコンテナを実行

-dを指定しなければ、フォアグランドでコンテナを立ち上げることができ、コマンドを渡すと実行できる。 ` $ docker run ubuntu ps `

-itを指定してbashを起動すると、フォアグランドで実行したコンテナ内のシェルにアクセスできる。

$ docker run -it ubuntu bash

参考リンク

Awesome-dockerに色々なdocker情報が集積されている。