日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

來源:blog.csdn.NET/weixin_41645135/article/

details/125513040

目錄

  1. 什么是Docker?
  2. Docker的應(yīng)用場景有哪些?
  3. Docker的優(yōu)點有哪些?
  4. Docker與虛擬機的區(qū)別是什么?
  5. Docker的三大核心是什么?
  6. 如何快速安裝Docker?
  7. 如何修改Docker的存儲位置?
  8. Docker鏡像常用管理有哪些?
  9. 如何創(chuàng)建Docker容器?
  10. Docker在后臺的標(biāo)準(zhǔn)運行過程是什么?
  11. Docker網(wǎng)絡(luò)模式有哪些?
  12. 什么是Docker的數(shù)據(jù)卷
  13. 如何搭建Docker私有倉庫
  14. Docker如何遷移備份?
  15. Docker如何部署MySQL?
前言

本文總結(jié)了Docker常見的問題和坑,采用問答的形式,分享給大家

1.什么是Docker?

  • Docker 是一個開源的應(yīng)用容器引擎,基于go 語言開發(fā)并遵循了Apache2.0 協(xié)議開源

  • Docker 是在linux 容器里運行應(yīng)用的開源工具,是一種輕量級的“虛擬機”

  • Docker 的容器技術(shù)可以在一臺主機上輕松為任何應(yīng)用創(chuàng)建一個輕量級的,可移植的,自給自足的容器

也可以這樣形象的比喻:

Docker 的Logo設(shè)計為藍(lán)色鯨魚,拖著許多集裝箱,鯨魚可以看作為宿主機,集裝箱可以理解為相互隔離的容器,每個集裝箱中都包含自己的應(yīng)用程序。

2.Docker的應(yīng)用場景有哪些?
  • Web 應(yīng)用的自動化打包和發(fā)布。

  • 自動化測試和持續(xù)集成、發(fā)布。

  • 在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應(yīng)用。

  • 從頭編譯或者擴展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環(huán)境。

在這里我重點介紹下Docker作為內(nèi)部開發(fā)環(huán)境的場景

在容器技術(shù)出現(xiàn)之前,公司往往是通過為每個開發(fā)人員提供一臺或者多臺虛擬機來充當(dāng)開發(fā)測試環(huán)境。開發(fā)測試環(huán)境一般負(fù)載較低,大量的系統(tǒng)資源都被浪費在虛擬機本身的進程上了。

Docker容器沒有任何CPU和內(nèi)存上的額外開銷,很適合用來提供公司內(nèi)部的開發(fā)測試環(huán)境。而且由于docker鏡像可以很方便的在公司內(nèi)部分享,這對開發(fā)環(huán)境的規(guī)范性也有極大的幫助。

如果要把容器作為開發(fā)機使用,需要解決的是遠(yuǎn)程登錄容器和容器內(nèi)進程管理問題。雖然docker的初衷是為“微服務(wù)”架構(gòu)設(shè)計的,但根據(jù)我們的實際使用經(jīng)驗,在docker內(nèi)運行多個程序,甚至sshd或者upstart也是可行的。

3.Docker的優(yōu)點有哪些?

容器化越來越受歡迎,Docker的容器有點總結(jié)如下:

  • 靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化。

  • 輕量級:容器利用并共享主機內(nèi)核。

  • 可互換:可以即時部署更新和升級。

  • 便攜式:可以在本地構(gòu)建,部署到云,并在任何地方運行。

  • 可擴展:可以增加并自動分發(fā)容器副本。

  • 可堆疊:可以垂直和即時堆疊服務(wù)。

Docker 是一個用于開發(fā),交付和運行應(yīng)用程序的開放平臺。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助 Docker,您可以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產(chǎn)環(huán)境中運行代碼之間的延遲。

4.Docker與虛擬機的區(qū)別是什么?

虛擬機通過添加Hypervisor層(虛擬化中間層),虛擬出網(wǎng)卡、內(nèi)存、CPU等虛擬硬件,再在其上建立虛擬機,每個虛擬機都有自己的系統(tǒng)內(nèi)核。而Docker容器則是通過隔離(namesapce)的方式,將文件系統(tǒng)、進程、設(shè)備、網(wǎng)絡(luò)等資源進行隔離,再對權(quán)限、CPU資源等進行控制(cgroup),最終讓容器之間互不影響,容器無法影響宿主機。

與虛擬機相比,容器資源損耗要少。同樣的宿主機下,能夠建立容器的數(shù)量要比虛擬機多

