docker概念
微服務:不再是以完整的物理機為基礎的服務軟件,而是借助于宿主機的性能。以小量的形式,單獨部署的應用。
docker:是一個開源的應用容器引擎,基于go語言開發的,使用時apache2.0的協議。docker是在Linux里面運行的容器化的開源工具。是一種輕量級的虛擬機。
鯨魚是宿主機,集裝箱是一個個獨立的應用。每個應用之間都是相互隔離和獨立的
docker的設計的宗旨
1、封裝
2、發布
3、部署
4、運行
5、銷毀
容器的生命周期————>達到一次封裝,多次運行的目的。
可移植,可擴展,兼容性的目的。隨時對地都可以快速的部署和使用docker的應用。
docker應用的隔離
docker是在Linux上運行,與其他的容器共享主機的內核,包括其他的資源(cpu,內存,硬盤),但是docker應用都是獨立的進行,為什么能做到獨立:
Linux的命名空間namespace可以實現資源的隔離
Linux的cgroup可以實現對docker應用程序的資源限制
namespace是Linux內核的一種特性,允許將一組系統資源進行隔離,是一種命名空間中的進程看起來像在系統中擁有獨立的資源。
namespace的6個命名空間
1、UTS? 隔離主機名和域名:系統調用的參數,在每個應用中,都能看到自己的主機名和域名,與其他進程分隔開。
2、PID? 隔離進程:隔離內容:進程編號,當運行應用之后,每個應用都有自己的獨立的進程編號的空間,每個進程之間不會發生沖突。
3、network? 隔離網絡:每個應用啟動之后,都有自己的獨立的網絡空間,隔離網絡設備、端口和網絡棧。
4、mount? 隔離文件系統:隔離文件系統,每個應用掛載之后都有之間獨立的文件系統掛載點,這些掛載點互補沖突,也不會互相干擾。
5、IPC? 隔離信號量:隔離信號量,消息隊列和共享內存,在IPC隔離當中,每個進程之間都有獨立的通信資源。
6、user? 隔離用戶和用戶組:每個用戶和組都是獨立的命名空間,不同的用戶和組之間都是隔離開的。
docker的核心概念
倉庫:docker的倉庫是用來保存鏡像的地方,也是獲取鏡像和上傳鏡像的目的地。
鏡像:docker鏡像是創建容器的基礎,一個鏡像就類似于一個可執行的、包含源碼的二進制包,包括容器運行的參數、設置、環境變量和配置文件。是一個打包好的可運行程序。
容器:容器是基于鏡像創建的運行的實例
docker基本命令
拉取鏡像-docker pull
查看當前下載到本地的鏡像-docker images
- REPOSITORY:應用的名稱
- TAG:鏡像的標簽,應用的版本
- IMAGE ID:鏡像在本地的唯一標識
- CREATED:發布在鏡像倉庫的時間
- SIZE:鏡像的大小
查看鏡像的詳細信息-docker inspect
查看鏡像的詳細信息-docker inspect 鏡像ID
鏡像下載完保存在/var/lib/docker/
overlay2:鏡像的聯合文件系統,有四層。
- lowerDir:鏡像的底層文件系統,整個鏡像的根文件系統(運行載體)
- upperDir:可寫層,用戶可以自定義的在底層文件系統上進行修改,但是這些修改又不影響根文件系統,容器可以實現讀寫。
- mergedDir:合并目錄,就是用戶看到的容器內的一個視圖
- workDir:工作目錄,進行寫操作時,可以是聯合文件系統overlay2更新和跟蹤對于文件系統的修改。
創建鏡像副本-docker tag
docker tag nginx:1.22 nginx:自定義標簽:相當于給nginx:1.22做了一個副本
鏡像的組成:鏡像名:標簽
刪除鏡像-docker?rmi -f
docker?rmi -f?nginx:1.22/ID:刪除鏡像
導出/導入鏡像-docker save/load
docker save -o /opt/centos.tar centos:7:把本地鏡像導出到指定位置,保存為指定名稱
docker load -i?centos.tar:把鏡像導入到本地docker中
創建容器-docker run -itd
docker run -itd ubuntu:22.04:如何基于鏡像創建容器
- -i:表示容器開啟標準輸入,接受用戶輸入的指令。
- -t:生成一個偽終端tty,用戶可以進入容器的內部。
- -d:容器創建完之后進入后臺運行
- run:如果不存在指定的鏡像,他會自動拉取倉庫指定的鏡像然后再創建容器。拉取+運行
查看運行狀態的容器-docker ps
docker ps -a:查看所有狀態的容器,包括運行和停止以及報錯的容器。
Up:表示容器正在運行中
出現exit的原因:容器啟動之后,都會有一個執行的命令,如果該命令執行完畢之后沒有其他的可執行內容,那么容器會立刻退出進入終止狀態。
進入容器內部-docker? exec? -it??容器id??bash
docker? exec? -it? 容器id/名稱? /bin/bash | bash:進入容器內部操作
創建自定義名稱容器-docker? run? -itd? --name
docker? run? -itd? --name? 自定義名稱? 容器名稱:給容器自定義名稱
容器:基于鏡像的配置和環境,創建一個基于Linux系統的,在這個系統當中安裝了指定應用的小型虛擬機。
宿主機和容器文件傳輸-docker? cp
1、宿主機的文件復制到容器內部:docker? cp? 文件名? 容器名:/路徑
2、容器的文件復制到宿主機:docker? cp??容器名:/文件名? ?宿主機目錄
查看容器的日志-docker? logs? -f
查看容器的標準輸出:查看容器的日志
docker? logs? -f? 容器名稱
端口映射
-P:指定宿主機隨機端口和容器內的端口映射,從32768——65535。
-p:需要人工指定宿主機的端口和容器進行映射,只要指定端口宿主機沒有被占用都可以使用。
創建一個以nginx:1.22鏡像的容器test1,指定宿主機隨機端口和容器內的80端口映射
- 82:宿主機端口,80:容器端口
刪除容器-docker? rm? ?-f
docker? rm? ?-f? 容器名稱:強制刪除容器
- 容器是基于鏡像創建的,但是容器一旦運行,鏡像不再是依賴條件,鏡像可以刪除,不影響部署的容器。
查看容器IP地址
批量刪除容器
1、批量刪除后臺所有已經停止的容器
2、批量刪除所有容器