色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Docker常見的問題和坑

dyquk4xk2p3d ? 來源:CSDN ? 作者:CSDN ? 2022-11-03 09:59 ? 次閱讀

	

前言

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

1.什么是Docker?

  • Docker 是一個開源的應用容器引擎,基于go 語言開發并遵循了apache2.0 協議開源
  • Docker 是在Linux 容器里運行應用的開源工具,是一種輕量級的“虛擬機”
  • Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量級的,可移植的,自給自足的容器

也可以這樣形象的比喻:

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

2.Docker的應用場景有哪些?

  • Web 應用的自動化打包和發布。
  • 自動化測試和持續集成、發布。
  • 在服務型環境中部署和調整數據庫或其他的后臺應用。
  • 從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。

在這里我重點介紹下Docker作為內部開發環境的場景

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

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

如果要把容器作為開發機使用,需要解決的是遠程登錄容器和容器內進程管理問題。雖然docker的初衷是為“微服務”架構設計的,但根據我們的實際使用經驗,在docker內運行多個程序,甚至sshd或者upstart也是可行的。

3.Docker的優點有哪些?

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

  • 靈活:即使是最復雜的應用也可以集裝箱化。
  • 輕量級:容器利用并共享主機內核。
  • 可互換:可以即時部署更新和升級。
  • 便攜式:可以在本地構建,部署到云,并在任何地方運行。
  • 可擴展:可以增加并白動分發容器副本。
  • 可堆疊:可以垂直和即時堆疊服務。
271edd3e-5b0e-11ed-a3b6-dac502259ad0.png

Docker 是一個用于開發,交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。借助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。

4.Docker與虛擬機的區別是什么?

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

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

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

273d2bc2-5b0e-11ed-a3b6-dac502259ad0.png

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

鏡像

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

通過鏡像啟動一個容器,一個鏡像是一個可執行的包,其中包括運行應用程序所需要的所有內容包含代碼,運行時間,庫、環境變量、和配置文件。

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

容器

Docker的容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。可以把容器看做是一個簡易版的linux環境(包括root用戶權限、鏡像空間、用戶空間和網絡空間等)和運行在其中的應用程序。

倉庫

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

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

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

國內的公開倉庫包括阿里云 、網易云等。

6.如何快速安裝Docker?

執行以下安裝命令去安裝依賴包

yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2
sudoyum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
[root@centos7~]yum-yinstalldocker-cedocker-ce-clicontainerd.io
[root@centos7~]#dockerps--查看docker
274cb830-5b0e-11ed-a3b6-dac502259ad0.png
[root@centos7~]#systemctlenabledocker
[root@centos7~]#systemctlstartdocker
[root@centos7~]#systemctlstatusdocker
[root@centos7~]#dockerps--查看容器
[root@centos7~]#dockerversion--查看版本
[root@centos7~]#dockerinfo--查看版本

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

默認情況下 Docker的存放位置為:/var/lib/docker

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

修改到其它目錄

首先停掉 Docker 服務:

systemctlstopdocker

然后移動整個/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 關鍵字

獲取鏡像

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

查看鏡像信息

鏡像下載后默認存放在 /var/lib/docker

  • REPOSITORY: 鏡像所屬倉庫
  • TAG: 鏡像的標簽信息,標記同一個倉庫中的不同鏡像
  • IMAGE ID :鏡像的唯一ID號,唯一標識一個鏡像
  • CREATED: 鏡像創建時間
  • SIZE: 鏡像大小
275e793a-5b0e-11ed-a3b6-dac502259ad0.png
獲取鏡像的詳細信息

格式:docker ? inspect ? 鏡像ID號

鏡像ID 號可以不用打全。

276d8bbe-5b0e-11ed-a3b6-dac502259ad0.png
為本地鏡像添加新的標簽

格式:docker ? tag ?名稱:[ 標簽]

刪除鏡像

格式1:docker ? rmi ? 倉庫名稱:標簽

當一個鏡像有多個標簽時,只是刪除其中指定的標簽

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

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

將鏡像保存為本地文件

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

[root@localhost~]#dockersave-o/opt/nginx.tarnginx:latest
#將本地鏡像傳給另一臺主機
[root@localhost~]#scp/opt/nginx.tar192.168.1.54:/opt