但是,虛擬機的安全性要比容器稍好,而docker容器與宿主機共享內(nèi)核、文件系統(tǒng)等資源,更有可能對其他容器、宿主機產(chǎn)生影響。

5.Docker的三大核心是什么?鏡像

Docker的鏡像是創(chuàng)建容器的基礎(chǔ),類似虛擬機的快照,可以理解為一個面向Docker容器引擎的只讀模板。

通過鏡像啟動一個容器,一個鏡像是一個可執(zhí)行的包,其中包括運行應(yīng)用程序所需要的所有內(nèi)容包含代碼,運行時間,庫、環(huán)境變量、和配置文件。

Docker鏡像也是一個壓縮包,只是這個壓縮包不只是可執(zhí)行文件,環(huán)境部署腳本,它還包含了完整的操作系統(tǒng)。因為大部分的鏡像都是基于某個操作系統(tǒng)來構(gòu)建,所以很輕松的就可以構(gòu)建本地和遠(yuǎn)端一樣的環(huán)境,這也是Docker鏡像的精髓。

容器

Docker的容器是從鏡像創(chuàng)建的運行實例,它可以被啟動、停止和刪除。所創(chuàng)建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性??梢园讶萜骺醋鍪且粋€簡易版的linux環(huán)境(包括root用戶權(quán)限、鏡像空間、用戶空間和網(wǎng)絡(luò)空間等)和運行在其中的應(yīng)用程序。

倉庫

倉庫注冊服務(wù)器上往往存放著多個倉庫,每個倉庫中包含了多個鏡像,每個鏡像有不同標(biāo)簽(tag)。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。

最大的公開倉庫是 Docker Hub:https://hub.docker.com,存放了數(shù)量龐大的鏡像供用戶下載。

國內(nèi)的公開倉庫包括阿里云 、網(wǎng)易云等。

6.如何快速安裝Docker?

執(zhí)行以下安裝命令去安裝依賴包

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

sudo yum-config-manager

–add-repo

https://download.docker.com/linux/centos/docker-ce.repo

