日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker基础(一)

發布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker基础(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、Docker

1.簡介

2.Docker與虛擬機的區別

3.Docker底層原理

①名稱空間(namespaces)

②系統資源管理(cgroups)

4.Docker的優勢

5.Docker的使用場景

6.Docker三要素

7.Docker引擎

二、Docker的架構

1.Docker使用的是客戶端-服務端的架構

2.Docker 三大組件

三、控制組

四、部署20版Docker

1.安裝Docker

①環境配置

②安裝依賴包

③安裝docker-ce社區版

④開啟docker

2.設置鏡像加速

3.網絡優化

4.docker-server端配置文件

5.查看

①查看docker版本

②顯示docker的系統信息,內核、鏡像數、容器數等

③查看容器資源

五、Docker鏡像操作

1.運行鏡像

2.搜索鏡像-search

3.下載鏡像-pull

4.查看鏡像/容器

5.查看當前docker下的鏡像詳細信息

6.添加鏡像標簽

7.刪除鏡像

8.鏡像導出

六、Docker相關操作

1.查詢容器

2.刪除容器

3.啟動運行容器

①創建容器

②啟動容器

③啟動一次性容器

④持續后臺運行

4.停止容器

5.進入、退出容器

①使用run

②使用exec(容器必須為開啟狀態)

③退出容器

6.容器導入導出

①導出

②導入

七、Docker網絡模式

1.Host模式

2.Container模式

3.None模式

4.Bridge模式

5.Docker自定義網絡

①查看網絡列表

②查看容器IP

③自定義網絡固定IP

④網絡模式內加入指定的IP地址

6.暴露端口

①指定端口

②隨機端口

八、Docker數據卷

1.容器文件復制

2.添加Linux系統命令到容器里

3.免交互在容器進行操作

4.數據卷

5.數據卷容器

①數據卷

②新容器掛載web1

③測試

6.容器互聯(使用centos鏡像)


一、Docker

1.簡介

Docker相當于虛擬機Vmware Workstation,只不過虛擬機Vmware Workstation工作在Windows下,而Docker工作在Linux下。

Docker相當于一個瓶子,里面裝著飲料,服務就相當于飲料,Docker就是裝著不同的飲料,把飲料相互分開不會串味,就是說docker把多個服務互相隔離開來,互不影響。

Docker是基于容器技術的輕量級虛擬化的解決方案。相當于把Linux的資源管理模塊(cgroup)、名稱空間(namespaces)等容器底層技術進行完美封裝、并抽象的為用戶提供創建和管理的便捷界面(C/S)

Docker是一個用于開發,交付和運行應用程序的開放平臺。Docker使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。

是一個開源的應用容器引擎,讓開發者可以打包方式封裝應用以及依賴包到一個可移植的銳像中,然后發布到任何流行的Linux或者windows機器上,也可以實現虛擬化。容器是完全使用沙箱機制(隔離機制),相互之間不會有任何接口

2.Docker與虛擬機的區別

虛擬機是在操作系統上進行隔離,而docker是在應用上進行隔離

不同點????????????????? container??????????????????????????? ?????? ?????? VM

啟動速度????????????? 秒級(進程控制)????????????? ????????????? 分鐘級(來賓操作系統管理)

運行性能????????????? 接近原生(直接在內核中運行90%) 50%左右損失

磁盤占用????????????? MB?????????????????????????????????????????????????? GB(操作系統鏡像2G)

數量???????????????????? 成百上千(進程)??????????????????????????? 一般幾十臺(操作系統級別)

隔離性????????????????? 進程級別????????????????????????????????????????? 系統級別(更徹底)

操作系統????????????? 主要支持Linux(只需要支持引擎)? 幾乎所有(吃宿主機操作系統的支持)

封裝程度????????????? 只打包項目代碼和依賴關系,共

享宿主機內核?????? ???????????????????? ?????? 完整的操作系統,與宿主機隔離

3.Docker底層原理

①名稱空間(namespaces)

隔離了6個名稱空間

mount?????????? 文件系統、掛載點(一個文件系統內不能重復掛載一個指定目錄)

user?????????????? 操作進程的用戶和用戶組(一個文件系統內不能有重復的用戶和用戶組)

pid??????????????? 進程編號(一個文件系統內每個進程的進程不能重復)

uts???????????????? 主機名和主機域(一個文件系統內主機名不能重復)

ipc???????????????? 信號量、消息隊列、共享內存(不同應用之間不能調用相同的內存空間)

net??????????????? 網絡設備、端口、網絡協議棧等(應用之間端口不能一樣)

②系統資源管理(cgroups)

mount命名空間:管理文件系統掛載點

pid命名空間:???? 進程隔離

uts命名空間:???? 隔離內核和版本標識符

ipc命名空間:????? 管理訪問ipc資源(ipc:進程間通信)

net命名空間:???? 管理網絡接口

4.Docker的優勢

①dockerdocker引擎統一了基礎設施環境-docker環境—》image—》封裝一個簡易的操作系統(3.0+G )

②docker引擎統一了程序打包(裝箱/封裝-類比于集裝箱)方式-docker鏡像—》images

③docker引擎統一了程序部署(運行)方式-docker容器——》基于鏡像-》運行為容器(可運行的環境)

實現了一次構建,多次、多處使用

5.Docker的使用場景

K8S image鏡像+container容器的方式

war jar ——》github gitlab 私有倉庫(代碼倉庫)—》jenkins(測試)(應用程序封裝/構建鏡像)—》運維下載,使用容器技術進行運行/發布

①打包應用程序簡單部署

②可脫離底層硬件任意遷移(實現了應用的隔離,將應用拆分并進行解耦),例如:服務器從騰訊云遷移到阿里云

③持續集成和持續交付(Ci/CD) :開發到測試發布

④部署微服務

⑤提供PAAS產品(平臺即服務){OpenStack的云主機類似于阿里云的ECS,屬于IAAS;Docker (K8S)屬于PAAS

6.Docker三要素

①鏡像——》模板

②容器——》基于鏡像,運行狀態/運行時狀態

③倉庫——》存放鏡像模板

7.Docker引擎

Docker Engine時具有以下主要組件的C/S客戶端-服務器應用程序:

server端:服務器是一種長期運行的程序,稱為守護程序進程(docker命令)

clinet端:rest api,它指定程序可以用來與守護進程進行通信并指示其操作的接口

命令行界面(CLI)客戶端(docker命令)

docker run??????????? 運行

docker start????????? 開啟

docker rm???????????? 刪除

二、Docker的架構

1.Docker使用的是客戶端-服務端的架構

Docker客戶端與Docker守護進程進行對話,該守護進程完成了構建,運行和發布Docker容器的繁重工作。

Docker區別于傳統的虛擬化,不需要虛擬硬件資源,直接使用容器引擎,所以速度快

Docker Client:客戶端/提供一個與用戶交互,展示的平臺+管理、控制docker服務端(功能)的工具docker

Docker客戶端(docker):是許多Docker用戶與Docker交互的主要方式。當使用諸如之類的命令時docker run,客戶端會將這些命令發送到dockerd,以執行這些命令。該docker命令使用docker api。Docker客戶端可以與多個守護程序通信。

Docker daemon:守護進程。Docker守護程序(docker)偵聽Docker api請求并管理Docker對象,例如圖像,容器,網絡和卷。守護進程還可以與其他守護程序通信以管理Docker服務。

Docker images:鏡像

Docker container:容器

Docker registry:鏡像倉庫(yum倉庫)

儲存鏡像的地方,默認在公共的Docker Hub上查找,可以搞個人倉庫(registry harbor)

2.Docker 三大組件

鏡像:一組資源集合,包含了應用程序軟件包、應用程序相關的依賴包、運行應用程序所需要的基礎環境(泛指操作系統環境),可以理解為容器的模板

容器(Docker container):基于鏡像的一種運行時狀態

倉庫(Docker reqistry):存放image鏡像模板;倉庫分類:1、公共倉庫-》docker hub,私有倉庫registry harbor

三、控制組

Linux上的Docker引擎還是依賴于另一種成為控制組(cgroups)的技術,cgroup將應用程序限制為一組特定的資源。控制組允許DockerEngine將可用的硬件資源共享給容器,并有選擇地實施限制和約束。例如,可以限制特定的容器的可用內存。

4個CPU

1、3???????????????????? 2、4

container1??????????? container2

四、部署20版Docker

1.安裝Docker

①環境配置

關閉防火墻

systemctl stop firewall

systemctl disable firewall

setenforce 0

vim /etc/selinux/config

SELINUX=disabled

vim /etc/reslov.conf

nameserver 114.114.114.114

②安裝依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2

device-mapper-persisten-data????????? 存儲驅動

lvm2???????????????????????????????????????????????? 控制工具

設置阿里云鏡像源

cd /etc/yum.repos.d

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

③安裝docker-ce社區版

yum install -y docker-ce

④開啟docker

systemctl start docker

systemctl enable docker

2.設置鏡像加速

官方鏡像加速器 阿里云網站

關于加速器的地址,可以在阿里云容器鏡像服務控制臺登陸后,在左側導航欄選擇鏡像工具,鏡像加速器,在頁面就會顯示獨立分配的加速器地址

通過修改daemon配置文件/etc/docker/daemon.json來使用加速器

tee /etc/docker/daemon.json <<-'EOF'

{

????????????? 地址

}

EOF

systemctl daemon-reload

systemctl restart docker

3.網絡優化

vim /etc/sysctl.conf

net.ipv4.ip_forward=1???????????????? #開啟地址轉發

sysctl -p

由于容器也是個獨立的,需要在虛擬機上開啟路由轉發,才能讓網絡進入容器

systemctl restart network

systemctl restart docker

使用docker images 、docker image ls 查看鏡像列表

docker ps -a

4.docker-server端配置文件

{

?????? "graph": "/data/docker",????????????????????????????????? #數據目錄

?????? "storage-driver": "overlay2",???????????????????? ?????? #存儲引擎 早期的時候存儲引擎時aufs,新的是overlay2(overlayfs:文件系統,解決docker鏡像分層)

?????? "insecure-registries": [" registry.access.redhat.com", "quary.io"]???? #私有倉庫位置

?????? "registry-mirrors": ["https://q***"]???????????? ?????? #鏡像加速

?????? "bip": "172.7.5.1/24",??????????? ??????????????????????????? #docker網絡;控制網段的位置;需要創建新的網橋,系統默認的docker0是不變的

?????? "exec-opts": ["native.cgroupdriver-systemd"],? #啟動時候的額外參數(驅動)

?????? "live-restore":true???????? ?????????????????????????????????? #當docker容器引擎掛掉的時候,使用docker跑起來的容器還能運行(分離)

5.查看

①查看docker版本

②顯示docker的系統信息,內核、鏡像數、容器數等

docker info

③查看容器資源

docker stats

五、Docker鏡像操作

1.運行鏡像

docker run hello-world

解釋:

①The Docker client contacted the Docker daemon.

docker client 客戶端連接到了服務端(服務端是以一個守護進程的形式跑在操作系統里面的)restful api典型的c/s架構

②The Docker daemon pulled the “hello-world” image from the Docker Hub.(amd64)

docker 服務端的守護進程從docker hub 上下載了鏡像(Ps:服務端會先檢查本地系統是否有這個鏡像)

③The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.

服務端創建了一個新的容器,然后從拉去的這個鏡像啟動了一個容器,容器執行了腳本/可執行程序讓我們可以查看/使用(client)

④The Docker daemon streamed that output to the Docker client, which sent it

to your terminal.

docker服務端把這些信息流(傳遞〉返回到客戶端并展示出來,(展示在終端上)

docker client 可以是多種形式,比如"docker"命令工具所在的終端

docker search nginx

docker search centos:7

搜索對的都是docker公共倉庫里,用戶自己制作上傳上去的鏡像,供其他用戶下載使用

3.下載鏡像-pull

client端連接服務端,從docker(hub)倉庫上把鏡像下載下來

格式:docker pull 鏡像名稱

docker pull nginx

4.查看鏡像/容器

docker images???????????? #查看鏡像列表

docker images -q?????????????? #查詢鏡像過濾出來的ID#q:過濾出鏡像ID

docker ps -a???????? #查看容器列表

5.查看當前docker下的鏡像詳細信息

格式:docker inspect 鏡像ID

docker inspect ea335eea17ab

6.添加鏡像標簽

格式:docker tag 原鏡像:原標簽 原鏡像:新標簽

docker tag hello-world:latest hello-world:new

更改的新的鏡像標簽只是復制了老的鏡像,刪除老的鏡像用新的鏡像不影響

統計鏡像是通過統計不同的鏡像id

7.刪除鏡像

刪除鏡像之前需要刪除容器ID

docker rmi hello-world:lastest

格式:docker rm 容器id

docker rm cfe2aa6e41c9

刪除標簽

格式:docker rmi 標簽

docker rmi hello-wrold

8.鏡像導出

docker svae -o 文件名(自己取名) 鏡像名

docker load <

導出

docker save -o hello-wold-1 hello-world:latest

導入

也可以導入到別的docker下

scp hello-world-1 root@192.168.72.11:/opt

docker load < hello-world-1

六、Docker相關操作

1.查詢容器

docker ps -a??????????????? #顯示所有容器,包括未運行的,a:all(全部)

docker ps -qa????????????? #顯示所有容器的id,q:過濾出ID

2.刪除容器

docker rm 容器id

docker rm -f ???????????????????? #強制刪除容器(正在運行)

docker rm 60078f0578eb

#docker rm -f `docker ps -qa`????????????????? #強制批量刪除容器,不建議使用

#docker ps -a | grep hello|awk '{print $1}'

#docker ps -a | awk '{print "docker rm " $1'} | bash??????? ##批量刪除容器(正則匹配);$1:是容器的id

#for i in `docker ps -a | grep -i exit | awk '{print$1}'`; do docker rm -f $i;done??? ##批量刪除"exit"狀態(指定狀態)的容器

3.啟動運行容器

①創建容器

docker create –[i、t、d] 名字:標簽 /binbash

-i:讓容器的標準輸入保持打開

-t:分配一個偽終端

-d:后臺守護進程的方式運行

docker create -it nginx:latest /bin/bash

②啟動容器

docker start 容器id

③啟動一次性容器

持續性運行浪費資源,就一次性執行操作

docker run centos:7 /usr/bin/bash -c ls /? #-c:傳遞命令參數

④持續后臺運行

docker run -d centos:7 /usr/bin/bash -c “while true;do echo hello;done”

#while true;do echo hello;done代表死循環

4.停止容器

docker stop 容器id

docker stop e9aed6611134

5.進入、退出容器

①使用run

docker run -it 鏡像名 /bin/bash

docker run -it nginx;latest /bin/bash

②使用exec(容器必須為開啟狀態)

docker exec -it 容器id /bin/bash

PS:

1.docker run -it會創建前臺進程,但是會在輸入exit后終止進程。

2.docker attach 會通過連接stdin,連接到容器內輸入輸出流,會在輸入exit后終止容器進程.

3.docker exec -it 會連接到容器,可以像ssh一樣進入容器內部,進行操作,可以通過exit退出容器,不影響容器運行。

③退出容器

cttl+d或exit

6.容器導入導出

①導出

docker export 容器id > 文件名

docker export 6c4380bae87a > centos7

②導入

docker import 導出的文件名(容器) 指定鏡像名稱(打上標簽)

docker import centos7 centos7:new

cat 文件名(容器) | docker import – centos:new

cat centos7 | docker import – centos:new

七、Docker網絡模式

docker的網絡形式

loopback:回環網卡、TCP\IP網卡是否生效

virtual vridge:自身繼承了一個虛擬化功能(kvm架構),是原生架構的一個虛擬化平臺,安裝了一個虛擬化平臺之后就會系統就會自動安裝虛擬網卡

(安裝完vmwokerstation后,在網絡適配器里可以看到很多的VMent1、VMent2……)

dock0:容器的網關,綁定物理網卡,主要是做NAT地址轉換,端口映射;dock0本身也是一種容器

veth對:一組虛擬設備,用戶連接兩個不同的名稱空間,宿主機內就是veth

1.Host模式

就是與宿主機共享網絡名稱空間/網絡協議棧

Host模式下,容器不會虛擬出子的網卡、配置自己的IP等,而是使用宿主機的IP和端口,

啟用容器時使用Host模式,那這個容器就不會獲得一個獨立的網絡名稱空間,而是會和宿主機共用一個名稱空間,但是容器的其他方面像文件系統、進程列表還是會和宿主機隔離的

Host模式下,容器直接使用主機的IP地址與外界通信,容器內的服務端口也可以使用宿主機的端口,不需要進行地址轉換

最大的優勢就是網絡性能比較好,但是docker host已經使用的端口就不能在去使用了,網絡隔離性不好

2.Container模式

多個容器共享一個網絡名稱空間,就是指定新的創建的容器和一個已經存在的容器共享一個網絡名稱空間,就不是和宿主機進行共享了

新創建的容器不會創建自己的網卡,配置自己的ip,而是和一個指定的容器共享IP、端口范圍等。一樣的兩個容器除了網絡方面,其他的像文件系統、進程列表等還是隔離的

3.None模式

容器有自己的獨立網絡名稱空間,但并沒有進行任何網絡設置,相當于自己在一個封閉的網絡環境里,這種模式的網絡無法聯網,但是封閉的網絡能很好的保證容器的安全性

4.Bridge模式

這個模式會為每個容器分配、設置IP等,并將容器連接到一個docker虛擬網橋,通過docker0虛擬網橋及iptables的nat表配置與宿主機通信,當docker進程啟動時,會在主機創建一個名為docker0的虛擬網橋,此主機上啟動的docker容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在一個二層網絡中。

從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。在主機上創建一對虛擬網卡vetj pair設備,Docker講veth pair設備的一端放在新創建的容器中,并命名為eth0(容器的網卡),另一端放在主機中,以vethxxx這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中,可以通過brctl show命令查看

bridge模式是docker的默認網路模式,不寫-net參數,就是bridge模式。使用docker run -p時,docker實際是iptables做了DNAT規則,實現端口轉發功能。可以使用iptables -t nat -vnL查看。

5.Docker自定義網絡

①查看網絡列表

docker network ls

②查看容器IP

docker inspect 6c4380bae87a

③自定義網絡固定IP

docker run -itd –-name test1 –-network bridge –-ip 172.17.0.100 centos:latest? /bin/bash

發現這種方式會報錯:只能遵守默認的分配地址方式;無法指定,狀態是在創建狀態上

只能先創建網絡模式后,在進行指定固定IP

docker network create --subnet=172.20.0.0/16 ttnet

④網絡模式內加入指定的IP地址

docker run -itd --name centos-t1 --net ttnet --ip 172.20.0.100 centos:latest /bin/bash

6.暴露端口

docker run -itd nginx:latest /bin/bash

打開Nginx容器后通過瀏覽器打不開網頁

①指定端口

docker run -itd -p 1234:80 nginx /bin/bash??????????? #暴露出來的端口是1234

開啟nginx

docker exec -it 0c2ee2fc128a /bin/bash -c nginx

輸入ip加端口,這個ip是宿主機ip,端口是暴露出來的端口進行訪問

②隨機端口

docker run -itd -P nginx /bin/bash?????????? #指定隨機端口

重新開啟nginx

docker exec -it 480286ada746 /bin/bash -c nginx

訪問,ip還是宿主機ip,端口就是隨機端口

八、Docker數據卷

1.容器文件復制

負責文件到宿主機里

docker cp /opt/abc 容器id:/opt/abc

2.添加Linux系統命令到容器里

添加的docker容器里是沒有系統命令的,可以手動添加

docker run -itd –name centos-1 –privileged=true centos:7 /sbin/init

在去用系統命令就可以

3.免交互在容器進行操作

docker exec -it centos-1 /bin/bash -c “mkdir /abc”

docker exec -it centos-1 /bin/bash -c "ls"

4.數據卷

數據卷是一個提供容器使用的特殊目錄

創建數據卷

docker run -it -v /data/abc:/data –name test1 centos:7 /bin/bash

cd /data

touch 1.txt

去宿主機查看

5.數據卷容器

就是一個普通的容器,實現榮期間的互聯互通

①數據卷

docker run -it --name web1 -v /data1 -v /data2 centos:7 /bin/bash

②新容器掛載web1

docker run -it --name db1 --volumes-from web1 centos:7 /bin/bash

③測試

創建文件測試

容器web1

cd /data1

touch 1.txt

echo “this is test” > 1.txt

在新容器db1查看

6.容器互聯(使用centos鏡像)

docker run -itd -P --name web1 centos:7 /bin/bash

#創建并運行容器取名web1,端口號自動映射

docker run -itd -P --name web1 centos:7 /bin/bash

#創建并運行容器取名web2,鏈接到web1和其通信 –link:打通隧道

各自下載ifconfig的工具:yum install -y net-tools

web1:

web2:

像redis哨兵模式就需要用到

總結

以上是生活随笔為你收集整理的Docker基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。