- ドキュメント Docker Documentation
- image とは: ファイルシステム。変化しない。
- container とは: 実行中の image。
image の操作
docker pull # image のダウンロード
docker run hello-world # hello-world image から container を生成して実行する
docker image ls # image のリスト
docker image rm # image の削除
docker image history (image) # image の作成履歴
docker image tag bb584af21a3a propella/docker-kujira:latest # image に名前をつける。
docker image push propella/docker-kujira # image をアップロードする。
image の指定方法
書式 IMAGE[:TAG|@DIGEST]
- NAME (REPOSITORY)
- 例:
docker run --rm hello-world
- ローカルに無ければ dockerhub から library/hello-world:latest をダウンロードする。
- なぜか
docker image ls
では REPOSITORY と呼ばれる
- 例:
- TAG
- 例:
docker run --rm hello-world:linux
-
:
の後ろを TAG と呼ぶ。 - ローカルに無ければ dockerhub から library/hello-world:linux をダウンロードする。
-
- 例:
- DIGEST
- DIGEST を使うと image を特定出来る。
- DIGEST は
docker image ls --digests
で表示する。 - 例:
docker run --rm hello-world@sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
- IMAGE ID
- 例:
docker run --rm e38bc07ac18e
- 例:
コンテナの操作
docker container ls # running 中の container を表示
docker container ls -a # 停止している container を含めて表示
docker container rm # container の削除
docker container stop # container 開始
docker container start # container 停止
docker container rm $(docker container ls -a -q) # 全 container を削除
docker container exec # 実行中の container でコマンド実行
例: docker container exec -it db bash
docker run のオプション
-
-i
: STDIN を開く -
-t
: pseudo-TTY を割り当てる- 例:
docker run -it propella/docker-kujira bash
- 例:
-
--rm
: 実行後コンテナ削除 -
-u
: 実行ユーザを指定 -
-e
: 環境変数を指定 -
-w
: 実行ディレクトリを指定 -
-v
: ホスト位置:コンテナ位置 でホストのディレクトリをコンテナから見えるようにする。
docker run -it -v ホストのパス:コンテナのパス (image) bash
Dockerfile
自分で image を作るには Dockerfile という名前のファイルを作る。
FROM alpine
RUN apk --update add git openssh make gcc libc-dev ncurses-dev && \
git clone https://github.com/mtoyoda/sl.git && \
cd sl && \
make
CMD ["./sl/sl"]
カレントディレクトリの Dockerfile から sl という名前の image を作る。
docker build -t sl .
実行。この場合アプリが curses を使っているので -it オプションをつける。
docker run --rm -it sl
Dockerfile に FROM を複数回指定すると image が複数個出来る。最初の image でビルドをして、次の image にコピーするような使い方をする。コピー対象を指定するためには FROM AS 書式を使う。
FROM alpine AS build-environment
...
FROM alpine AS SERVER
COPY --from=build-environment src dst
のような使い方をする
Network 設定
docker network ls # 表示 標準で bridge ネットワークが使われる
docker run -itd --name=networktest ubuntu
docker network inspect bridge # bridge ネットワークの表示
docker network create -d bridge my-bridge-network # ネットワークの作成
docker run -d --net=my-bridge-network --name db training/postgres # postgres image を my-bridge-network に繋げて実行
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db # container の IP アドレスを表示
docker network connect my-bridge-network # web ネットワークに繋げる
Docker registry
あとで