[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io

[root@centos7 ~] # docker ps --查看docker

[root@centos7 ~] # systemctl enable docker

[root@centos7 ~] # systemctl start docker

[root@centos7 ~] # systemctl status docker

[root@centos7 ~] # docker ps --查看容器

[root@centos7 ~] # docker version --查看版本

[root@centos7 ~] # docker info --查看版本

7.如何修改Docker的存儲位置?

默認(rèn)情況下 Docker的存放位置為:/var/lib/docker

可以通過命令查看具體位置:docker info | grep “Docker Root Dir”

修改到其它目錄

首先停掉 Docker 服務(wù):

systemctl stop docker

然后移動整個/var/lib/docker 目錄到目的路徑

mkdir -p /root/data/docker

mv /var/lib/docker /root/data/docker

ln -s /root/data/docker /var/lib/docker --快捷方式

8.Docker鏡像常用管理有哪些?快速檢索鏡像

格式:docker search關(guān)鍵字

獲取鏡像

格式:docker   pull  倉庫名稱[:標(biāo)簽] 如果下載鏡像時不指定標(biāo)簽,則默認(rèn)會下載倉庫中最新版本的鏡像,即選擇標(biāo)簽為 latest 標(biāo)簽

查看鏡像信息

鏡像下載后默認(rèn)存放在 /var/lib/docker

  • REPOSITORY: 鏡像所屬倉庫

  • TAG: 鏡像的標(biāo)簽信息,標(biāo)記同一個倉庫中的不同鏡像

  • IMAGE ID:鏡像的唯一ID號,唯一標(biāo)識一個鏡像

  • CREATED: 鏡像創(chuàng)建時間

  • SIZE: 鏡像大小

獲取鏡像的詳細(xì)信息

格式:docker   inspect  鏡像ID號

鏡像ID 號可以不用打全。

為本地鏡像添加新的標(biāo)簽

格式:docker   tag  名稱:[ 標(biāo)簽]

刪除鏡像

格式1:docker   rmi   倉庫名稱:標(biāo)簽

當(dāng)一個鏡像有多個標(biāo)簽時,只是刪除其中指定的標(biāo)簽

格式2: docker   rmi  鏡像ID  [-f]

如果該鏡像已經(jīng)被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像

將鏡像保存為本地文件

格式:docker   save   -o  存儲文件名   存儲的鏡像

[root@localhost ~] # docker save -o /opt/Nginx.tar nginx:latest

#將本地鏡像傳給另一臺主機

[root@localhost ~] # scp /opt/nginx.tar 192.168.1.54:/opt

9.如何創(chuàng)建Docker容器?

#docker images --鏡像

docker run -d --name centos7.8 -h centos7.8

-p 220:22 -p 3387:3389

--privileged= true

centos:7.8.2003 /usr/sbin/init

#我想擁有一個 linux 8.2 的環(huán)境

docker run -d --name centos8.2 -h centos8.2

-p 230:22 -p 3386:3389

--privileged= true

daocloud.io/library/centos:8.2.2004 init

# 進入容器

docker exec-it centos7.8bash

docker exec-it centos8.2 bash

cat /etc/redhat-release --查看系統(tǒng)版本

10.Docker在后臺的標(biāo)準(zhǔn)運行過程是什么?

當(dāng)利用 docker run來創(chuàng)建容器時, Docker 在后臺的標(biāo)準(zhǔn)運行過程是:

  • 檢查本地是否存在指定的鏡像。當(dāng)鏡像不存在時,會從公有倉庫下載;

  • 利用鏡像創(chuàng)建并啟動一個容器;

  • 分配一個文件系統(tǒng)給容器,在只讀的鏡像層外面掛載一層可讀寫層;

  • 從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬機接口到容器中;

  • 分配一個地址池中的 IP 地址給容器;

  • 執(zhí)行用戶指定的應(yīng)用程序,執(zhí)行完畢后容器被終止運行。

11.Docker網(wǎng)絡(luò)模式有哪些? host模式

host 模式 :使用 --net=host指定

相當(dāng)于VMware 中的橋接模式,與宿主機在同一個網(wǎng)絡(luò)中,但是沒有獨立IP地址

Docker 使用了Linux 的Namespace 技術(shù)來進行資源隔離,如PID Namespace隔離進程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡(luò)等。

一個Network Namespace提供了一份獨立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡,路由,iptable 規(guī)則等都與其他Network Namespace隔離。

一個Docker 容器一般會分配一個獨立的Network Namespace

但是如果啟動容器的時候使用host 模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機的IP和端口.此時容器不再擁有隔離的、獨立的網(wǎng)絡(luò)棧。不擁有所有端口資源

container模式

container模式:使用–net=contatiner:NAME_or_ID 指定

這個模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個Network Namespace,而不是和宿主機共享。 新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個指定的容器共享IP,端口范圍等。可以在一定程度上節(jié)省網(wǎng)絡(luò)資源,容器內(nèi)部依然不會擁有所有端口。

同樣,兩個容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng),進程列表等還是隔離的。

兩個容器的進程可以通過lo網(wǎng)卡設(shè)備通信

none 模式

none模式:使用 --net=none指定

使用none 模式,docker 容器有自己的network Namespace,但是并不為Docker 容器進行任何網(wǎng)絡(luò)配置。也就是說,這個Docker 容器沒有網(wǎng)卡,ip, 路由等信息。

這種網(wǎng)絡(luò)模式下,容器只有l(wèi)o 回環(huán)網(wǎng)絡(luò),沒有其他網(wǎng)卡。

這種類型沒有辦法聯(lián)網(wǎng),但是封閉的網(wǎng)絡(luò)能很好的保證容器的安全性

該容器將完全獨立于網(wǎng)絡(luò),用戶可以根據(jù)需要為容器添加網(wǎng)卡。此模式擁有所有端口。(none網(wǎng)絡(luò)模式配置網(wǎng)絡(luò))特殊情況下才會用到,一般不用

bridge 模式

相當(dāng)于Vmware中的 nat 模式,容器使用獨立network Namespace,并連接到docker0虛擬網(wǎng)卡。通過docker0網(wǎng)橋以及iptables nat表配置與宿主機通信,此模式會為每一個容器分配Network Namespace、設(shè)置IP等,并將一個主機上的 Docker 容器連接到一個虛擬網(wǎng)橋上。

當(dāng)Docker進程啟動時,會在主機上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機上啟動的Docker容器會連接到這個虛擬網(wǎng)橋上。虛擬網(wǎng)橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網(wǎng)絡(luò)中。

從docker0子網(wǎng)中分配一個IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。在主機上創(chuàng)建一對虛擬網(wǎng)卡veth pair設(shè)備。veth設(shè)備總是成對出現(xiàn)的,它們組成了一個數(shù)據(jù)的通道,數(shù)據(jù)從一個設(shè)備進入,就會從另一個設(shè)備出來。因此,veth設(shè)備常用來連接兩個網(wǎng)絡(luò)設(shè)備。

Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機中, 以veth*這樣類似的名字命名,并將這個網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中??梢酝ㄟ^ brctl show命令查看。

