docker 删除包含关键字的镜像_30分钟带你轻松掌握Docker原理
前言
Docker是什么?
Docker是Go語言開發(fā)實(shí)現(xiàn)的容器。2013年發(fā)布至今,備受推崇。相關(guān)文檔、學(xué)習(xí)資料十分詳盡。近期有docker相關(guān)項(xiàng)目,得重新學(xué)習(xí)一下。博客以筆記
為什么要使用 Docker?
- Docker 容器的啟動(dòng)在秒級
- Docker 對系統(tǒng)資源利用率高,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè) Docker 容器。
- Docker 基本不消耗系統(tǒng)資源,使得運(yùn)行在 Docker 里面的應(yīng)用的性能很高。
相比于傳統(tǒng)的虛擬化技術(shù),Docker 有哪些優(yōu)勢?
- 更快速的支付和部署:開發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來構(gòu)建一套開發(fā)容器,開發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來部署代碼。
- 更高效的虛擬化:Docker 容器的運(yùn)行不需要額外的 Hypervisor 支持,它是內(nèi)核級的虛擬化,因此可以實(shí)現(xiàn)更高的性能和效。
- 更輕松的遷移和擴(kuò)展:Docker 容器幾乎可以在任意的平臺(tái)上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。
- 更簡單的管理:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)自動(dòng)化并且高效的管理。
容器誕生背景及優(yōu)勢
(1)軟件開發(fā)和運(yùn)維中,環(huán)境部署、配置,不勝其煩。舉例說明,Python開發(fā)和部署都必須配置Python解釋器;運(yùn)維過程中,有時(shí)測試環(huán)境能通過,但是到線上卻報(bào)錯(cuò),究其原因,是環(huán)境不一致。傳統(tǒng)運(yùn)維過程中,線上有十臺(tái)機(jī)器,每增加一臺(tái)都需要重新部署一次,簡直就是“體力勞動(dòng)”。(2)虛擬機(jī)在一定程度可以解決這些問題,但是存在幾個(gè)缺點(diǎn):- 資源占用多 虛機(jī)啟動(dòng)需要占用幾百M(fèi)的內(nèi)存。- 冗余步驟多 系統(tǒng)級別的操作步驟,往往無法跳過,比如用戶登錄。- 啟動(dòng)慢,往往幾分鐘 啟動(dòng)操作系統(tǒng)需要多久,啟動(dòng)虛擬機(jī)就需要多久。
(3)容器優(yōu)勢容器不是模擬一個(gè)操作系統(tǒng),而是對進(jìn)程進(jìn)行隔離。屬于進(jìn)程級別。- 啟動(dòng)快, 相當(dāng)于啟動(dòng)本機(jī)底層系統(tǒng)的一個(gè)進(jìn)程,而不是虛擬機(jī)內(nèi)部的進(jìn)程,速度快很多。- 占用資源少,容器只占用需要的資源,不占用那些沒有用到的資源;多個(gè)容器可以共享資源,虛擬機(jī)是獨(dú)享資源。- 體積小,容器只要包含用到的組件即可,而虛擬機(jī)是整個(gè)操作系統(tǒng)的打包,所以容器文件比虛擬機(jī)文件要小很多。
傳統(tǒng)虛擬化示意圖:
傳統(tǒng)虛擬化示意圖
docker虛擬化示意圖:
docker虛擬化示意圖
Docker核心概念
docker鏡像(Images):docker鏡像是用于創(chuàng)建docker容器的模板;軟件打包好的鏡像,放在docker倉庫中。鏡像啟動(dòng)后的實(shí)例成為一個(gè)容器。
docker容器(Container):容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用
dokcer客戶端(Client):客戶端通過命令行或者其他工具使用DockerAPI與Docker的守護(hù)進(jìn)程通信。連接docker主機(jī)進(jìn)行操作
docker主機(jī):一個(gè)物理或者虛擬的機(jī)器用于執(zhí)行docker守護(hù)進(jìn)程和容器。即安裝了docker程序的機(jī)器(Docker直接安裝在操作系統(tǒng)之上)
docker倉庫(Registries):docker倉庫用來保存鏡像(保存打包好的軟件鏡像),可以理解為代碼控制中的代碼倉庫。
dockerHub(https://hub.docker.com)提供了龐大的鏡像集合供使用
使用Docker的步驟
1.安裝Docker
2.去docker倉庫 找到對應(yīng)的軟件鏡像
3.使用Docker運(yùn)行這個(gè)鏡像,這個(gè)鏡像就會(huì)生成一個(gè)Docker容器;容器就代表當(dāng)前正在運(yùn)行的應(yīng)用。
4.對容器的啟動(dòng)停止就是對軟件的啟動(dòng)停止
安裝docker
以CentOS為例:
Docker CE 支持 64 位版本 CentOS 7,并且要求內(nèi)核版本不低于 3.10。 CentOS 7 滿足最低內(nèi)核的要求,但由于內(nèi)核版本比較低,部分功能(如 overlay2 存儲(chǔ)層驅(qū)動(dòng))無法使用,并且部分功能可能不太穩(wěn)定。
(1)卸載舊版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine(2)安裝依賴包
yum install?-y yum-utils device-mapper-persistent-data lvm2(3)安裝國內(nèi)源
yum-config-manager?--add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo(4)安裝docker-ce
yum makecache fastyum install docker-ce也可以使用腳本自動(dòng)安裝:
curl?-fsSL get.docker.com?-o get-docker.shsh get-docker.sh?--mirror Aliyun(5)啟動(dòng)docker-ce
systemctl enable dockersystemctl start docker示例:
(6)創(chuàng)建docker用戶組
默認(rèn)情況下,docker 命令會(huì)使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統(tǒng)上不會(huì)直接使用 root 用戶。
因此,更好的做法是將需要使用 docker 的用戶加入 docker 用戶組。
# 建立 docker 組:sudo groupadd docker# 將當(dāng)前用戶加入 docker 組:sudo usermod -aG docker $USER# 退出當(dāng)前終端并重新登錄,進(jìn)行如下測試注意:本次使用的是root用戶。
(7)測試docker是否安裝成功
docker run hello-world如果出現(xiàn)如下信息表明安裝成功了:
Unable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-worldca4f61b1923c: Pull completeDigest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1Status: Downloaded newer image for hello-world:latest 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://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/(8)配置內(nèi)核參數(shù)
默認(rèn)配置下,如果在 CentOS 使用 Docker CE 看到下面的這些警告信息:
WARNING: bridge-nf-call-iptables?is?disabledWARNING: bridge-nf-call-ip6tables?is?disabled添加內(nèi)核配置參數(shù)以啟用這些功能:
tee?-a?/etc/sysctl.conf <重新加載內(nèi)核配置
sysctl?-pDocker鏡像操作常用命令
操作命令說明備注
檢索 docker search 關(guān)鍵字
eg: docker search mysql
我們經(jīng)常去docker hub 上檢索鏡像的詳細(xì)信息 如鏡像的TAG
拉取 docker pull 鏡像名:tag:tag 是可選的,tag表示標(biāo)簽 多為軟件的版本,默認(rèn)是latest
列表 docker images 查看所有本地鏡像
刪除 docker rmi image-id 刪除指定的本地鏡像
上面命令需要在docker服務(wù)啟動(dòng)的情況下執(zhí)行
操作命令詳解
docker search mysql
對上面搜索結(jié)果的說明INDEX鏡像的索引NAME鏡像的名稱DESCRIPTION對鏡像的描述STARS有多少人關(guān)注了此鏡像 單位是k 多少千人OFFICIAL表示鏡像是否官方 OK表示官方的 AUTOMATED 表示是否自動(dòng)配置 OK表示運(yùn)行此鏡像會(huì)自動(dòng)配置
Docker容器操作常用命令
操作命令說明備注
運(yùn)行docker run --name container -name -d image-name
eg: docker run --name mytomcat -d tomcat
--name:自定義容器名
-d:后臺(tái)運(yùn)行
image-name:指定鏡像模板
如果鏡像有標(biāo)簽 則鏡像名稱后面需要加上對應(yīng)的標(biāo)簽
image-name:標(biāo)簽
注:目前這樣的參數(shù)命令啟動(dòng)起來是外部是不能訪問的,還需要添加端口映射
列表docker ps (查看運(yùn)行中的容器)加上 -a 可以查看所有容器(包括停止的容器)
停止docker stop container-name/container-id停止當(dāng)前你運(yùn)行的容器
啟動(dòng)docker start container-name/container-id啟動(dòng)容器
刪除docker rm container-id刪除指定容器(刪除的容器需要為停止?fàn)顟B(tài))注意
rmi 是刪除鏡像的
rm 是刪除容器的
端口映射-p 6378:6379
eg: docker run -d -p 6378:6379 --name myredis docker.io/redis
-p:主機(jī)端口(映射到)容器內(nèi)部的端口
6378為服務(wù)器的端口
6379為容器的端口
真正的運(yùn)行命令
鏡像名稱也可以只寫docker.io后面的名稱
容器日志docker logs container-name/container-id
更多命令https://docs.docker.com/engine/reference/commandline/docker/
注:docker容器啟動(dòng)時(shí)一定要 指定端口映射
如果啟動(dòng)命令如下圖所示,通過IP+端口號 將訪問失敗
注意:此時(shí)使用ip:8080的方式訪問tomcat是訪問不成功的,因?yàn)槟壳癷p:8080訪問的是服務(wù)器的端口,訪問不到容器里面,還差一步端口號的映射
一個(gè)鏡像可以啟動(dòng)多個(gè)容器,且每個(gè)容器都是獨(dú)立的,互不干擾
五、容器生命周期管理命令
1、docker run
docker run :創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS說明:-a stdin: 指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項(xiàng);-d: 后臺(tái)運(yùn)行容器,并返回容器ID;-i: 以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;-p: 端口映射,格式為:主機(jī)(宿主)端口:容器端口-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;--name="nginx-lb": 為容器指定一個(gè)名稱;--dns 8.8.8.8: 指定容器使用的DNS服務(wù)器,默認(rèn)和宿主一致;--dns-search example.com: 指定容器DNS搜索域名,默認(rèn)和宿主一致;-h "mars": 指定容器的hostname;-e username="ritchie": 設(shè)置環(huán)境變量;--env-file=[]: 從指定文件讀入環(huán)境變量;--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運(yùn)行;-m :設(shè)置容器使用內(nèi)存最大值;--net="bridge": 指定容器的網(wǎng)絡(luò)連接類型,支持 bridge/host/none/container: 四種類型;--link=[]: 添加鏈接到另一個(gè)容器;--expose=[]: 開放一個(gè)端口或一組端口;
docker run --name mynginx -d nginx:latest使用docker鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器命名為mynginxdocker run -P -d nginx:latest使用鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器的80端口映射到主機(jī)隨機(jī)端口docker run -p 80:80 -v /data:/data -d nginx:latest使用鏡像 nginx:latest,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的80端口映射到主機(jī)的80端口,主機(jī)的目錄/data映射到容器的/data。docker run -p 127.0.0.1:80:8080/tcp ubuntu bash綁定容器的8080端口,并將其映射到本地主機(jī)127.0.0.1的80端口上。docker run -it nginx:latest /bin/bash使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令。
2、docker start
docker start :啟動(dòng)一個(gè)或多少已經(jīng)被停止的容器docker start [OPTIONS] CONTAINER [CONTAINER...]docker start myapp啟動(dòng)已被停止的容器myapp
3、docker stop
docker stop :停止一個(gè)運(yùn)行中的容器docker stop [OPTIONS] CONTAINER [CONTAINER...]docker stop myapp停止運(yùn)行中的容器myapp
4、docker restart
docker restart :重啟容器docker restart [OPTIONS] CONTAINER [CONTAINER...]docker restart myapp重啟容器myapp
5、docker kill
docker kill :殺掉一個(gè)運(yùn)行中的容器。docker kill [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明:-s :向容器發(fā)送一個(gè)信號
docker kill -s KILL mynginx殺掉運(yùn)行中的容器mynginx
6、docker rm
docker rm :刪除一個(gè)或多個(gè)容器docker rm [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明:-f :通過SIGKILL信號強(qiáng)制刪除一個(gè)運(yùn)行中的容器-l :移除容器間的網(wǎng)絡(luò)連接,而非容器本身-v :-v 刪除與容器關(guān)聯(lián)的卷
docker rm -f db01 db02強(qiáng)制刪除容器db01、db02docker rm -l db移除容器nginx01對容器db01的連接,連接名dbdocker rm -v nginx01刪除容器nginx01,并刪除容器掛載的數(shù)據(jù)卷
7、docker pause
docker pause :暫停容器中所有的進(jìn)程。docker pause [OPTIONS] CONTAINER [CONTAINER...]docker pause db01暫停數(shù)據(jù)庫容器db01提供服務(wù)。
8、docker unpause
docker unpause :恢復(fù)容器中所有的進(jìn)程docker unpause [OPTIONS] CONTAINER [CONTAINER...]docker unpause db01恢復(fù)數(shù)據(jù)庫容器db01提供服務(wù)。
9、docker create
docker create :創(chuàng)建一個(gè)新的容器但不啟動(dòng)它docker create [OPTIONS] IMAGE [COMMAND] [ARG...]docker create --name myapp nginx:latest使用docker鏡像nginx:latest創(chuàng)建一個(gè)容器,并將容器命名為myapp
10、docker exec
docker exec :在運(yùn)行的容器中執(zhí)行命令docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS說明:-d :分離模式: 在后臺(tái)運(yùn)行-i :即使沒有附加也保持STDIN 打開-t :分配一個(gè)偽終端
docker exec -it mynginx /bin/sh /root/runoob.sh在容器mynginx中以交互模式執(zhí)行容器內(nèi)/root/runoob.sh腳本docker exec -it mynginx /bin/bash在容器mynginx中開啟一個(gè)交互模式的終端
Docker Hub服務(wù)相關(guān)命令
1、docker login
docker login : 登陸到一個(gè)Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認(rèn)為官方倉庫Docker Hub。docker logout : 登出一個(gè)Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認(rèn)為官方倉庫 Docker Hub。
docker login [OPTIONS] [SERVER]docker logout [OPTIONS] [SERVER]OPTIONS說明:-u :登陸的用戶名-p :登陸的密碼登陸到Docker Hubdocker login -u 用戶名 -p 密碼
2、docker logout
登出Docker Hubdocker logout
3、docker pull
docker pull : 從鏡像倉庫中拉取或者更新指定鏡像docker pull [OPTIONS] NAME[:TAG|@DIGEST]OPTIONS說明:-a :拉取所有 tagged 鏡像--disable-content-trust :忽略鏡像的校驗(yàn),默認(rèn)開啟從Docker Hub下載java最新版鏡像。docker pull java從Docker Hub下載REPOSITORY為java的所有鏡像。docker pull -a java
4、docker push
docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫docker push [OPTIONS] NAME[:TAG]OPTIONS說明:--disable-content-trust :忽略鏡像的校驗(yàn),默認(rèn)開啟
上傳本地鏡像myapache:v1到鏡像倉庫中。docker push myapache:v1
5、docker search
docker search : 從Docker Hub查找鏡像docker search [OPTIONS] TERMOPTIONS說明:--automated :只列出 automated build類型的鏡像;--no-trunc :顯示完整的鏡像描述;-s :列出收藏?cái)?shù)不小于指定值的鏡像。
從Docker Hub查找所有鏡像名包含java,并且收藏?cái)?shù)大于10的鏡像docker search -s 10 java
容器rootfs操作命令
1、docker commit
docker commit :從容器創(chuàng)建一個(gè)新的鏡像。docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS說明:-a :提交的鏡像作者;-c :使用Dockerfile指令來創(chuàng)建鏡像;-m :提交時(shí)的說明文字;-p :在commit時(shí),將容器暫停。將容器a404c6c174a2 保存為新的鏡像,并添加提交人信息和說明信息。docker commit -a "scorpio.com" -m "my apache" a404c6c174a2 mymysql:v1
2、docker cp
docker cp :用于容器與主機(jī)之間的數(shù)據(jù)拷貝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATHOPTIONS說明:-L :保持源目標(biāo)中的鏈接
將主機(jī)/www/docker目錄拷貝到容器96f7f14e99ab的/www目錄下。docker cp /www/docker 96f7f14e99ab:/www/將主機(jī)/www/docker目錄拷貝到容器96f7f14e99ab中,目錄重命名為www。docker cp /www/docker 96f7f14e99ab:/www將容器96f7f14e99ab的/www目錄拷貝到主機(jī)的/tmp目錄中。docker cp 96f7f14e99ab:/www /tmp/
3、docker diff
docker diff : 檢查容器里文件結(jié)構(gòu)的更改docker diff [OPTIONS] CONTAINER查看容器mymysql的文件結(jié)構(gòu)更改。docker diff mymysql
總結(jié)
本文介紹了Docker是什么、Docker思想、Docker核心概念、Docker安裝等內(nèi)容,看完本文,Docker算是入門了,但是萬里長征只走完了第一步,學(xué)無止境,共勉。
總結(jié)
以上是生活随笔為你收集整理的docker 删除包含关键字的镜像_30分钟带你轻松掌握Docker原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python段子_Python爬取内涵段
- 下一篇: mysql having in_MySQ