docker入門_image、container相關命令
阿新 • • 發佈:2022-01-10
docker入門_image、container相關命令
映象倉庫服務、映象倉庫、映象相關概念
映象倉庫服務:docker映象倉庫服務、阿里雲映象服務
映象倉庫:docker映象倉庫服務中會有很多倉庫比如 docker官方倉庫、個人倉庫、微軟的映象倉庫
映象:映象就是沒啟動的容器(類似程式設計中的類、類似vmware中的iso檔案) 每個倉庫中可以有很多個映象
image 相關命令
-
搜尋特定映象
docker search apline =============================================== beginner@beginner-virtual-machine:~$ docker search alpine NAME DESCRIPTION STARS OFFICIAL AUTOMATED alpine A minimal Docker image based on Alpine Linux… 8311 [OK] mhart/alpine-node Minimal Node.js built on Alpine Linux 486 anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC 2.28 over A… 478 [OK] frolvlad/alpine-glibc Alpine Docker image with glibc (~12MB) 275 [OK] alpine/git A simple git container running in alpine li… 194 [OK] gliderlabs/alpine Image based on Alpine Linux will help you wi… 185 ============================================ STARTS 星級越高映象一般會越好 OFFICIAL 是否為官方 只顯示官方映象 docker search xxxx --filter "is-official=true" 顯示官方映象並返回50行結果 最多返回100行 docker search xxxx --filter "is-official=true" --limit 50
-
拉取映象
docker pull ubuntu:latest # 從docker映象服務中拉取映象(也可以改成阿里雲等其他國內的) ubuntu(沒有字首說明是官方倉庫):latest(標籤表示最新的 但是不一定是真正最新的) docker image ls # 檢視本地映象 ================================================ beginner@beginner-virtual-machine:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE python3.8_zyh 3.0 21451ed8e840 16 hours ago 812MB python3.8_zyh latest c8ee23b16690 17 hours ago 422MB python3.8_zyh 1.0 a7abd70e6690 25 hours ago 180MB redis 6.2.6 7614ae9453d1 2 weeks ago 113MB python 3.8-slim-buster 5cc8cb0c433a 2 weeks ago 114MB ubuntu latest ba6acccedd29 2 months ago 72.8MB redis latest 7faaec683238 2 months ago 113MB elasticsearch 7.7.0 7ec4f35ab452 20 months ago 757MB mobz/elasticsearch-head 5 b19a5c98e43b 5 years ago 824MB ================================================
-
欄位解釋
- REPOSITORY:TAG 就是unbuntu:latest 之後可以通過這個組合進行容器的啟動
- IMAGE ID 每個映象獨有的id 也可以通過id進行容器的啟動 例如docker run -it ba6 id不用拼完只需要前幾位是獨有的即可
- CREATED 建立時間
- SIZE 映象大小
-
刪除映象
docker image rm 映象id or(映象名:標籤)# 如果報錯可能是因為容器正在使用中 就算容器已停止但是沒刪除 也會無法讓你刪除映象 ================================================ beginner@beginner-virtual-machine:~$ docker image rm ubuntu:latest Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 2480cdd3277d is using its referenced image ba6acccedd29 ================================================ # 所以必須先刪除容器才能刪除映象 docker container stop 2480cdd3277d docker container rm 2480cdd3277d # 接下來就可以刪除映象了
-
映象詳細資訊
docker image inspect ubuntu:latest =============================================== beginner@beginner-virtual-machine:~$ docker image inspect ubuntu:latest [ { "Id": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1", "RepoTags": [ "ubuntu:latest" ], "RepoDigests": [ "ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322" ], "Parent": "", "Comment": "", "Created": "2021-10-16T00:37:47.578710012Z", "Container": "249e88be79ad9986a479c71c15a056946ae26b0c54c1f634f115be6d5f9ba1c8", "ContainerConfig": { "Hostname": "249e88be79ad", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"bash\"]" ], "Image": "sha256:6c18a628d47eacf574eb93da2324293a0e6c845084cca2ea13efaa3cee4d0799", "Volumes": null, "WorkingDir": "", "Entrypoint": null, .......... =============================================== 以上是image的詳細資訊建立時間 執行的容器 還有 image會有多少層數(之後會有一篇隨筆專門講解現在只做瞭解 docker映象是分層的)
容器相關命令
-
執行容器
docker run -it ubuntu:latest # -it是返回一個終端互動視窗 -d是後臺執行 docker run -it id # ctrl+P+Q 同時按可以從容器終端返回主機終端 如果直接exit 容器也會推出 docker run -it -name hello -p 6379:6379 -v 掛載卷 容器id # -name是給容器起一個名字 容器名叫hello -p是對映埠 主機的埠號:docker容器的埠號 # -v是掛載卷 可以方便修改配置檔案以及可持久化儲存 之後再詳細寫出
-
檢視容器
docker ps 與 docker container ls # 效果相同都可以列出正在執行的容器 個人傾向使用後者 docker container ls -a # 列出所有容器包括已暫停的 docker container ls -aq # 列出所有容器的id =============================================== beginner@beginner-virtual-machine:~$ docker container ls -aq 2480cdd3277d beginner@beginner-virtual-machine:~$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2480cdd3277d ubuntu:latest "bash" 2 hours ago Exited (1) 58 minutes ago boring_dirac ===============================================
-
連線容器
docker exec -it 容器id bash # 連線容器時新開一個終端程序 docker exec -it boring_dirac bash # 用容器名稱連線 這裡連不上的因為容器停止了 只是舉個例子 docker attach #attach到一個已經執行的容器的stdin,然後進行命令執行的動作。但是需要注意的是,如果從這個stdin中exit,會導致容器的停止
-
將容器打包成映象
docker commit (容器id or name) test:latest #將當前容器打包成一個叫test 標籤為latest的映象
-
停止容器
docker container stop 容器id or 容器名 #停止容器 docker container start 容器id or 容器名 #啟動容器 當你停止之前給容器建立了一些檔案,你停止之後再次啟動 檔案是不會消失的
-
刪除容器
docker container stop 容器id or 容器名 docker container rm 容器id or 容器名 #注意應該先停止後移除 雖然可以直接rm 但是給docker一些反應時間總歸是好的 下面兩條命令是刪除全部容器 docker container stop $(container ls -aq) docker container rm $(container ls -aq)
-
容器生命週期
容器內有程序容器就不會停止,如果沒有程序容器就會終止 docker run -it ubuntu:latest 此時容器內有一個bash程序 如果exit 容器終止 docker ctrl +q+p 切換回主機終端 容器bash程序在後臺執行 docker exec -it 容器id bash 現在容器內有兩個程序 都是bash 如果當前使用exit 容器不會終止因為還有一個bash程序 如果是docker attach 還是連線原來的那個程序 注意退出的時候要ctrl+p+q 因為只有一個程序 如果直接exit 容器也會停止
-
容器重啟策略
重啟策略包括 always、unless-stopped、on-field三種
doceker container run --restart always sleep 10
-
always
除非明確stop 否則一直存在 當在bash中exit後容器停止 但因為是always 容器馬上後臺重啟 當docker重啟時 即使之前stop過 容器也會啟動
-
unless-stopped
與always最大的區別是當docker重啟時 之前stop過的容器不會啟動
-
on-field
容器異常退出時(返回值不是0) 重啟容器 在docker重啟時容器也會重啟
-