Dockerまとめ - funakosi/programming GitHub Wiki
-
全コンテナ停止:
docker stop $(docker ps -q) -
全コンテナ削除:
docker rm $(docker ps -q -a) -
全イメージ削除:
docker rmi $(docker images -q) -
-d デタッチモード。端末と切り離した状態でバックグラウンドで実行する
-
-i インタラクッティブモード。標準入出力及び標準エラー出力をコンテナに連結する
-
-t 擬似端末を割り当て。擬似端末とはカーソルの移動や文字の削除などの文字入力をサポートする端末のこと
| コマンド | コンテナの状態 | シェエル終了時 |
|---|---|---|
| docker run | 停止時 | コンテナ終了 |
| docker exec | 稼働時 | 稼働のまま |
$ docker run hello-world
docker pull: イメージの取得
docker create: コンテナの作成
docker start: コンテナの起動
$ Docker run docker/whalesay cowsay Hello!!
docker images: イメージ一覧
- イメージにタグつけるすコマンド
$ docker tag docker/whalesay my_whalesay
$ docker tag docker/whalesay my_whalesay:ver1
$ docker inspect my_whalesay
$ docker rmi docker/whalesay
$ docker rmi -f docker/whalesay
$ docker pull docker/whalesay
vim Dockerfile
FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune | cowsay
- Dockerfileからイメージをビルド
$ docker build -t docker-whale .
-t: タグ名の指定
. : ビルドコンテキストの指定
$ docker run docker-whale
- nginx コンテナ実行
$ docker run --name <コンテナ名> -d ¥
-p <ホスト側のポート番号>:<コンテナ側のポート番号> ¥
<イメージ名>
-d: デタッチモード
-p:
$ docker run --name test-nginx -d -p 8080:80 nginx
- バインドマウント
$ docker run --name <コンテナ名> -d ¥
-v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション> ¥
-p <ホスト側のポート番号>:<コンテナ側のポート番号> ¥
<イメージ名>
サンプル
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
Mac
-v /Users/<ユーザ名>/docker-tutorial/html:/usr/share/nginx/html:ro
Windows
-v /c/Users/<ユーザ名>/docker-tutorial/html:/usr/share/nginx/html:ro
$ docker run --name first-nginx -v /Users/akira/docker/html:/usr/share/nginx/html:ro -d -p 8080:80 nginx
- COPY, ADD
コンテナから設定ファイルを取り出して、編集して・・
$ docker run --name tmp-nginx --rm -d nginx
--rm: コンテナ停止時にコンテナも削除するオプション
ホストのファイルをコンテナにコピーする
$ docker cp <ホスト上のファイルパス> <コンテナ名 or ID>:<コピー先のパス>
コンテナ内のファイルをホストマシンにコピーする場合
$ docker cp <コンテナ名 or ID>:<ファイルパス> <コピー先のパス>
$ mkdir copy_lecture
$ cd mkdir copy_lecture
$ docker cp tmp-nginx:/etc/nginx/conf.d/default.conf ./
80->8080
$ vim default.conf
イメージを作成
$ vim Dockerfile
FROM nginx:latest COPY defalt.conf /etc/nginx/conf.d/defalt.conf
ビルド
$ docker build -t nginx:ver1 .
コンテナ起動
$ docker run --name web -p 8080:8080 --rm nginx :ver1
-
ADD
tarで固められたファイルを自動で展開したり、コピー元にurlを指定した場合はurlからダウンロードしてコピー先に転送するといった動作になる
-
コンテナのライフサイクル
-
シェルへの接続
docker attach
$ docker attach <コンテナ名 or ID名>
*シェル接続できるのは、コンテナでシェルを実行している場合のみ
*-it 付きで実行:ctrl-p ctrl-q
*exit するとコンテナが停止する
docker exec
$ docker exec -t <コンテナ名 or ID名> /bin/bash
*exitしてもコンテナは停止しない
$ docker run --name connect-test -it -d ubuntu /bin/bash
$ docker attache connect-test
*ctrl-p ctrl-q -> コンテナは停止しない
*exit ->コンテナ停止
- Docker コミット
- docker commit <コンテナ名 or コンテナID> <イメージ名>:<タグ名>
- 変更履歴が残らず使いづらくなる可能性あり。通常はDockerfileを使う
$ docker network ls
$ docker run -itd --name alpine1 alpine /bin/sh
$ docker network inspect bridge
$ docker run -itd --name alpine2 alpine /bin/sh
$ docker network inspect bridge
$ docker attache alpine1
alpine1 # ping -w 3 172.17.0.3 →OK
alpine1 # ping -w 3 alpine2 →NG
$ docker create my_nw
$ docker network ls
$ docker network connect alpine1
$ docker network connect alpine2
$ doker run -itd --name alpine3 --network my_nw alpine
*この状態でならコンテナ名で名前解決できる
$ docer netowrk disconnect bridge alpine2
$ docker inspect alpine2
- Nonu :ループバックインタフェース以外のネットワークインタフェースを持たない
- host : dockerホストと同じネットワーク設定を持つ
- volume
- ホスト上のディレクトリではなく、Docker Engine上で確保した領域をマウントする方法。確保した場所のことをデータボリュームまたは単にボリュームという
- 利点:保存場所がDocker Engineで管理されるので、その物理的な位置を意識する必要がなくなる
- データベースのデータを保存する
- bind
- ホスト上にあらかじめディレクトリを作っておき、それをマウトンする方法
- 利点:ホストの物理的な位置にマウントできるたえ、ホストのファイルをコンテナに見せたい場合は、bindを使用
- 設定ファイルの受け渡し
- 作業ディレクトリの変更を即座にDockerコンテナから参照したい時
- tmpfs
- メモリ上の領域を使用する
