1、說明
Docker是一個開源的引擎砌些,可以輕松的為任何應(yīng)用創(chuàng)建一個輕量級的呜投、可移植的、自給自足的容器存璃,基于go語言開發(fā)仑荐。
Docker本質(zhì)就是宿主機(jī)的一個進(jìn)程麦撵,docker是通過namespace實現(xiàn)資源隔離鸿吆,通過cgroup實現(xiàn)資源限制,通過寫時復(fù)制技術(shù)(copy-on-write)實現(xiàn)了高效的文件操作(類似虛擬機(jī)的磁盤比如分配500g并不是實際占用物理磁盤500g)
1.1 為什么要使用docker?
傳統(tǒng)環(huán)境:
1.環(huán)境不一致。
2.在多用戶的操作系統(tǒng)下篮迎,會相互影響。
3.運維成本過高示姿。
4.安裝軟件成本過高甜橱。Docker學(xué)習(xí)網(wǎng)址
- Docker鏡像國際倉庫
2、Docker配置修改國內(nèi)鏡像
1栈戳、通過配置文件啟動Docker,修改 /etc/docker/daemon.json
文件并添加上 registry-mirrors 鍵值岂傲。沒有daemon.json文件新增文件(安裝方式使用dockerDesktop安裝)
sudo vim /etc/docker/daemon.json
2、添加網(wǎng)易鏡像,(也可以添加阿里巴巴)
{"registry-mirrors": ["http://hub-mirror.c.163.com"]}
3子檀、重啟docker
systemctl restart docker
4镊掖、查看docker版本:docker version
[lond@lsyPro ~ ]$ docker version
Client: Docker Engine - Community
Cloud integration: 1.0.12
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:13:00 2021
OS/Arch: darwin/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:15:47 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker info
查看docker配置信息 會介紹客戶端服務(wù)端信息
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.6.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.5
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 5.10.25-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 6
Total Memory: 1.941GiB
Name: docker-desktop
ID: ICCY:X3BS:MG4T:2I3X:MNNJ:SEZK:VRWU:AXL3:KO4Y:ZA37:R7RL:NWI4
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
3、docker工作機(jī)制
參考:https://blog.csdn.net/wrs120/article/details/83583391
http://blog.itpub.net/29715045/viewspace-2654587/
3.1 docker的組成結(jié)構(gòu)
說明
-Docker client 客戶端/Docker daemon 守護(hù)進(jìn)程
docker是C/S架構(gòu)的程序褂痰,docker客戶端向docker服務(wù)器端也就是docker的守護(hù)進(jìn)程發(fā)送請求亩进,守護(hù)進(jìn)程處理完所有的工作并返回結(jié)果,通過docker客戶端執(zhí)行各種命令缩歪,然后docker客戶端會將這些命令發(fā)送給守護(hù)進(jìn)程归薛,守護(hù)進(jìn)程執(zhí)行的結(jié)果還會傳回客戶端,使我們能通過客戶端來查看命令運行的結(jié)果匪蝙。
- Image(鏡像)
容器基于鏡像啟動和運行主籍,鏡像好比容器的源代碼,保存了用于啟動容器的各種條件逛球,docker的鏡像是一個層疊的只讀文件系統(tǒng)千元。最底端是一個引導(dǎo)文件系統(tǒng),即bootfs颤绕,docker用戶幾乎不會和引導(dǎo)文件系統(tǒng)有交互幸海,當(dāng)一個容器啟動后蜡歹,它將會被移動到內(nèi)存中,而引導(dǎo)文件系統(tǒng)將會被卸載涕烧,docker鏡像的第二層是root文件系統(tǒng)rootfs(ubuntu)月而,位于引導(dǎo)文件之上,root文件系統(tǒng)可以是一種或多種的文件系統(tǒng)议纯,docker中root文件系統(tǒng)只能是只讀狀態(tài)父款,并且docker利用聯(lián)合加載的技術(shù)又會在root文件系統(tǒng)之上加載更多的只讀文件系統(tǒng)。聯(lián)合加載指的是一次加載多個文件系統(tǒng)瞻凤,但在外面看來只能看到一個文件系統(tǒng)憨攒。聯(lián)合加載會將各種文件系統(tǒng)疊加到一起。docker將這樣的文件系統(tǒng)稱之為鏡像阀参。
- Registry(倉庫)
docker用倉庫來保存用戶構(gòu)建的鏡像肝集,倉庫分私有和公有兩種,docker公司提供一個公有的倉庫蛛壳,叫docker hub杏瞻。
- Container(容器)
容器通過鏡像啟動,容器中可以運行客戶的一個或多個進(jìn)程衙荐。當(dāng)一個容器啟動時捞挥,該鏡像會在最頂層加載一個讀寫文件系統(tǒng)(可寫層),在docker中運行的程序忧吟,就是在這個層中進(jìn)行執(zhí)行的砌函,當(dāng)docker第一次啟動容器時,初始的可寫層是空的溜族,當(dāng)文件系統(tǒng)發(fā)生變化時讹俊,這些變化都會應(yīng)用到這一層上。比如煌抒,如果想修改一個文件仍劈,該文件會從最下面的只讀層復(fù)制到讀寫層,該文件的只讀版本依然存在摧玫,但是被讀寫的文件副本所隱藏耳奕,這就是寫時復(fù)制。每一個只讀鏡像層都是只讀的诬像,當(dāng)創(chuàng)建一個新容器時屋群,docker會構(gòu)建一個鏡像棧,在棧的最頂層添加可寫層坏挠。
3.2 docker工作流程
步驟:
1芍躏、docker client端使用docker pull
通過docker服務(wù)器去遠(yuǎn)程中央拉取鏡像到本地鏡像倉庫
2、docker client端使用docker run
從鏡像中運行docker容器(containers)
3降狠、docker client端使用docker build
將本地應(yīng)用構(gòu)建鏡像存放到鏡像倉庫
4对竣、docker 優(yōu)點
- 靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化庇楞。
- 輕量級:容器利用并共享主機(jī)內(nèi)核。
- 可互換:您可以即時部署更新和升級否纬。
- 便攜式:您可以在本地構(gòu)建吕晌,部署到云,并在任何地方運行临燃。
- 可擴(kuò)展:您可以增加并自動分發(fā)容器副本睛驳。
- 可堆疊:您可以垂直和即時堆疊服務(wù)。
5膜廊、docker為什么會比虛擬機(jī)快
- Docker用的是宿主物理機(jī)上的硬件乏沸,不用Hypervisor實現(xiàn)硬件虛擬化,所以CPU,內(nèi)存利用率在效率上有優(yōu)勢
- Docker利用的是宿主機(jī)的內(nèi)核爪瓜,不需要Guest OS蹬跃,因此Docker不需要和虛擬機(jī)一樣要加載操作系統(tǒng)的內(nèi)核,利用的是宿主機(jī)的操作系統(tǒng)铆铆,因此過程非车海快,是秒級的(而新建一個虛擬機(jī)時算灸,虛擬機(jī)上的虛擬軟件需要加載Guent OS扼劈,這個過程時分鐘級別的)