Docker容器的基本操作
- 一、Docker 鏡像操作
- 1、搜索鏡像
- 2、獲取鏡像(創建鏡像)
- 3、鏡像加速下載
- 4、查看鏡像資訊
- 5、查看下載的鏡像檔案資訊
- 6、查看下載到本地的所有鏡像
- 7、根據鏡像的唯一標識 ID 號,獲取鏡像詳細資訊
- 8、為本地的鏡像添加新的標簽
- 9、上傳鏡像
- 10、匯出鏡像:將鏡像保存成為本地檔案
- 11、匯入鏡像:將鏡像檔案匯入到鏡像庫中
- 12、洗掉鏡像
- 二、Docker 容器操作
- 1、容器創建:就是將鏡像加載到容器的程序
- 2、運行容器
- 3、退出容器
- 4、進入容器
- 5、查看容器的運行狀態
- ①、查看運行中的容器
- ②、查看所有容器資訊
- ③、只查看容器的運行ID
- ④、查看容器詳細資訊
- ⑤、可查看容器內行程資訊
- ⑥、查看容器的日志資訊
- 6、啟動容器
- 7、創建并啟動容器
- 8、在后臺持續運行 docker run 創建的容器
- 9、終止容器運行
- 10、復制到容器中
- 11、從容器復制檔案到主機
- 12、容器的匯出與匯入
- 13、暴露埠
- 14、鏈接容器
- 15、洗掉容器
- 16、資料卷和資料容器
- 三、Docker 倉庫操作
- 1、搭建本地私有倉庫
一、Docker 鏡像操作
1、搜索鏡像
格式:docker search 關鍵字
docker search nginx

2、獲取鏡像(創建鏡像)
格式:docker pull 鏡像:標簽
#如果下載鏡像時不指定標簽,則默認會下載倉庫中最新版本的鏡像,即選擇標簽為 latest 標簽,
docker pull nginx

3、鏡像加速下載
- 瀏覽器訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取鏡像加速器配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://y33hqxx2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4、查看鏡像資訊
鏡像下載后存放在 /var/lib/docker

5、查看下載的鏡像檔案資訊
cat /var/lib/docker/image/overlay2/repositories.json

6、查看下載到本地的所有鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:鏡像屬于的倉庫;
TAG:鏡像的標簽資訊,標記同一個倉庫中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號,唯一標識一個鏡像;
CREATED:鏡像創建時間;
VIRTUAL SIZE:鏡像大小;
--------------------------------------------------------------------------------------------

7、根據鏡像的唯一標識 ID 號,獲取鏡像詳細資訊
很重要,鏡像排錯的第一步
格式:docker inspect 鏡像ID號
docker inspect 08b152afcfae

8、為本地的鏡像添加新的標簽
格式:docker tag 名稱:[標簽] 新名稱:[新標簽]
docker tag nginx:latest nginx:web
docker images | grep nginx

9、上傳鏡像
默認上傳到 docker Hub 官方公共倉庫,需要注冊使用公共倉庫的賬號,
可以使用 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄,
在上傳鏡像之前,還需要先對本地鏡像添加新的標簽,然后再使用 docker push 命令進行上傳,
docker tag nginx:latest nginx:web #添加新的標簽
docker login #登錄公共倉庫
Username:
password:
docker push wangdahcu/nginx:web #上傳鏡像
先注冊一個docker賬號
docker注冊https://hub.docker.com/choose-plan?ref=signup



10、匯出鏡像:將鏡像保存成為本地檔案
格式:docker save -o /目錄/檔案名 存盤的鏡像:版本
docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下
ls -lh

11、匯入鏡像:將鏡像檔案匯入到鏡像庫中
格式:
docker load < 存出的檔案
或者
docker load -i 存出的檔案
或者
docker load --input nginx
docker load < nginx

12、洗掉鏡像
格式:
docker rmi 倉庫名稱:標簽 #當一個鏡像有多個標簽時,只是洗掉其中指定的標簽
或者
docker rmi 鏡像ID號 #會徹底洗掉該鏡像(加-f強制洗掉)
#洗掉所有鏡像,但該鏡像創建的容器不能處于up狀態
docker rmi `docker images -qa`
注意:如果該鏡像已經被容器使用,正確的做法是先洗掉依賴該鏡像的所有容器,再去洗掉鏡像,
先通過docker-compose down 停止服務;后再次執行洗掉;
docker rmi nginx:web

