ざっくり自分向けメモ。
Dockerfileを書く→ビルドをするとイメージが出来上がる→イメージを元にコンテナを立ち上げる。
Dockerfile
Dockerfileを作ることでイメージを自作できる。
FROM
にベースとなるイメージ名書く。
RUN
はイメージをビルドするときにコンテナに実行させるコマンドを書く。
'CMD'はコンテナが起動したあとにコンテナに実行させるコマンドを書く。
COPY
やADD
はホストからファイルを取り込むことができる。
もちろんコレだけじゃないけど、僕はコレくらいでもの足りる程度のことしかしてないのでコレだけ。
# DockerHubにあるubuntuイメージを元にする
FROM ubuntu
# コンテナのなかでコマンド実行
RUN apt-get -y update && apt-get install -y python3-pip python3-dev vim
# flaskが使いたいので
RUN pip3 install flask
# ホストにあるpythonのスクリプトを持ってくる
COPY src/ /opt/
# コンテナでFlaskを使ってるPythonのやつを動かす
CMD python3 /opt/app.py
build
$ docker build -t <イメージ名> <Dockerfileのあるパス>
# 作業ディレクトリにあるなら...
$ docker build -t <イメージ名> .
-t
オプションをつけることでイメージに任意の名前をつけることができる。
名前つけないとわかりにくいしつけるべきだと思う。
ビルドして得られたイメージは/var/lib/docker
とかそのへんのシステムのとこに置かれている。
イメージのパスは把握してなくてもよさそう。
作成・取得したイメージはdocker images
コマンドで確認できる。
名前つけないとといい加減に与えられた英数字のIDを使う羽目になってメッチャめんどくさいので名前つけような。
ちなみに
-f
オプションでDockerfileの名前を指定できる。
$ docker build -t <イメージ名> -f <Dockerfileの名前> <Dockerfileのあるパス>
run
さて、イメージも作れたしコンテナ起動すっかぁ〜!
docker run
コマンドでコンテナを作成する。
$ docker run -it --name <コンテナ名> <イメージ名>
-i
オプションはコンテナの入力にホストの入力を繋いでくれる。
-t
オプションはコンテナのターミナルをホストのターミナルに繋いでくれる。
作られたコンテナもイメージと同じようにシステムのディレクトリに保存される。
コンテナは名前がかぶると「名前かぶっとるんやが?」とコンテナを上書きせずにキレる。
同名のコンテナを再度作るときは削除した後にdocker run
をする必要がある。
消したり、一覧見たり
# コンテナの様子をみる(-aオプションで動いていないやつも表示)
$ docker ps -a
# コンテナ削除
$ docker rm <コンテナ名>
オプション系
--rm
docker rm
でわざわざ消すのめんどっちーってときは--rm
オプションをつけることで回避できる。
$ docker run -it --name <コンテナ名> --rm <イメージ名>
-d
フォアグラウンドに来んなや!!って思うときは-d
オプションをつける。(デタッチ)
$ docker run -itd --name <コンテナ名> <イメージ名>
デタッチしたやつにつなぎたいときはコレを唱える。
$ docker exec -i -t <コンテナ名> bash
-p
-p
オプションでホストとコンテナ内のポートを繋げられる。
$ docker run -itd -p <ホストのポート>:<コンテナのポート> --name <コンテナ名> <イメージ名>
コンテナのなかで動かしてるFlask製webページにアクセスする
# コンテナをうごかす
$ docker run -itd -p 30000:80 --name <コンテナ名> --rm <イメージ名>
で、ホストのブラウザとかでlocalhost:30000
にアクセス。
参考にしたサイト
さくらのナレッジ Docker入門
Dockerのイメージファイルの格納場所
ねここくぶろぐ Dockerイメージ、コンテナの場所
Dockerfileを極めて、Dockerマスターになろう!
Dockerコンテナのシェルの中に入る
Docker ドキュメント日本語化プロジェクト