本投稿の目的
・Dockerの操作についての議事録です。学習に使った教材
Udemyの ["米国AI開発者がゼロから教えるDocker講座"](https://www.udemy.com/course/aidocker/) を教材として使用しました。○container作成 (1.作成済みimageを利用する場合)
○dockerへlogin
docker login
・Docker Hubに登録したID,passを入力する
・Login Succeededで成功
○imageを取得
docker pull <image名>
・Docker Hub のhome から u/library でimageリストを見れる
・image list の中から必要なimageを選択
・そのimageの適切なTAG (version)を選択
○Hostに保存済みのimageのlistを取得
docker images
・取得したimageが存在することを確認する
○container作成
docker run <image名>
・作成したいcontainerの素となるimage名を指定してrunを実行
【出力結果例:hello-worldのimageで確認】
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
・上記のメッセージが表示される
・container作成後にプログラムが実行されたためこれが表示される
・(今回の例では,hello-worldのテキスト出力プログラム)
○container一覧の確認
docker ps
・アクティブなcontainerを表示する
・ps は process statusの略
docker ps -a
・全てのcontainerを表示する
・-a は allの略
○Docker run について
・docker run を入力すると次のコードたちが連続してシーケンスで実行される
【runの流れ】
①.create
②.execute
③.exit
【解説】
<①.create>
・runを実行するとcreateが実行される
・containerが作成される
<②.execute>
・createに紐づいてexecuteが実行され・
・デフォルトのプログラムが実行される(今回だとテキスト出力)
<③.exit>
・executeのプログラムが実行されるとexitが実行される
・containerから抜ける
○pullの省略
・imageをpullで取得せずにrunを実行できる (以下の流れで実行) ①Hostにimageがないかを確認 ②Hostには無いためDocker Hubからimage名を探して取得 ③imageをrunする○実際の例
docker run ubuntu
・ubuntuというOS用のimageに対してpullせずにrunを実行
【出力結果】
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete
14428a6d4bcd: Pull complete
2c2d948710f2: Pull complete
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
【解説】
・pullした時にimage layerがcompleteと表示される
・imageは複数のimage layer から構成される
・コンテナ作成すると新たなimage layerが追加される
・新たなimage layerは書き込み可能なため,コンテナで作業後にimageを別名保存するろとここが更新される
○layer構成の旨味
・共通のlayerはcontainer間で共有できる ・差分の新たなlayerのみをスペースとして使用するためスペース削減になる【例:container_Aを編集しimage_Bとして保存。これをrunしconatainer_Bを作成した場合を想定】
・container_A = image_A = layer1 + layer2
・container_B = image_B = container A + 作業 = layer1 + layer2 + layer3 (3が作業部分)
【解説】
・container_Bはlayer3分をスペースに必要とする
・layer1,2はcontainer_Aのスペースで保存済みのためcontainerBで新たにスペースは必要ない