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