一、Docker基本概念
1.鏡像(Image)
Docker 鏡像 是一個特殊的檔案系統,除了提供容器運行時所需的程式、庫、資源、配置等檔案外,還包含了一些為運行時準備的一些配置引數(如匿名卷、環境變數、用戶等),鏡像 不包含 任何動態資料,其內容在構建之后也不會被改變,
docker的鏡像是由 鏡像名+版本 組成的,如果沒有指定鏡像名沒有指定版本,默認是latest版本最新版本,
2.容器(Container)
鏡像(Image)和容器(Container)的關系,就像是面向物件程式設計中的 類 和 實體 一樣,鏡像是靜態的定義,容器是鏡像運行時的物體,
3.倉庫(Repository)
鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存盤、分發鏡像的服務,Docker Registry 就是這樣的服務,一個 Docker Registry 中可以包含多個 倉庫(Repository);每個倉庫可以包含多個 標簽(Tag);每個標簽對應一個鏡像,
4.卷(volume)
資料卷 是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
資料卷 可以在容器之間共享和重用
對 資料卷 的修改會立馬生效
對 資料卷 的更新,不會影響鏡像
資料卷 默認會一直存在,即使容器被洗掉
5.網路(network)
容器中可以運行一些網路應用,要讓外部也可以訪問這些應用,可以通過 -P 或 -p 引數來指定埠映射,
6.docker-compose
Compose 專案是 Docker 官方的開源專案,負責實作對 Docker 容器集群的快速編排,目前 Docker 官方用 GO 語言 重寫 了 Docker Compose,并將其作為了 docker cli 的子命令,稱為 Compose V2
Compose 中有兩個重要的概念:
服務 (service):一個應用的容器,實際上可以包括若干運行相同鏡像的容器實體,
專案 (project):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 檔案中定義,
二、Docker 常用命令
2.1鏡像命令
下載鏡像
docker pull nginx //下載鏡像
docker pull nginx:v1.4.14
運行鏡像
docker run -it nginx //運行鏡像
docker run -it --rm ubuntu:18.04 bash // 運行鏡像并進入shell 退出后洗掉鏡像
docker run --name webserver -d -p 80:80 nginx // 運行鏡像,--name 給鏡像取一個名字 -d 后臺運行模式 -p 鏡像埠映射
鏡像幫助資訊
docker image --help // 獲取鏡像操作的命令幫助
搜索鏡像
docker search nginx // 搜索nginx鏡像
查看鏡像歷史資訊
docker image history nginx // 查看鏡像歷史
查看鏡像詳細資訊
docker image inspect nginx //查看鏡像詳細資訊
列出鏡像
docker images //列出鏡像
docker image ls //列出鏡像
docker image ls -a //docker image ls 命令串列中只顯示頂層鏡像,-a 引數可以顯示包括中間層在內的所有鏡像
docker image ls nginx //根據倉庫名列出鏡像
docker image ls nginx:v2 //根據某個特定標簽列出鏡像
docker image ls -f since=mongo:3.2 //mongo:3.2 之后建立的鏡像 before 之前
docker image ls -f label=dev //列出標簽是dev的鏡像
docker images -q -f reference='eshop/*:dev' // 根據名稱和標簽匹配并只顯示id
docker image ls --format "{{.ID}}: {{.Repository}}" // 模板語法
查看鏡像、容器、資料卷大小
docker system df //查看鏡像、容器、資料卷所占的空間大小
洗掉鏡像
docker image rm centos:v7 // 按照標簽tag洗掉鏡像,也可以根據image id洗掉
//洗掉鏡像的前提是該鏡像沒有運行成容器;docker image rm 等同docker rmi命令;如果需要強行洗掉已經運行為容器的鏡像,可以使用-f選項來指定;
docker image rm af34 //根據ID洗掉鏡像,一般取前3個字符或以上就可以了
docker image rm $(docker image ls -q nginx) //過濾洗掉命令,洗掉所有倉庫名為 nginx 的鏡像
docker image rm $(docker image ls -q -f before=nginx:v2)
docker image rm $(docker images -q -f reference='eshop/*:dev') //-f
docker image prune //洗掉虛懸鏡像
給鏡像打tag
docker tag centos centos:v6.7 //給鏡像打標簽 tag
2.2容器命令
新建并啟動容器
docker run ... //新建并啟動容器命令
docker run centos:v7 /bin/echo 'Hello World' //輸出一個 'Hello World'之后終止容器
docker run -t -i centos:v7 /bin/bash // 啟動一個bash端,允許用戶進行互動,-t 讓Docker分配一個偽終端(pesudo-tty)并系結到容器的標準輸入上,-i 讓容器的標準輸入保持打開
docker run -d centos:v7 /bin/sh -c "while true;do echo 11;sleep 1; done" //-d 在后臺運行
//提示:可以用 docker logs 查看輸出的結果
查看容器本身的資訊
docker container ls // 查看容器資訊
docker container ls -a
查看容器日志資訊
docker container logs //獲取容器的log輸出資訊
docker container logs [container ID or NAMES]
查看容器層改變
docker diff name
終止和啟動容器
docker container stop // 終止一個運行中的容器
docker container ls -a // 可以查看容器終止的狀態資訊
docker container start //啟動一個已經終止的容器
docker container restart // 將一個運行態的容器終止,然后重新啟動
進入容器 docker attach 或 docker exec
docker run -dit centos
docker container ls
docker attach a12f // a12f 容器ID的前4個字符
docker exec -it 34af bash // -i 這個引數沒有分配偽終端但是保持了標準輸出,-t 分配一個偽終端
exec與attach兩者區別:attach 不會啟動新的行程,用exit退出容器跟著停止,exec啟動新的行程,exit退出容器不會停止,
匯出容器
docker export r1dfdere112122 > centos.tar //r1dfdere112122 容器ID
匯入容器快照
cat centos.tar | docker import - test/centos:v1.0 //本地匯入
docker import URL //通過指定的url匯入
從容器內拷貝檔案到主機上 (注:如果是在容器內,需要exit先切換到宿主機上)
docker cp 容器id:容器內路徑 目的主機路徑 (例如:docker cp 123123:/data/test.txt /data id為123123的容器,將/data/test.txt檔案拷貝到宿主機/data目錄下)
洗掉容器
docker container rm 洗掉一個處于終止狀態的容器
docker container rm centos
//提示:如果要洗掉一個運行中的容器,需要添加引數 -f 引數, 這時,docker 會發送 SIGKILL 信號給容器,
清理所有終止狀態的容器
docker container ls -a // 查看所有已經創建包括終止狀態的容器
docker container prune // 清除所有的容器
2.3 倉庫命令
你可以使用官方 registry 鏡像來運行
docker run -d -p 5000:5000 --restart=always --name registry registry
這將使用官方的 registry 鏡像來啟動私有倉庫,默認情況下,倉庫會被創建在容器的 /var/lib/registry 目錄下,你可以通過 -v 引數來將鏡像檔案存放在本地的指定路徑,例如下面的例子將上傳的鏡像放到本地的 /opt/data/registry 目錄,
docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
2.4 資料卷命令
創建資料卷
docker volume create first-volume
查看所有的資料卷
docker volume ls
查看某一資料卷資訊
docker volume inspect first-volume
掛載資料卷的容器
docker run -d -P \
--name web \
#-v first-volume:/webapp \ // -v 引數掛載
--mount source=first-volumn, target=/webapp \
training/webapp \
python app.py
//創建一個名為web的容器,并掛載資料卷到容器的 /webapp 目錄
查看資料卷資訊
docker inspect web
洗掉資料卷
docker volumn rm first-volumn
資料卷 是被設計用來持久化資料的,它的生命周期獨立于容器,Docker不會在容器被洗掉后自動洗掉資料庫,也不存在垃圾回識訓制處理沒有任何容器參考的資料卷,
如果要在洗掉容器時候洗掉資料就,可以在洗掉容器時候使用 docker rm -v 這個命令
清除資料卷
docker volume prune // 清除無主的資料卷
--mount 可以掛載一個本地主機目錄導容器中去
docker run -d -P \
--name web \
--mount type=bind, source=/src/webapp, target=/opt/webapp \
training/webapp \
python app.py
//上面的命令就是掛在主機的 /src/webapp 目錄到容器的 /opt/webapp 目錄,
2.5網路命令
埠系結 引數:
-P(大寫) :Docker會隨機映射一個 49000-49900 的埠到內部容器開發的網路埠
-p(小寫) : 自定義埠映射
映射隨機埠:
docker run -d -P training/webapp python app.py
docker container ls -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
//本地主機的 49155 被映射到了容器的5000埠,此時訪問本機的49155埠即可訪問容器內web應用提供的界面
查看應用資訊
docker logs -f nostalgic_morse
自定義埠映射
docker run -d -p 5000:5000 training/webapp python app.py
// 默認把本機所有地址的映射到5000埠上
自定義指定地址的埠:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
自定義地址的任意埠
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
指定udp埠
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射埠配置 docker port
docker port nostalgic_morse 5000
系結多個埠 -p
docker run -d \
-p 5000:5000 \
-p 3000:80 \
training/webapp \
python app.py
容器互連
一般使用docker,會使用 --link 來使容器互連,
現在則可以使用 -d 引數來指定docker的網路型別,docker網路型別有 bridge,overlay,
創建新的docker網路
docker network create -d bridge first-net
連接容器
docker run -it --rm --name busybox1 --network first-net busybox sh
// 打開新的終端,在運行一個容器并加入 first-net 網路
docker run -it --rm --name busybox2 --network first-net busybox sh
// 在打開一個終端查看容器資訊
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b47060aca56b busybox "sh" 11 minutes ago Up 11 minutes busybox2
8720575823ec busybox "sh" 16 minutes ago Up 16 minutes busybox1
// 用ping命令證明容器busybox1和容器busybox2建立了互連關系
// 進入 busybox1 容器,然后輸入以下命令
ping buxybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms
三、docker-compose 常用命令
compose V2 新增的命令
將檔案從服務容器復制到本地檔案系統
docker compose cp my-service:~/path/to/myfile ~/local/path/to/copied/file
從本地檔案復制到所有正在運行的容器中
docker compose cp --all ~/local/path/to/source/file my-service:~/path/to/copied/file
docker compose ls --all --format json // 輸出json格式
獲得一個命令的幫助
docker-compose 命令 --help
構建并啟動所有容器,如果鏡像存在就重新構建
docker-compose up -d --build
啟動所有服務
docker-compose up -d
構建啟動nignx容器
docker-compose up -d nginx
-f 指定使用的Compose組態檔啟動,默認為docker-compose.yml,可以多次指定,
docker-compose -f docker-compose.yml up -d
運行一個服務,并在服務上執行一個命令
docker-compose run 容器id或容器名 ip addr
登錄到nginx容器中
docker-compose exec nginx bash
此命令將會停止 up 命令所啟動的容器,并移除網路
docker-compose down
列出專案中運行的所有容器
docker-compose ps
列出專案中運行及未運行的所有容器
docker-compose ps -a
列出所有運行的服務容器
docker-compose ls
列出所有服務容器(包括未運行的容器)
docker-compose ls -a
重新啟動nginx容器
docker-compose restart nginx
構建鏡像
docker-compose build nginx
不帶快取的構建
docker-compose build --no-cache nginx
查看各個服務容器內運行的行程
docker-compose top
查看nginx的實時日志
docker-compose logs -f nginx
列出 Compose 檔案包含的鏡像
docker-compose images
驗證檔案配置,當配置正確時,不輸出任何內容,當檔案配置錯誤,輸出錯誤資訊,
docker-compose config
以json的形式輸出nginx的docker日志
docker-compose events --json nginx
暫停nignx容器
docker-compose pause nginx
恢復ningx容器
docker-compose unpause nginx
洗掉容器(洗掉前必須關閉容器,執行stop)
docker-compose rm nginx
強制洗掉容器(不必先關閉容器)
docker-compose rm -f nginx
停止nignx容器
docker-compose stop nginx
啟動nignx容器
docker-compose start nginx
重啟專案中的nignx容器
docker-compose restart nginx
下載依賴的鏡像
docker-compose pull
推送服務依的鏡像
docker-compose push
設定指定服務運行的容器個數,通過service=num的引數來設定數量
docker-compose scale web=3 db=2
查看版本資訊
docker-compose version
四、其他常用命令
//docker-desktop: 存盤在 %LOCALAPPDATA%\Docker\wsl\distro
//docker-desktop-data: 存盤在 %LOCALAPPDATA%\Docker\wsl\data(占用空間的元兇)
用WSL命令遷移docker-desktop-data到其他位置
wsl --shutdown
關閉所有發行版: wsl --shutdown
匯出 docker-desktop-data 發行版: wsl --export docker-desktop-data D:\wsl\docker\docker-desktop-data\data.tar
注銷 docker-desktop-data 發行版: wsl --unregister docker-desktop-data
匯入 docker-desktop-data 到期望遷移的目錄: wsl --import docker-desktop-data D:\wsl\docker\docker-desktop-data\ D:\wsl\dockerdocker-desktop-data\data.tar
將Windows上已經存在的檔案移植到wsl下Ubuntu的docker container中去
// sudo passwd root 給root用戶設定密碼,su -
cp -r /mnt/d/專案檔案 /home/存放目錄
docker ps --no-trunc //顯示container的ID全稱
docker cp /home/存放目錄 container id:/home
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550920.html
標籤:其他
下一篇:返回列表
