目錄
?一,docker鏡像
?1,查看docker版本
?2,獲取鏡像
2.1查看下載到本地的所有鏡像?
?2.2 獲取鏡像信息
2.3 添加鏡像標(biāo)簽(上傳鏡像到倉(cāng)庫(kù))?
?2.4 鏡像導(dǎo)出
?2.5 鏡像導(dǎo)入
?2.6 ,刪除鏡像
?2.7 上傳鏡像
?編輯?二,docker 容器操作
1,查看容器
2,容器創(chuàng)建----docker create
?3,啟動(dòng)容器
?4,進(jìn)入容器
1,進(jìn)入容器
2,容器導(dǎo)出
?3,容器導(dǎo)入
?4,批量刪除容器/批量刪除鏡像
?5,動(dòng)態(tài)查看運(yùn)行容器資源消耗
6,查看docker的日志信息
?三,總結(jié)
鏡像操作
容器操作
簡(jiǎn)單面試題
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-449082.html
引言
?一,docker鏡像
1,docker client客戶端連接到了服務(wù)器(服務(wù)端是以一個(gè)守護(hù)進(jìn)程的形式跑在操作系統(tǒng)里面的)restfulapi,典型的c/s架構(gòu)
2,有docker服務(wù)端的守護(hù)進(jìn)程從dockerhub,上下載了鏡像(,服務(wù)端會(huì)先檢查本地系統(tǒng)是否有這個(gè)鏡像)
3,服務(wù)端創(chuàng)建了一個(gè)新的容器,然后從拉取的這個(gè)鏡像啟動(dòng)了一個(gè)容器,容器執(zhí)行了腳本、可執(zhí)行程序,讓我們可以查看/使用client
4,docker服務(wù)端把這些信息流返回到客戶端并展示出來(lái)
?1,查看docker版本
?docker version#查看docker版本
docker info
?2,獲取鏡像
docker pull 鏡像名稱。例如
docker pull nginx
2.1查看下載到本地的所有鏡像?
查看鏡像列表
docker images——查看當(dāng)前docker下的下載鏡像信息
REPOSITORY:鏡像屬于的倉(cāng)庫(kù);
TAG:鏡像的標(biāo)簽信息,標(biāo)記同一個(gè)倉(cāng)庫(kù)中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號(hào),唯一標(biāo)識(shí)一個(gè)鏡像;
CREATED:鏡像創(chuàng)建時(shí)間;
VIRTUAL SIZE:鏡像大小
?2.2 獲取鏡像信息
獲取鏡像信息
docker inspect 鏡像ID
2.3 添加鏡像標(biāo)簽(上傳鏡像到倉(cāng)庫(kù))?
docker tag nginx:latest nginx:11.11
?刪除
刪除
docker rmi 鏡像名稱
docker rmi 鏡像標(biāo)簽
?2.4 鏡像導(dǎo)出
docker save -o 文件名+鏡像名
實(shí)例
docker save -o nginx_docker nginx:11.11
?2.5 鏡像導(dǎo)入
docker rmi nginx:11.11
docker images
docker load < nginx_docker
docker images
?
?2.6 ,刪除鏡像
格式:
docker rmi 倉(cāng)庫(kù)名稱:標(biāo)簽 #當(dāng)一個(gè)鏡像有多個(gè)標(biāo)簽時(shí),只是刪除其中指定的標(biāo)簽
或者
docker rmi 鏡像ID號(hào) #會(huì)徹底刪除該鏡像
注意:如果該鏡像已經(jīng)被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。
docker rmi nginx:web
?2.7 上傳鏡像
?
?
docker tag nginx:latest skymarch/nginx:ly #添加新的標(biāo)簽
docker login #登錄公共倉(cāng)庫(kù)
Username:
password:
docker push skymarch/nginx:ly #上傳鏡像
?二,docker 容器操作
1,查看容器
docker ps
查看運(yùn)行的容器
docker ps-a
查看所有容器
##字段說明
CONTALNER ID:容器的id好
image:加載的鏡像
command:運(yùn)行的程序
created:創(chuàng)建時(shí)間
status:當(dāng)前狀態(tài)
ports:端口映射
names:名稱
2,容器創(chuàng)建----docker create
docker create 選項(xiàng) 鏡像
常用選項(xiàng)
-i:讓容器開啟表標(biāo)準(zhǔn)輸入
-t:讓docker分配一個(gè)偽終端
-d:后臺(tái)守護(hù)進(jìn)程方式運(yùn)行
-it:合起來(lái)實(shí)現(xiàn)和容器的交互的作用,運(yùn)行一個(gè)交互式會(huì)話shell
docker create -it tomcat:latest /bin/bash
?
?3,啟動(dòng)容器
#加 -d 選項(xiàng)讓 Docker 容器以守護(hù)形式在后臺(tái)運(yùn)行。并且容器所運(yùn)行的程序不能結(jié)束。
#示例1:
docker run -itd nginx:latest /bin/bash
#示例2:執(zhí)行后退出
docker run centos:7 /usr/local/bash -c ls -lh /
#示例3:執(zhí)行后不退出,以守護(hù)進(jìn)程方式執(zhí)行持續(xù)性任務(wù)
docker run -d centos:7 /usr/local/bash -c "while true;do echo lcdb;done"
實(shí)例1
docker run -itd nginx:latest /bin/bash
?
?實(shí)例2:執(zhí)行后,退出
docker run centos:7 /usr/local/bash -c ls -lh /
?實(shí)例3 :執(zhí)行后不退出,以守護(hù)進(jìn)程方式執(zhí)行持續(xù)性任務(wù)
docker run -d centos:7 /usr/local/bash -c "while true;do echo lcdb;done"?
?
?如果在生產(chǎn)環(huán)境中,這個(gè)容器不能刪除,但是磁盤被這個(gè)容器執(zhí)行的爆滿,導(dǎo)致其它應(yīng)用不能用,那怎么處理?
答:可以在/var/lib/docker/containers中可以查看到容器的運(yùn)行文件,找到死循環(huán)的容器,進(jìn)入到有一個(gè)json.log文件,這個(gè)文件為日志文件,可以使用echo " " >json.log 這個(gè)文件中,可以臨時(shí)解決磁盤壓力的問題。直接刪除解決不了。但是過段時(shí)間,還是會(huì)導(dǎo)致壓力大,那怎么處理?
可以寫一個(gè)腳本,定期crontab -e 執(zhí)行該腳本,相當(dāng)于定時(shí)清空。
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-449082.html
#!/bin/bash
logs=$(find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done
===##或者====
#設(shè)置docker日志文件數(shù)量及每個(gè)日志大小
vim /etc/docker/daemon.json
{
"registry-mirrors":["http://f613ce8f.m.daocloud.io"] //加速器
"log-driver":"json-file", //定義日志格式,
"log-opts":{"max-size":"500M","max-file":"3"} //設(shè)置日志文件最大500M,最多3個(gè),如果3個(gè)都滿了,它會(huì)自動(dòng)刪除一個(gè),然后繼續(xù)裝。
}
systemctl damon-reload && systemctl restart docker
#重新加載一下
停止容器
docker stop
?4,進(jìn)入容器
1,進(jìn)入容器
docker run -it nginx:latest /bin/bash
exec(容器必須為開啟狀態(tài))
docker exec -it 容器id /bin/bash
exec和shell是兩種運(yùn)行方式
?
docker run -it 會(huì)創(chuàng)建前臺(tái)進(jìn)程,但是會(huì)在輸入exit后終止進(jìn)程
docker exec -it 會(huì)連接到容器,可以向ssh一樣進(jìn)入容器,進(jìn)行操作,可以通過exit退出容器,不影響容器運(yùn)行
2,容器導(dǎo)出
docker expore 容器id > 文件名
實(shí)例
docker export 容器id > nginx_a
?3,容器導(dǎo)入
docker import 導(dǎo)出的文件名字 指定鏡像名稱
實(shí)例
docker import tomdce cetnos:liss1
?4,批量刪除容器/批量刪除鏡像
docker rm 【容器id】
#不能刪除運(yùn)行狀態(tài)的容器,如果要?jiǎng)h除,需要加-f強(qiáng)制刪除,或者停止后刪除
docker rm -f 【容器名稱】
#基于容器名稱刪除
docker rm -f `docker ps -q`
#刪除所有運(yùn)行的容器
docker rm -f `docker ps -aq`
#刪除所有的容器
docker ps -a | awk 'NR>=2{print "docker rm "$1}'| bash
#刪除所有容器,不包括運(yùn)行的容器
for i in `docker ps -a |grep -i exit | awk '{print $1}'`;do docker rm -f $i;done
#過濾出關(guān)閉狀態(tài)的容器,并刪除
?docker rm 【容器id】
?docker rm -f 【容器名稱】
docker rm `docker ps -aq`
docker ps -a
?5,動(dòng)態(tài)查看運(yùn)行容器資源消耗
docker stats
6,查看docker的日志信息
docker logs 【容器ID】
#查看指定容器的日志信息
?三,總結(jié)
鏡像操作
docker iamges #查看docker鏡像
docker inspect 【id號(hào)】 #查鏡像的詳細(xì)信息
docker tag nginx:lastest nginx:web #修改docker的標(biāo)簽(見名知意)
#==========刪除鏡像
docker rmi nginx:web #刪除標(biāo)簽為web的nginx鏡像(刪除標(biāo)簽指定的鏡像)
或者
docker rmi 【鏡像id】 #徹底刪除該鏡像
#注意:如果該鏡像一個(gè)唄容器使用,正確做法先刪除該鏡像的所有容器,再刪除鏡像
#=====導(dǎo)入導(dǎo)出鏡像
存儲(chǔ)鏡像----》將鏡像保存為本地文件
docker save -o 【存儲(chǔ)文件名】 【存儲(chǔ)的鏡像】
docker save -o nginx nginx:latest #實(shí)例(保存本地目錄)
導(dǎo)入鏡像----》將本地文件導(dǎo)入到容器
docker load < nginx #存入到容器中
或
docker load -i nginx #也可以存儲(chǔ)到容器中
#=====上傳鏡像====演示上傳阿里云和docker hub
默認(rèn)上傳到docker Hub官方公共倉(cāng)庫(kù),需要注冊(cè)使用公共倉(cāng)庫(kù)的賬號(hào)。https://hub.docker.com可以使用docker login命令來(lái)輸入用戶名、密碼和郵箱來(lái)完成注冊(cè)和登錄。
在上傳鏡像之前,還需要先對(duì)本地鏡像添加新的標(biāo)簽,然后再使用docker push命令進(jìn)行上傳。
docker tag nginx:latest ydq/nginx:web #修改docker標(biāo)簽
docker iamges
docker login #登錄到docker的hub
docker push 【上傳的鏡像】 #上傳鏡像
#=======下載鏡像
docker pull nginx #下載nginx鏡像
容器操作
===#先創(chuàng)建后啟動(dòng)
docker create -it nginx:latest /bin/bash #創(chuàng)建容器
docker ps -a #查看所有容器
docker ps #查看運(yùn)行的容器
docker start 【鏡像id】 #啟動(dòng)一個(gè)鏡像
========#創(chuàng)建并啟動(dòng)
docker run 【鏡像名】 /usr/bin/bash -c ls / #創(chuàng)建一個(gè)容器并啟動(dòng)鏡像(本地沒有將從倉(cāng)庫(kù)下載)(運(yùn)行結(jié)束就退出)
docker run -d 【鏡像名】 /usr/bin/bash -c "while true;do echo hello;done"
#后臺(tái)運(yùn)行(必須要加-d,不然容器無(wú)法啟動(dòng))(會(huì)造成cpu100%)
docker run -itd -name test1(名稱) 【鏡像名】 /bin/bash
#創(chuàng)建容器并持續(xù)運(yùn)行容器(-name:指定名稱 )
======#停止容器
docker stop 【容器id】 #容器id用docker ps -a 查看
=====#容器的進(jìn)入
docker exec -it 【容器id】 /bin/bash #進(jìn)入一個(gè)啟動(dòng)的容器
或
docker run -it centos:7 bash #不加-d選項(xiàng)會(huì)創(chuàng)建容器后直接進(jìn)入容器,但是退出容器,容器也會(huì)停止
=====#本機(jī)文件與容器互傳
docker cp ydq.txt 【容器id】:/opt #將本地文件傳到容器中的/opt目錄下
docker cp 【容器id】:/opt/ydq.txt /home/ydq2.txt #將容器中的文件拷貝到本地
======#容器的導(dǎo)出導(dǎo)入
docker export 【容器id】 > nginx.tar #將容器導(dǎo)出到本地
cat nginx.tar |docker import - nginx:web #將本地導(dǎo)入到容器
======#容器的刪除
docker rm [-f] 【容器id】 #刪除容器(加-f刪除正在運(yùn)行的容器)
docker ps -a |awk 'NR>=2{print "docker stop" $1}'|bash
......
簡(jiǎn)單面試題
#1、如果鏡像優(yōu)化?
有效減少鏡像大小(dockerfile 優(yōu)化方向-》對(duì)于部分企業(yè)而言,是一種升階面試題)
#2、怎么看當(dāng)下有多大號(hào)容器,怎么看當(dāng)下所有容器占用的I/O有多少,占用內(nèi)存多少?
使用docker stats命令查看
#3、容器有哪些狀態(tài)?
Docker容器可以有七種狀態(tài):
已創(chuàng)建(create)
運(yùn)行(up)
已暫停(paused)
重新啟動(dòng)(restarting)
已退出(exited)正常退出為(exited(0)),人工干預(yù)停止會(huì)有(exited(137))
死亡(dead)
遷移(removing)
#4、overlay2由哪幾部分組成 ?
LowerDir
MergedDir
UpperDir
WorkDi
?
?
?
?
到了這里,關(guān)于Docker容器------鏡像,容器基礎(chǔ)命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!