9.如何創建Docker容器?

#dockerimages--鏡像
dockerrun-d--namecentos7.8-hcentos7.8
-p220:22-p3387:3389
--privileged=true
centos:7.8.2003/usr/sbin/init

#我想擁有一個linux8.2的環境
dockerrun-d--namecentos8.2-hcentos8.2
-p230:22-p3386:3389
--privileged=true
daocloud.io/library/centos:8.2.2004init

#進入容器
dockerexec-itcentos7.8bash
dockerexec-itcentos8.2bash
cat/etc/redhat-release--查看系統版本

10.Docker在后臺的標準運行過程是什么?

當利用 docker run 來創建容器時, Docker 在后臺的標準運行過程是:

  • 檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載;
  • 利用鏡像創建并啟動一個容器;
  • 分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
  • 從宿主主機配置的網橋接口中橋接一個虛擬機接口到容器中;
  • 分配一個地址池中的 IP 地址給容器;
  • 執行用戶指定的應用程序,執行完畢后容器被終止運行。

11.Docker網絡模式有哪些?

host模式

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

相當于VMware 中的橋接模式,與宿主機在同一個網絡中,但是沒有獨立IP地址

Docker 使用了Linux 的Namespace 技術來進行資源隔離,如PID Namespace隔離進程,Mount Namespace隔離文件系統,Network Namespace 隔離網絡等。

一個Network Namespace 提供了一份獨立的網絡環境,包括網卡,路由,iptable 規則等都與其他Network Namespace 隔離。

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

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

278815a6-5b0e-11ed-a3b6-dac502259ad0.png
container模式

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

這個模式指定新創建的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP,端口范圍等。 可以在一定程度上節省網絡資源,容器內部依然不會擁有所有端口。

同樣,兩個容器除了網絡方面,其他的如文件系統,進程列表等還是隔離的。

兩個容器的進程可以通過lo網卡設備通信

27a2506a-5b0e-11ed-a3b6-dac502259ad0.png
none 模式

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

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

這種網絡模式下,容器只有lo 回環網絡,沒有其他網卡。

這種類型沒有辦法聯網,但是封閉的網絡能很好的保證容器的安全性

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

bridge 模式

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

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

從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。在主機上創建一對虛擬網卡veth pair設備。veth設備總是成對出現的,它們組成了一個數據的通道,數據從一個設備進入,就會從另一個設備出來。因此,veth設備常用來連接兩個網絡設備。

Docker將veth pair 設備的一端放在新創建的容器中,并命名為eth0(容器的網卡),另一端放在主機中, 以veth*這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。可以通過 brctl show 命令查看。

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

使用 docker run -p 時,docker實際是在iptables做了DNAT規則,實現端口轉發功能。

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

27b30a40-5b0e-11ed-a3b6-dac502259ad0.png

12.什么是Docker的數據卷

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

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

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

13.如何搭建Docker私有倉庫

1.拉取私有倉庫鏡像

[root@jeames~]#dockerpullregistry
Usingdefaulttag:latest

2.啟動私有倉庫容器

dockerrun-di--nameregistry-p5000:5000registry
dockerupdate--restart=alwaysregistry--開機自啟動
dockerps-a--format"table{{.ID}}	{{.Names}}	{{.Status}}"

訪問網址:http://192.168.1.54:5000/v2/_catalog

3.設置信任

[root@jeames~]#vi/etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["192.168.1.54:5000"]
}

[root@jeames~]#systemctlrestartdocker--重啟docker

4.上傳本地鏡像

[root@jeames~]#dockerimages
[root@jeames~]#dockertagpostgres:11192.168.1.54:5000/postgres

[root@jeames~]#dockerpush192.168.1.54:5000/postgres

5.重新拉取鏡像

[root@jeames~]#dockerrmi192.168.1.54:5000/postgres
[root@jeames~]#dockerimages
[root@jeames~]#dockerpull192.168.1.54:5000/postgres

14.Docker如何遷移備份?

1.容器保存為鏡像

[root@jeames~]#dockerimages
[root@jeames~]#dockerps-a
dockerps-a--format"table{{.ID}}	{{.Names}}	{{.Status}}"
[root@jeames~]#dockercommitredismyredis
##使用新的鏡像創建容器
dockerrun-di--namemyredismyredis

