Logicky Blog

Logickyの開発ブログです

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で色々なイメージを探せます。

$ docker pull ubuntu:latest

実行してみる

$ docker run -it ubuntu:latest /bin/bash

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

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

$ docker run -d nginx:latest
$ docker ps

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

$ docker rmi nginx:latest

イメージをつくってみる

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

Dockerfile

FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y python3

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

$ docker build -t test/hoge:latest .
$ docker run -it test/hoge:latest /bin/bash
> python --version

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

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

$ docker run -it -v /c/Users/hoge/docker:/hogehoge test/hoge:latest

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

pipもインストールする

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

Dockerfile

FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y python3 python3-pip

その他困ったこと

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

参考:How to remove unused Docker containers and images

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

$ docker rmi $(docker images | grep "^<none>" | awk '{print $3}')