Dockerまとめ - funakosi/programming GitHub Wiki

Docker

Tips

  • 全コンテナ停止: docker stop $(docker ps -q)

  • 全コンテナ削除: docker rm $(docker ps -q -a)

  • 全イメージ削除: docker rmi $(docker images -q)

  • -d デタッチモード。端末と切り離した状態でバックグラウンドで実行する

  • -i インタラクッティブモード。標準入出力及び標準エラー出力をコンテナに連結する

  • -t 擬似端末を割り当て。擬似端末とはカーソルの移動や文字の削除などの文字入力をサポートする端末のこと

コマンド コンテナの状態 シェエル終了時
docker run 停止時 コンテナ終了
docker exec 稼働時 稼働のまま

4. Docker コンテナ実行

$ 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

Dockerfile

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からダウンロードしてコピー先に転送するといった動作になる

  • コンテナのライフサイクル

    test

  • シェルへの接続

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を使う

7. Dockerネットワーク

$ 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ホストと同じネットワーク設定を持つ

8. Dockerのデータ管理

  • volume
    • ホスト上のディレクトリではなく、Docker Engine上で確保した領域をマウントする方法。確保した場所のことをデータボリュームまたは単にボリュームという
    • 利点:保存場所がDocker Engineで管理されるので、その物理的な位置を意識する必要がなくなる
      • データベースのデータを保存する
  • bind
    • ホスト上にあらかじめディレクトリを作っておき、それをマウトンする方法
    • 利点:ホストの物理的な位置にマウントできるたえ、ホストのファイルをコンテナに見せたい場合は、bindを使用
      • 設定ファイルの受け渡し
      • 作業ディレクトリの変更を即座にDockerコンテナから参照したい時
  • tmpfs
    • メモリ上の領域を使用する
⚠️ **GitHub.com Fallback** ⚠️