Dockerの使い方(2)

シンプルなWEBアプリを構築してローカルブラウザで確認する。

PORTSに下記が書いてある。
0.0.0.0:32768->5000/tcp
コンテナの5000ポートがdockerホストの32768に割り当てられている

ブラウザで192.168.99.100:32768を見るとHello Worldが表示された。

割り当てるポートを明示する場合

docker portで割り当て確認できる

コンテナのログを見る

Dockerfileからdocker imageを作り、リポジトリに上げる。

不要なコンテナを全部削除する。

停止中コンテナの一括削除

Docker – 基本的な使い方

Windows10でDocker Toolboxを使っています。

Dockerのアップデート

今のバージョンを確認します。

Docker version 1.12.2, build bb80604

まずDocker Toolbox自体をアップデートさせます。ここからWin用をダウンロードして実行したらできると思います。

Docker version 17.03.0-ce, build 60ccb22
なんだこれは全然違う。半年も経ってないのに。

Client/Serverのバージョンのようです。ちょっと前までは、docker -vとやるとサーバのバージョンが出てたけど、今はクライアントのバージョンがでているようです。

Dockerの使い方概要

Docker Hubからdockerイメージを探して、docker pullでイメージをダウンロードして、docker runでコンテナを作成・実行します。

Docker Hub

ここにDocker Hubがあります。沢山イメージがあります。

dockerイメージを落とす

docker pullコマンドでイメージをローカルに落とせます。docker pull rubyとやるとrubyのイメージがダウンロードされます。このrubyは何かというと、ここにあります。ruby:2.4.1というように、[:]の後にタグをつけることもできます。タグは、基本バージョンになります。latestというタグを使うと、最新版をpullできます。

dockerイメージ一覧を確認する

docker imagesコマンドで、ローカルのイメージ一覧が確認できます。

コンテナを作成・実行する

docker runコマンドでコンテナを作ります。コマンドの使い方は下記です。

$ docker run [オプション] [–name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]

コンテナ名rubyのrubyイメージのコンテナを作成する場合下記になります。

-i オプションをつけると、標準入力が開きます。rubyコンテナの標準入力を開いたらirbが起動しました。一度docker runで作成・実行したコンテナは、処理が終わるとすぐに停止しますが、コンテナとしては停止中の状態で存在しています。よって、再度上記docker runコマンドを実行すると下記のようなエラーになります。docker runコマンドはコンテナが存在しない状態で新たに作成する際に使用するコマンドです。

Error response from daemon: Conflict. The name “/ruby” is already in use by container 8504a9a10098ff4a5f3b680adc74ba625a3b39dd6cc332485d96d9cbbdac951f. You have to remove (or rename) that container to be able to reuse that name.

停止中のコンテナを再実行する場合は、docker startコマンドを利用します。使い方は下記になります。コンテナIDは、次のdockerコンテナの一覧を表示させるとCONTAINER IDというのが確認できます。

$ docker start [-i] {コンテナー名}|{コンテナーID}

先程のrubyコンテナの標準入力を開く場合は、下記のようにします。

dockerコンテナの一覧を確認する

docker psコマンドを使います。-a オプションを使うと停止中コンテナも表示されます。

dockerコンテナを削除する

docker rmコマンドを使います。削除対象を指定するには、コンテナ名かコンテナIDを使います。

TensorFlowのDockerのJupyterが動かない

TensorFlowのDockerは下記です。

dockerコンテナを実行したら、Jupyterが動いているのですが、Dockerをローカルブラウザで見る方法がわからないです。コンテナを実行したら下記のようなメッセージがでてきました。

下記に対処方法が書いてありました。dockerのipアドレスを確認して、それでアクセスすればできました。
参考:Unable to start TensorFlow within Docker, on Windows

上記IPでアクセスします。

jupyter

Dockerの使い方 (Windows10)

DockerをWindows10で使えるようにする

参考:無償の「Docker for Windows」で手軽にLinuxコンテナを利用する (1/2)
参考:Windows10マシンにDocker Toolbox を入れて個人用の開発環境を作る

私は、windows10のHomeエディションで、Hyper-vというのが使えないので、Docker Toolboxを使いました。

Docker Toolboxをインストール

DOCKER TOOLBOXからダウンロードします。現状ではバージョンは、1.12.2でした。インストールして、Docker Quickstart Terminalを起動します。すると黒い画面にクジラがでてきました。
docker_install

これでインストール完了っぽい。

Dockerの使い方

基本的な使い方は、Docker Hubからイメージを取得して、それを基にコンテナを作成・実行するらしい。UbuntuでPython3を使えるようにしてみたいと思います。

Ubuntuのイメージをダウンロード

Docker Hubで色々なイメージを探せます。

実行してみる

これでシェルが実行されました。exitで終了します。フォアグラウンドで実行するものは終了した時点でコンテナが消えるそうです。docker runで、コンテナの作成・実行が行われます。-itでフォアグラウンドでの実行を指定できます。イメージの次に何かを書くことで引数として渡せるようです。

バックグランド実行は、run -dです。バックグラウンド実行のコンテナを確認するには、docker psコマンドを実行します。

実行中コンテナをストップするのは、docker stopです。ストップしてもデータが残っているので削除する場合は、docker rmです。ストップ中コンテナの確認は、docker ps -aで確認できます。docker rm -f でストップ&削除することもできます。container idの指定はidの先頭数文字でOKなようです。dockerイメージの削除も、docker rmiでできます。例えば、下記のようにします。

イメージをつくってみる

Dockerイメージを自分で作ってみます。docker buildというコマンドを使うそうです。Dockerfileというファイルに設定を書いて、それをdocker buildするとイメージが作成されるようです。

Dockerfile

Dockerfileを作成したら、docker buildコマンドでイメージを作ります。

とりあえずできました。pythonのバージョンは3.4.3でした。

あと、毎回終了するとまっさらになってしまうので、ローカル環境とマウントさせて、データを保存できるようにしたい。

-v ローカルパス:サーバパスとやるとマウントできる。

pipもインストールする

上記のDockerfileを修正して、pipも使えるようにします。python3-pipをインストールします。

Dockerfile

その他困ったこと

同じ名前でbuildしたら昔のイメージが<none>という名前になって消せなくなった

参考:How to remove unused Docker containers and images

これで一括で消せる。Repositoryとか、Tagとかがになっても、Image IDがあるので、docker rmi {Image ID}とやれば消せた。