2.鏡像的備份

[root@jeames~]#dockersave-omyredis.tarmyredis

默認放到當前目錄

[root@jeames~]#ll
[root@jeames~]#pwd

3.恢復過程

##刪除容器
dockerps--format"table{{.ID}}	{{.Names}}	{{.Status}}"
dockerstopmyredis
dockerrmmyredis
##刪除鏡像
dockerimages
dockerrmimyredis
[root@jeames~]#dockerload-imyredis.tar

15. Docker如何部署MySQL?

1.下載鏡像
https://hub.docker.com/中搜索mysql
[root@jeames~]#dockerpullmysql:5.7.30
[root@jeames~]#dockerpullmysql:8.0.20
2.安裝部署

2.1 創建容器

mkdir-p/usr/local/mysql5730/
mkdir-p/usr/local/mysql8020/

dockerrun-d--namemysql5730-hmysql5730
-p3309:3306
-v/usr/local/mysql5730/conf:/etc/mysql/conf.d
-eMYSQL_ROOT_PASSWORD=root-eTZ=Asia/Shanghai
mysql:5.7.30

dockerrun-d--namemysql8020-hmysql8020
-p3310:3306
-v/usr/local/mysql8020/conf:/etc/mysql/conf.d
-eMYSQL_ROOT_PASSWORD=root-eTZ=Asia/Shanghai
mysql:8.0.20

2.2 訪問Mysql

##登陸容器
dockerexec-itmysql5730bash
mysql-uroot-proot
mysql>selectuser,hostfrommysql.user

##遠程訪問
mysql-uroot-proot-h192.168.59.220-P3309

	
			


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 虛擬機
    +關注

    關注

    1

    文章

    918

    瀏覽量

    28250
  • Docker
    +關注

    關注

    0

    文章

    472

    瀏覽量

    11866