容器之間通過veth pair進行訪問

使用 docker run -p時,docker實際是在iptables做了DNAT規(guī)則,實現(xiàn)端口轉(zhuǎn)發(fā)功能。

可以使用iptables -t nat -vnL查看。

12.什么是Docker的數(shù)據(jù)卷

數(shù)據(jù)卷是一個供容器使用的特殊目錄,位于容器中??蓪⑺拗鳈C的目錄掛載到數(shù)據(jù)卷上,對數(shù)據(jù)卷的修改操作立刻可見,并且更新數(shù)據(jù)不會影響鏡像,從而實現(xiàn)數(shù)據(jù)在宿主機與容器之間的遷移。數(shù)據(jù)卷的使用類似于Linux下對目錄進行的mount操作。

如果需要在容器之間共享一些數(shù)據(jù),最簡單的方法就是使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器是一個普通的容器,專門提供數(shù)據(jù)卷給其他容器掛載使用。

容器互聯(lián)是通過容器的名稱在容器間建立一條專門的網(wǎng)絡(luò)通信隧道。簡單點說,就是會在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的信息

13.如何搭建Docker私有倉庫

1.拉取私有倉庫鏡像

[root@jeames ~] # docker pull registry

Using default tag: latest

2.啟動私有倉庫容器

docker run -di --name registry -p 5000:5000 registry

docker update --restart=always registry --開機自啟動

docker ps -a --format "table {{.ID}}t{{.Names}}t{{.Status}}"

訪問網(wǎng)址:http://192.168.1.54:5000/v2/_catalog

3.設(shè)置信任

[root@jeames ~] # vi /etc/docker/daemon.json

{

"registry-mirrors":[ "https://docker.mirrors.ustc.edu.cn"],

"insecure-registries":[ "192.168.1.54:5000"]

}

[root@jeames ~] # systemctl restart docker --重啟docker

4.上傳本地鏡像

[root@jeames ~] # docker images

[root@jeames ~] # docker tag postgres:11 192.168.1.54:5000/postgres

[root@jeames ~] # docker push 192.168.1.54:5000/postgres

5.重新拉取鏡像

[root@jeames ~] # docker rmi 192.168.1.54:5000/postgres

[root@jeames ~] # docker images

[root@jeames ~] # docker pull 192.168.1.54:5000/postgres

14.Docker如何遷移備份?

1.容器保存為鏡像

[root@jeames ~] # docker images

[root@jeames ~] # docker ps -a

docker ps -a --format "table {{.ID}}t{{.Names}}t{{.Status}}"

[root@jeames ~] # docker commit redis myredis

##使用新的鏡像創(chuàng)建容器

docker run -di --name myredis myredis

2.鏡像的備份

[root@jeames ~] # docker save -o myredis.tar myredis

默認(rèn)放到當(dāng)前目錄

[root@jeames ~] # ll

[root@jeames ~] # pwd

3.恢復(fù)過程

##刪除容器

docker ps --format "table {{.ID}}t{{.Names}}t{{.Status}}"

docker stop myredis

docker rm myredis

##刪除鏡像

docker images

docker rmi myredis

[root@jeames ~] # docker load -i myredis.tar

15. Docker如何部署MySQL?1.下載鏡像

https://hub.docker.com/ 中搜索mysql

[root@jeames ~] # docker pull mysql:5.7.30

[root@jeames ~] # docker pull mysql:8.0.20

2.安裝部署

2.1 創(chuàng)建容器

mkdir -p /usr/ local/mysql5730/

mkdir -p /usr/ local/mysql8020/

docker run -d --name mysql5730 -h mysql5730

-p 3309:3306

-v /usr/ local/mysql5730/conf:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSword=root -e TZ=Asia/Shanghai

mysql:5.7.30

docker run -d --name mysql8020 -h mysql8020

-p 3310:3306

-v /usr/ local/mysql8020/conf:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai

mysql:8.0.20

2.2 訪問Mysql

##登錄容器

docker exec-it mysql5730 bash

mysql -uroot -proot

mysql> select user,host from mysql.user

##遠(yuǎn)程訪問

mysql -uroot -proot -h192.168.59.220 -P3309

END

官方站點:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

分享到:
標(biāo)簽:Docker
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定