Docker概述
是一種輕量級別的“虛擬機”,與虛擬機相比是不依賴于系統
是Linux容器里運行應用的開源工具
不需要裝系統
沙箱機制
Docker從一開始就以提供標準化的運行時環境為目標,真正做到“build once, run anywhere”,可以將同一個構建版本用于開發、測驗、預發布、生產等任何環境,并且做到了與底層作業系統的解耦,在此基礎上還進一步發展出了CaaS(容器即服務)技術,
Docker是一個用于開發,交付和運行應用程式的開放平臺,Docker使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體,
是一個開源的應用容器引擎,讓開發者可以打包大門的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的Linux或者Windows機器上,也可以實作虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面
沙箱(Sandbox):沙箱是一個虛擬系統程式,沙箱提供的環境相對于每一個運行的程式都是獨立的,而且不會對現有的系統產生影響
Docker的使用場景
打包應用程式簡單部署
可脫離底層硬體任意遷移(實作了應用的隔離,將應用拆分并進行解耦),例如:服務器從騰訊云遷移到阿里云
持續集成和持續交付(CI/CD):開發到測驗發布
部署微服務
提供PAAS產品(平臺即服務){OpenStack的云主機類似于阿里云的ECS,屬于IAAS、Docker(K8S) 屬于PAAS}
Docker的架構
Docker使用客戶端-服務器架構,Docker 客戶端與Docker 守護行程進行對話,該守護行程完成了構建,運行和分發Docker容器的繁重作業,
Docker區別于傳統的虛擬化,不需要虛擬硬體資源,直接使用容器引擎,所以速度快
Docker Client:客戶端
Docker客戶端(docker)是許多Docker用戶與Docker互動的主要方式,當您使用諸如之類的命令時docker run,客戶端會將這些命令發送到dockerd,以執行這些命令,該docker命令使用Docker API,Docker客戶端可以與多個守護程式通信,
Docker daemon:守護行程
Docker守護程式(dockerd)偵聽Docker API請求并管理Docker物件,例如影像,容器,網路和卷,守護程式還可以與其他守護程式通信以管理Docker服務,
Docker images:鏡像
容器可以被打包成鏡像
Docker container:容器
Docker registry:鏡像倉庫
存盤鏡像的地方,默認在公共的Docker Hub上查找,可以搞個人倉庫,
Docker的核心概念
鏡像(image)
Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為是一個面向Docker容器引擎的只讀模式,比如:一個鏡像可以是一個完整的CentOS作業系統環境,稱為一個CentOS鏡像;可以是一個安裝了MySQL的應用程式,稱之為一個MySQL鏡像等等
Docker提供了簡單的機制來創建和更新現有的鏡像,用戶也可以從網上下載已經做好的應用鏡像來直接使用
容器(container)
Docker的容器是從鏡像創建的運行實體,他可以被啟動、停止和洗掉,所創建的每一個容器都是相互隔離、互不看見的,可以保證平臺的安全性,
還可以把容器看作是一個簡易版的Linux環境,Docker利用容器來運行和隔離應用
倉庫(repository)
Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用push命令將它上傳到公共倉庫(public)或者私有倉庫(private),這樣一來當下次要在另一臺機器上使用這個鏡像的時候,只需要從倉庫上pull下來就可以了,
倉庫注冊服務器(registry)是存放倉庫的地方,其中包含了多個倉庫,每個倉庫集中存檔某一類鏡像,并且使用不同的標簽(tag)來區分他們,目前最大的公公倉庫是Docker Hub,其中存放了數量龐大的鏡像供用戶下載使用,
dockerfile 工具 制作鏡像
docker-engine 引擎(實作了docker的跨平臺)
容器不依賴于系統,依賴的是引擎
docker和宿主機共享內核資源
docker和虛擬機的區別
| docker | 虛擬機 | |
|---|---|---|
| 資源 | 少 | 多 |
| 安全 | 共享內核,不安全 | 系統邏輯隔離,安全 |
| 服務 | 一個容器只跑一個服務 | 可以運行多個服務 |
cgroup docker安全 資源分配,資源邏輯隔離
鏡像
容器
倉庫(公有 私有)私有harbor
docker.com 官網
安裝
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum install -y docker-ce
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2020-09-18 01:25:32 CST; 4s ago
Docs: https://docs.docker.com
Main PID: 66860 (dockerd)
CGroup: /system.slice/docker.service
└─66860 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.s...
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.1477...c
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.1477...c
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.1477...c
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.1788..."
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.2789..."
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.3441..."
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.3676...2
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.3681..."
9月 18 01:25:32 localhost.localdomain dockerd[66860]: time="2020-09-18T01:25:32.4011..."
9月 18 01:25:32 localhost.localdomain systemd[1]: Started Docker Application Contain....
Hint: Some lines were ellipsized, use -l to show in full.
vim /etc/selinux/config
SELINUX=disabled
優化
鏡像加速
登錄阿里云



sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [""]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
tee 標準性的輸入
systemctl daemon-reload
systemctl restart docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
網路優化
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@localhost ~]# service network restart
Restarting network (via systemctl): [ 確定 ]
[root@localhost ~]# systemctl restart docker
查看版本
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker images : 列出本地鏡像,
選項:
-a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
--digests :顯示鏡像的摘要資訊;
-f :顯示滿足條件的鏡像;
--format :指定回傳值的模板檔案;
--no-trunc :顯示完整的鏡像資訊;
-q :只顯示鏡像ID,
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos c1b1b6ac3906 21 hours ago 419MB
192.168.20.50:5000/nginx latest 7e4d58f0e5f3 10 days ago 133MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
registry latest 2d4f4b5309b1 3 months ago 26.2MB
查看鏡像串列
名稱 標簽 ID號 創建時間 大小
搜索NGINX鏡像(公有倉庫)
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13745 [OK]
下載NGINX鏡像
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
ebd81fc8c071: Pull complete
655316c160af: Pull complete
d15953c0e0f8: Pull complete
2ee525c5c3cc: Pull complete
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
查看版的詳細資訊
[root@localhost ~]# docker inspect 7e4d58f0e5f3
添加新的標簽
不是修改,重新增加了一個鏡像標簽 相當于別名
[root@localhost ~]# docker tag nginx:latest nginx:web
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 7 days ago 133MB
nginx web 7e4d58f0e5f3 7 days ago 133MB
[root@localhost ~]# docker images | grep nginx
nginx latest 7e4d58f0e5f3 7 days ago 133MB
nginx web 7e4d58f0e5f3 7 days ago 133MB
docker rmi nginx:web //i洗掉鏡像
[root@localhost ~]# docker rmi nginx:web
Untagged: nginx:web
[root@localhost ~]# docker images | grep nginx
nginx latest 7e4d58f0e5f3 7 days ago 133MB
有別名的鏡像,只留下一個才能用rmi+ID號進行洗掉,否則不能洗掉
保存鏡像
[root@localhost ~]# cd /opt/
[root@localhost opt]# docker save -o nginx nginx:latest
[root@localhost opt]# ls -lh nginx
-rw-------. 1 root root 131M 9月 20 08:35 nginx
導回鏡像
[root@localhost opt]# docker load < /opt/nginx
Loaded image: nginx:latest
容器創建
it創建一個運行的終端
[root@localhost opt]# docker create -it nginx:latest /bin/bash
69e0afc39c5bb94131d4034d0fd9e4f5b745625464ba0fd496770b9148fcb4e5
查看容器串列
[root@localhost opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69e0afc39c5b nginx:latest "/docker-entrypoint.…" 46 seconds ago Created happy_lamport
啟動容器
[root@localhost opt]# docker start 69e0afc39c5b
69e0afc39c5b
docker start ID號 //查看狀態為up 提供的埠是TCP80埠,是內部暴露的埠,不是對外埠號,不能通過這個埠對外訪問
Linux服務器上會多一個網卡docker0(B類127段的私有網路地址)
容器彼此之間可以相互通訊
docker0相當于網關,有路由表
啟動執行命令查看系統根目錄
[root@localhost opt]# docker pull paigeeworld/centos7
[root@localhost opt]# docker create -it paigeeworld/centos7 /bin/bash
445a62ffa5d5f2b3ab289b24d60577eb2a00df98df12f92b37f288810c1ec643
[root@localhost opt]# docker start 445a62ffa5d5
445a62ffa5d5
[root@localhost opt]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@localhost opt]# docker run -d paigeeworld/centos7 /usr/bin/bash -c "while true;do echo hello;done"
e47d095ac7647234855d73a1f0b18136434d77f36d629df091500c6819fa18fc
[root@localhost opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e47d095ac764 paigeeworld/centos7 "/usr/bin/bash -c 'w…" 52 seconds ago Up 51 seconds compassionate_wright
Created fervent_mcnulty
445a62ffa5d5 paigeeworld/centos7 "/bin/bash" 40 minutes ago Up 38 minutes xenodochial_franklin
69e0afc39c5b nginx:latest "/docker-entrypoint.…" 46 minutes ago Up 44 minutes 80/tcp happy_lamport
docker run paigeeworld/centos7 /usr/bin/bash -c ls /
直接加載生成容器,有加載,沒有下載
執行完自動停止,把資源釋放掉,一次性的
//執行完成直接關閉 狀態是Exited
//執行在后臺程式完成
docker run -d paigeeworld/centos7 /bin/bash -c “with true;do echo hello;done”
-d 守護行程 支撐 死回圈
容器進入
exit //退出容器
[root@localhost opt]# docker exec -it e47d095ac764 /bin/bash
bash-4.2# ls /
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var
bash-4.2# exit
exit
容器匯出
docker export ID > ngixn_c
容器匯入
cat nginx_c | docker import - nginx
[root@localhost ~]# docker export 69e0afc39c5b > nginx_c
[root@localhost ~]# cat nginx_c | docker import - nginx:web
sha256:99ec3001701292a59b3f4314afd95ca3b46d5229f6b5db27fabb053db4a2b3bd
[root@localhost ~]# docker ps -a | awk '{print "docker rm "$1}' | bash
不可以處于容器運行的時候把鏡像刪了
有容器在不能洗掉鏡像
只要有這個鏡像的容器在,不管它有沒有運行,都不能洗掉這個鏡像
批量洗掉容器
[root@localhost ~]# docker ps -a | awk ‘{print "docker rm "$1}’ | bash
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/113144.html
標籤:其他