原文標題:Docker奪命連環15問,你能堅持第幾問?

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    在 Huawei Cloud EulerOS 系統中安裝 Docker 的詳細步驟與常見問題解決

    前言 ? 1. 安裝Docker ? 1.1 系統更新與依賴安裝 ? 1.2 添加華為云Docker倉庫 ? 2. 解決倉庫配置錯誤 ? 2.1 手動修改倉庫配置文件 ? 2.2 安裝Docker
    的頭像 發表于 12-26 18:12 ?261次閱讀
    在 Huawei Cloud EulerOS 系統中安裝 <b class='flag-5'>Docker</b> 的詳細步驟與<b class='flag-5'>常見</b>問題解決

    docker-compose配置文件內容詳解以及常用命令介紹

    一、Docker Compose 簡介 Docker Compose是一種用于定義和運行多容器Docker應用程序的工具。通過一個? docker-compose.yml ?文件,您可
    的頭像 發表于 12-02 09:29 ?556次閱讀
    <b class='flag-5'>docker</b>-compose配置文件內容詳解以及常用命令介紹

    如何在樹莓派上安裝Docker容器

    Pi官網 下載最新版本的Raspberry Pi OS。 使用SD卡寫入工具將鏡像寫入SD卡:可以使用 Etcher 等工具。 將SD卡插入樹莓派并啟動。 2. 更新系統 在安裝Docker之前
    的頭像 發表于 11-11 11:38 ?671次閱讀

    Docker運行環境安裝

    作者:京東科技 林中 Docker是一個開放的平臺,用于開發、發布和運行應用程序。Docker分離了應用程序和運行應用的基礎設施,從而實現了軟件的快速交付。利用docker提供的一系列功能,包括構建
    的頭像 發表于 10-29 11:28 ?229次閱讀

    手動構建Docker鏡像的方法

    不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像。
    的頭像 發表于 08-05 15:30 ?540次閱讀
    手動構建<b class='flag-5'>Docker</b>鏡像的方法

    ARM平臺實現Docker容器技術

    本帖最后由 Tronlong創龍科技 于 2024-7-26 08:51 編輯 什么是Docker? (1)Docker的架構Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以
    發表于 07-25 14:36

    ARM平臺實現Docker容器技術

    本帖最后由 Tronlong創龍科技 于 2024-7-19 16:50 編輯 什么是Docker? (1)Docker的架構Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以
    發表于 07-17 11:05

    Jtti:Docker會替代調虛機嗎

    Docker是計算虛擬化的一種方式,和使用虛擬機進行虛擬化是類似的。由于近幾年Docker技術的流行和發展。所以單獨介紹一下Docker。首先先回答下面一個問題。 1.Docker會替
    的頭像 發表于 07-12 14:38 ?336次閱讀
    Jtti:<b class='flag-5'>Docker</b>會替代調虛機嗎

    關于Docker 的清理命令集錦

    這篇文章主要介紹了Docker 清理命令集錦,需要的朋友可以參考下 復制代碼代碼如下: docker kill $(docker ps -a -q) ?刪除所有已經停止的容器 復制代碼代碼如下
    的頭像 發表于 06-13 15:56 ?392次閱讀

    一文掃盡Nas常用Docker軟件

    NAS(Network Attached Storage,網絡附加存儲)設備上的Docker軟件選擇取決于您的具體需求和用途。以下是一些NAS上常用的Docker軟件推薦
    的頭像 發表于 05-23 18:33 ?1848次閱讀

    精通Docker網絡:Bridge驅動深度解析

    除了使用 docker0 網橋外,用戶還可以使用自定義的網橋,然后通過 --bridge=BRIDGE 參數傳遞給 docker daemon。
    的頭像 發表于 03-31 15:58 ?1466次閱讀
    精通<b class='flag-5'>Docker</b>網絡:Bridge驅動深度解析

    ARM平臺實現Docker容器技術

    什么是Docker? (1)Docker的架構 Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的Linux或Windows機器上
    的頭像 發表于 03-07 13:48 ?819次閱讀
    ARM平臺實現<b class='flag-5'>Docker</b>容器技術

    迅為3588開發板Ubuntu安裝Docker

    迅為3588開發板Ubuntu安裝Docker
    的頭像 發表于 01-29 16:07 ?754次閱讀
    迅為3588開發板Ubuntu安裝<b class='flag-5'>Docker</b>

    TLT507-Docker容器部署方法說明

    TLT507-Docker容器部署方法說明
    的頭像 發表于 01-26 09:49 ?475次閱讀
    TLT507-<b class='flag-5'>Docker</b>容器部署方法說明

    RK3568-Docker容器部署方法說明

    RK3568-Docker容器部署方法說明
    的頭像 發表于 01-22 10:12 ?1423次閱讀
    RK3568-<b class='flag-5'>Docker</b>容器部署方法說明
    主站蜘蛛池模板: 一受多攻高h| 在线 亚洲 日韩 欧洲视频| 97国产精品久久精品国产| 亚洲国产综合久久久无码色伦| 久久精品午夜一区二区福利 | 色欲档案之麻雀台上淫| 成人无码精品一区二区在线观看 | 67194成网页发布在线观看| 久久精品国产福利电影网| 成人公开免费视频| 99久久精品国产国产毛片 | 果冻传媒在线播放 免费观看| 最新国自产拍 高清完整版| 青柠在线电影高清免费观看| 国产精品久久久久久搜索| 电影 qvod| 99RE8国产这里只有精品| 小莹的性荡生活45章| 久久机热视频免费| 国产又粗又黄又爽的大片| 伊人无码高清| 亚洲AV久久无码精品九九软件 | 国产强奷糟蹋漂亮邻居在线观看| 一级毛片免费播放| 日韩欧美中文字幕在线二视频| 国产在线一区二区三区四区 | 色噜噜狠狠一区二区三区| 色欲AV亚洲永久无码精品麻豆| 亚洲免费三区| 97人摸人人澡人人人超一碰| WRITEAS塞红酒瓶| 国产精品久久久久久久久无码| 国产亚洲欧美在线中文BT天堂网| 精品无码人妻一区二区免费AV| 久久热最新网站获取3| 蜜臀AV久久国产午夜福利软件| 色婷婷粉嫩AV精品综合在线| 香蕉人人超人人超碰超国产| 青娱乐在线一区| 欧洲xxxxx| 亚洲区欧美日韩综合|