二、Docker 容器操作
1、容器創建:就是將鏡像加載到容器的程序
- 新創建的容器默認處于停止狀態,不運行任何程式,需要在其中發起一個行程來啟動容器,
格式:docker create [選項] 鏡像
常用選項:
-i:讓容器的輸入保持打開
-t:讓 Docker 分配一個偽終端
docker create -it nginx:latest /bin/bash
2、運行容器
docker run -it nginx:latest /bin/bash
docker run -itd nginx:latest /bin/bash
-i:表示標準輸入
-t:指定一個偽終端(環境)
-d:開啟守護行程(后臺運行)
3、退出容器
#退出并停止容器
exit
#退出但不停止容器
crtl +p +q
4、進入容器
- 需要進入容器進行命令操作時,可以使用 docker exec 命令進入運行著的容器,
格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項表示讓容器的輸入保持打開;
-t 選項表示讓 Docker 分配一個偽終端,
#進入正在運行的容器
docker attach 容器ID
docker ps #獲取正在運行的容器ID
docker start 2592d3fad0fb #進入容器前,確保容器正在運行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在運行
docker ps -a
docker run -it centos:7 bash #不加-d選項會創建容器后直接進入容器,但是退出容器,容器也會停止
5、查看容器的運行狀態
#查看正在運行的容器
docker ps
#查看所有容器
docker ps -a #-a 選項可以顯示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson
容器的ID號 加載的鏡像 運行的程式 創建時間 當前的狀態 埠映射 名稱
#查看所有容器的ID
docker ps -aq
①、查看運行中的容器
docker container ls
CONTAINER ID :運行中容器的唯一號碼(自動生成)
NAMES :容器的名字(默認自動生成,可手工指定,不可重復)
手工指定:在開啟容器時指定 docker container run -it --name="ljm" 9f266d35e02c
IMAGE :鏡像的ID
STATUS :運行狀態 (up為運行中,exited為關閉掉的容器,可使用 docker container ls -a 查看所有狀態)
②、查看所有容器資訊
docker container ls -a
或
docker ps -a
③、只查看容器的運行ID
docker container ls -a -q
或
docker ps -a -q
④、查看容器詳細資訊
docker container inspect 容器名或者運行號碼
⑤、可查看容器內行程資訊
docker container top 容器的ID
⑥、查看容器的日志資訊
docker container logs [-ft] 容器的ID
-f 為持續監控,-t 為更加詳細顯示
6、啟動容器
格式:docker start 容器的ID/名稱
docker start 8b0a7be0ff58
docker ps -a
7、創建并啟動容器
可以直接執行 docker run 命令, 等同于先執行 docker create 命令,再執行 docker start 命令,
注意:容器是一個與其中運行的 shell 命令共存亡的終端,命令運行容器運行, 命令結束容器退出,
- docker容器默認會把容器內部第一個行程,也就是pid=1的程式作為docker容器是否正在運行的依據,如果docker容器中
- pid=1的行程掛了,那么docker容器便會直接退出,也就是說Docker容器中必須有一個前臺行程,否則認為容器已經掛掉,
當利用 docker run 來創建容器時, Docker 在后臺的標準運行程序是:
(1)檢查本地是否存在指定的鏡像,當鏡像不存在時,會從公有倉庫下載;
(2)利用鏡像創建并啟動一個容器;
(3)分配一個檔案系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
(4)從宿主主機配置的網橋介面中橋接一個虛擬機介面到容器中;
(5)分配一個地址池中的 IP 地址給容器;
(6)執行用戶指定的應用程式,執行完畢后容器被終止運行,
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #會發現創建了一個新容器并啟動執行一條 shell 命令,之后就停止了
8、在后臺持續運行 docker run 創建的容器
- 需要在 docker run 命令之后添加 -d 選項讓 Docker 容器以守護形式在后臺運行,并且容器所運行的程式不能結束,
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始終處于 UP,運行狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
docker run -itd --name test1 centos:7 /bin/bash
9、終止容器運行
格式:docker stop 容器的ID/名稱
docker stop 2592d3fad0fb
docker ps -a
10、復制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/
11、從容器復制檔案到主機
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
12、容器的匯出與匯入
- 用戶可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器,在遷移程序中,可以使用docker export 命令將已經創建好的容器匯出為檔案,無論這個容器是處于運行狀態還是停止狀態均可匯出,可將匯出檔案傳輸到其他機器,通過相應的匯入命令實作容器的遷移,
#匯出格式:docker export 容器ID/名稱 > 檔案名
docker export 2592d3fad0fb > centos7tar
#匯入格式:cat 檔案名 | docker import – 鏡像名稱:標簽
cat centos7tar | docker import - centos7:test #匯入后會生成鏡像,但不會創建容器
13、暴露埠
docker run -d -p 500:80 nginx:latest
docker run -d -P 500:80 nginx:latest
#-p(小寫):暴露指定埠
#-P(大寫):暴露隨機埠
#######
docker run -p(小寫)
后面的引數有四種格式,列舉如下:
docker run -p container_port #將容器的某個埠映射到宿主機的所有介面的(介面可以認為是IP地址)一個隨機埠上,
docker run -p host_port:container_port #將容器的某個埠映射到宿主機的所有介面的一個具體埠上,
docker run -p host_ip:host_port:container_port #將容器的某個埠映射到宿主機的一個具體IP地址的具體埠上,
docker run -p host_ip::container_port #將容器的某個埠映射到宿主機的一個具體IP地址的一個隨機埠上,
#可以通過命令docker port 容器名字或者ID查看映射后的埠資訊,能夠看到容器的埠與宿主機的哪一個埠建立了映射關系,
#######
docker run -P(大寫)
不需要額外的引數,其作用是將容器內部暴露所有的埠分別映射到宿主機的所有介面的一個隨機埠上,
14、鏈接容器
--link
例:
docker pull centos:7
docker run -itd -P --name web1 centos:7 /bin/bash
docker run -itd -P --name web2 --link web1 centos:7 /bin/bash
docker ps
docker attach web1鏡像id
yum -y install net-tools
#獲取IP地址
ifconfig
ctrl +p +q
docker ps
docker attach web2鏡像id
ping web1IP地址
15、洗掉容器
格式:docker rm [-f] 容器ID/名稱
docker stop 容器ID
#洗掉已經終止狀態的容器
docker rm 2592d3fad0fb
#強制洗掉正在運行的容器
docker rm -f 2592d3fad0fb
#洗掉非up狀態的所有容器
docker rm $(docker ps -qa)
#強制洗掉所有容器
docker rm -f `docker ps -qa`
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器
docker ps- a | awk 'NR>=2{print $1}' | xargs docker stop
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量洗掉所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量洗掉鏡像
docker images | grep none | awk ' {print $3}' | xargs docker rmi #洗掉none鏡像
16、資料卷和資料容器
- 兩者的區別:
- 資料卷是宿主機和容器之間的共享
- 資料卷容器是容器和容器之間的共享
例如:資料卷
docker run -it -v /root/aaa:/bbb centos:7 /bin/bash
例如:資料卷容器
docker run -it -v /aaa -v /bbb --name wdc centos:7 /bin/bash
docker run -it --volumes-from wdc --name katalina centos:7 /bin/bash
三、Docker 倉庫操作
1、搭建本地私有倉庫
#首先下載registry 鏡像
docker pull registry
#在daemon.json檔案中添加私有鏡像倉庫地址
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.80.10:5000"], #添加,注意用逗號結尾
"registry-mirrors": ["https://6ijb8ube.mirror.aliyuncs.com"]
}
systemctl restart docker.service
#運行registry 容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000: 5000 --restart=always --name registry registry:latest
-------------------------------------------------
-itd: 在容器中打開一個偽終端進行互動操作,并在后臺運行
-v: 把宿主機的/data/registry目錄系結到容器/var/lib/registry目錄(這個目錄是registry容器中存放鏡像檔案的目錄),來實作資料的持久化;
-p:映射埠;訪問宿主機的5000埠就訪問到registry容器的服務了
--restart=always: 這是重啟的策略,在容器退出時總是重啟容器
--name registry: 創建容器命名為registry
registry:latest:這個是剛才pull下來的鏡像
---------------------------------------------------
Docker容器的重啟策略如下:
no:默認策略,在容器退出時不重啟容器
on-failure:在容器非正常退出時(退出狀態非0),才會重啟容器
on-failure:3 :在容器非正常退出時重啟容器,最多重啟3次
always:在容器退出時總是重啟容器
unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護行程啟動時就已經停止了的容器
#為鏡像打標簽
docker tag centos:7 192.168.80.10:5000/centos:v1
#上傳到私有倉庫
docker push 192.168.80.10:5000/centos:v1
#列出私有倉庫的所有鏡像
curl http://192.168.80.10:5000/v2/_catalog
#出私有倉庫的centos 鏡像有哪些tag
curl http://192.168.80.10:5000/v2/centos/tags/list
#先洗掉原有的 centos 的鏡像,再測驗私有倉庫下載
docker rmi -f 8652b9f0cb4c
docker pull 192.168.80.10:5000/centos:v1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291965.html
標籤:其他
