Docker原理剖析

一、簡介

?

1、了解Docker的前生LXC

?

LXC為Linux Container的簡寫。可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。相當于C++中的NameSpace。容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。

?

與傳統虛擬化技術相比,它的優勢在于:

(1)與宿主機使用同一個內核,性能損耗小;

(2)不需要指令級模擬;

(3)不需要即時(Just-in-time)編譯;

(4)容器可以在CPU核心的本地運行指令,不需要任何專門的解釋機制;

(5)避免了準虛擬化和系統調用替換中的復雜性;

(6)輕量級隔離,在隔離的同時還提供共享機制,以實現容器與宿主機的資源共享。

總結:Linux Container是一種輕量級的虛擬化的手段。

?

Linux Container提供了在單一可控主機節點上支持多個相互隔離的server container同時執行的機制。Linux Container有點像chroot,提供了一個擁有自己進程和網絡空間的虛擬環境,但又有別于虛擬機,因為lxc是一種操作系統層次上的資源的虛擬化。

?

2、LXC與docker什么關系?

?

docker并不是LXC替代品,docker底層使用了LXC來實現,LXC將linux進程沙盒化,使得進程之間相互隔離,并且能對各進程資源合理分配。

在LXC的基礎之上,docker提供了一系列更強大的功能。

?

3、什么是docker

?

docker是一個開源的應用容器引擎,基于go語言開發并遵循了apache2.0協議開源。

docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的linux服務器,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何接口(類iphone的app),并且容器開銷極其低。

?

4、docker官方文檔

?

https://docs.docker.com/

?

5、為什么docker越來越受歡迎

?

官方話語:

?

  • 容器化越來越受歡迎,因為容器是:

?

    • 靈活:即使是最復雜的應用也可以集裝箱化。

    • 輕量級:容器利用并共享主機內核。

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

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

    • 可擴展:您可以增加并自動分發容器副本。

    • 可堆疊:您可以垂直和即時堆疊服務。

?

  • 鏡像和容器(contalners)

?

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

容器是鏡像的運行實例,當被運行時有鏡像狀態和用戶進程,可以使用docker ps 查看。

?

  • 容器和虛擬機

?

容器是在linux上本機運行,并與其他容器共享主機的內核,它運行的一個獨立的進程,不占用其他任何可執行文件的內存,非常輕量。

?

虛擬機運行的是一個完成的操作系統,通過虛擬機管理程序對主機資源進行虛擬訪問,相比之下需要的資源更多。

?圖片

?

6、docker版本

?

Docker Community Edition(CE)社區版

Enterprise Edition(EE) 商業版

?

7、docker和openstack的幾項對比

?

圖片

?

8、容器在內核中支持2種重要技術

?

docker本質就是宿主機的一個進程,docker是通過namespace實現資源隔離,通過cgroup實現資源限制,通過寫時復制技術(copy-on-write)實現了高效的文件操作(類似虛擬機的磁盤比如分配500g并不是實際占用物理磁盤500g)

?

1)namespaces 名稱空間

?

圖片

?

?2)control Group 控制組

?

cgroup的特點是:

  • cgroup的api以一個偽文件系統的實現方式,用戶的程序可以通過文件系統實現cgroup的組件管理

  • cgroup的組件管理操作單元可以細粒度到線程級別,另外用戶可以創建和銷毀cgroup,從而實現資源的分配和再利用

  • 所有資源管理的功能都以子系統的方式實現,接口統一子任務創建之初與其父任務處于同一個cgroup的控制組

?

四大功能:

?

  • 資源限制:可以對任務使用的資源總額進行限制

  • 優先級分配:通過分配的cpu時間片數量以及磁盤IO帶寬大小,實際上相當于控制了任務運行優先級

  • 資源統計:可以統計系統的資源使用量,如cpu時長,內存用量等

  • 任務控制:cgroup可以對任務執行掛起、恢復等操作

?

9、了解docker三個重要概念

?

1)image鏡像

?

docker鏡像就是一個只讀模板,比如,一個鏡像可以包含一個完整的centos,里面僅安裝apache或用戶的其他應用,鏡像可以用來創建docker容器,另外docker提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下一個已經做好的鏡像來直接使用

?

2)container容器

?

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

?

3)repostory倉庫

?

倉庫是集中存儲鏡像文件的滄桑,registry是倉庫主從服務器,實際上參考注冊服務器上存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)

?

倉庫分為兩種,公有參考,和私有倉庫,最大的公開倉庫是docker Hub,存放了數量龐大的鏡像供用戶下載,國內的docker pool,這里倉庫的概念與Git類似,registry可以理解為github這樣的托管服務。

?

10、docker的主要用途

?

官方就是Bulid 、ship、run any app/any where,編譯、裝載、運行、任何app/在任意地方都能運行。

就是實現了應用的封裝、部署、運行的生命周期管理只要在glibc的環境下,都可以運行。

運維生成環境中:docker化。

?

  • 發布服務不用擔心服務器的運行環境,所有的服務器都是自動分配docker,自動部署,自動安裝,自動運行

  • 再不用擔心其他服務引擎的磁盤問題,cpu問題,系統問題了

  • 資源利用更出色

  • 自動遷移,可以制作鏡像,遷移使用自定義的鏡像即可遷移,不會出現什么問題

  • 管理更加方便了

?

11、docker改變了什么

?

  • 面向產品:產品交付

  • 面向開發:簡化環境配置

  • 面向測試:多版本測試

  • 面向運維:環境一致性

  • 面向架構:自動化擴容(微服務)

    ?

二、docker架構

?

1、總體架構

  • distribution 負責與docker registry交互,上傳洗澡鏡像以及v2 registry 有關的源數據

  • registry負責docker registry有關的身份認證、鏡像查找、鏡像驗證以及管理registry mirror等交互操作

  • image 負責與鏡像源數據有關的存儲、查找,鏡像層的索引、查找以及鏡像tar包有關的導入、導出操作

  • reference負責存儲本地所有鏡像的repository和tag名,并維護與鏡像id之間的映射關系

  • layer模塊負責與鏡像層和容器層源數據有關的增刪改查,并負責將鏡像層的增刪改查映射到實際存儲鏡像層文件的graphdriver模塊

  • graghdriver是所有與容器鏡像相關操作的執行者

?

2、docker架構2

?

如果覺得上面架構圖比較亂可以看這個架構:

?

?

?

從上圖不難看出,用戶是使用Docker Client與Docker Daemon建立通信,并發送請求給后者。

?

而Docker Daemon作為Docker架構中的主體部分,首先提供Server的功能使其可以接受Docker Client的請求;而后Engine執行Docker內部的一系列工作,每一項工作都是以一個Job的形式的存在。

?

Job的運行過程中,當需要容器鏡像時,則從Docker Registry中下載鏡像,并通過鏡像管理驅動graphdriver將下載鏡像以Graph的形式存儲;當需要為Docker創建網絡環境時,通過網絡管理驅動networkdriver創建并配置Docker容器網絡環境;當需要限制Docker容器運行資源或執行用戶指令等操作時,則通過execdriver來完成。

?

而libcontainer是一項獨立的容器管理包,networkdriver以及execdriver都是通過libcontainer來實現具體對容器進行的操作。當執行完運行容器的命令后,一個實際的Docker容器就處于運行狀態,該容器擁有獨立的文件系統,獨立并且安全的運行環境等。

?

3、docker架構3

?

再來看看另外一個架構,這個個架構就簡單清晰指明了server/client交互,容器和鏡像、數據之間的一些聯系。

?

圖片

這個架構圖更加清晰了架構

?

docker daemon就是docker的守護進程即server端,可以是遠程的,也可以是本地的,這個不是C/S架構嗎,客戶端Docker client 是通過rest api進行通信。

?

docker cli 用來管理容器和鏡像,客戶端提供一個只讀鏡像,然后通過鏡像可以創建多個容器,這些容器可以只是一個RFS(Root file system根文件系統),也可以ishi一個包含了用戶應用的RFS,容器在docker client中只是要給進程,兩個進程之間互不可見。

?

用戶不能與server直接交互,但可以通過與容器這個橋梁來交互,由于是操作系統級別的虛擬技術,中間的損耗幾乎可以不計。

?

?

三、docker架構2各個模塊的功能(待完善)

?

主要的模塊有:Docker Client、Docker Daemon、Docker Registry、Graph、Driver、libcontainer以及Docker container。

?

1、docker client

?

docker client 是docker架構中用戶用來和docker daemon建立通信的客戶端,用戶使用的可執行文件為docker,通過docker命令行工具可以發起眾多管理container的請求。

?

docker client可以通過一下三宗方式和docker daemon建立通信:tcp://host:port;unix:path_to_socket;fd://socketfd。,docker client可以通過設置命令行flag參數的形式設置安全傳輸層協議(TLS)的有關參數,保證傳輸的安全性。

?

docker client發送容器管理請求后,由docker daemon接受并處理請求,當docker client 接收到返回的請求相應并簡單處理后,docker client 一次完整的生命周期就結束了,當需要繼續發送容器管理請求時,用戶必須再次通過docker可以執行文件創建docker client。

?

2、docker daemon

?

docker daemon 是docker架構中一個常駐在后臺的系統進程,功能是:接收處理docker client發送的請求。該守護進程在后臺啟動一個server,server負載接受docker client發送的請求;接受請求后,server通過路由與分發調度,找到相應的handler來執行請求。

?

docker daemon啟動所使用的可執行文件也為docker,與docker client啟動所使用的可執行文件docker相同,在docker命令執行時,通過傳入的參數來判別docker daemon與docker client。

?

docker daemon的架構可以分為:docker server、engine、job。daemon

?

3、docker server

?

docker server在docker架構中時專門服務于docker client的server,該server的功能是:接受并調度分發docker client發送的請求,架構圖如下:

?

在Docker的啟動過程中,通過包gorilla/mux(golang的類庫解析),創建了一個mux.Router,提供請求的路由功能。在Golang中,gorilla/mux是一個強大的URL路由器以及調度分發器。該mux.Router中添加了眾多的路由項,每一個路由項由HTTP請求方法(PUT、POST、GET或DELETE)、URL、Handler三部分組成。

?

若Docker Client通過HTTP的形式訪問Docker Daemon,創建完mux.Router之后,Docker將Server的監聽地址以及mux.Router作為參數,創建一個httpSrv=http.Server{},最終執行httpSrv.Serve()為請求服務。

?

在Server的服務過程中,Server在listener上接受Docker Client的訪問請求,并創建一個全新的goroutine來服務該請求。在goroutine中,首先讀取請求內容,然后做解析工作,接著找到相應的路由項,隨后調用相應的Handler來處理該請求,最后Handler處理完請求之后回復該請求。

?

需要注意的是:Docker Server的運行在Docker的啟動過程中,是靠一個名為”serveapi”的job的運行來完成的。原則上,Docker Server的運行是眾多job中的一個,但是為了強調Docker Server的重要性以及為后續job服務的重要特性,將該”serveapi”的job單獨抽離出來分析,理解為Docker Server。

?

4、engine

?

Engine是Docker架構中的運行引擎,同時也Docker運行的核心模塊。它扮演Docker container存儲倉庫的角色,并且通過執行job的方式來操縱管理這些容器。

?

在Engine數據結構的設計與實現過程中,有一個handler對象。該handler對象存儲的都是關于眾多特定job的handler處理訪問。舉例說明,Engine的handler對象中有一項為:{“create”: daemon.ContainerCreate,},則說明當名為”create”的job在運行時,執行的是daemon.ContainerCreate的handler。

?

5、job

?

一個Job可以認為是Docker架構中Engine內部最基本的工作執行單元。Docker可以做的每一項工作,都可以抽象為一個job。例如:在容器內部運行一個進程,這是一個job;創建一個新的容器,這是一個job,從Internet上下載一個文檔,這是一個job;包括之前在Docker Server部分說過的,創建Server服務于HTTP的API,這也是一個job,等等。

?

Job的設計者,把Job設計得與Unix進程相仿。比如說:Job有一個名稱,有參數,有環境變量,有標準的輸入輸出,有錯誤處理,有返回狀態等。

?

6、docker registry

?

Docker Registry是一個存儲容器鏡像的倉庫。而容器鏡像是在容器被創建時,被加載用來初始化容器的文件架構與目錄。

?

在Docker的運行過程中,Docker Daemon會與Docker Registry通信,并實現搜索鏡像、下載鏡像、上傳鏡像三個功能,這三個功能對應的job名稱分別為”search”,”pull” 與 “push”。

?

其中,在Docker架構中,Docker可以使用公有的Docker Registry,即大家熟知的Docker Hub,如此一來,Docker獲取容器鏡像文件時,必須通過互聯網訪問Docker Hub;同時Docker也允許用戶構建本地私有的Docker Registry,這樣可以保證容器鏡像的獲取在內網完成。

?

7、Graph

?

Graph在Docker架構中扮演已下載容器鏡像的保管者,以及已下載容器鏡像之間關系的記錄者。一方面,Graph存儲著本地具有版本信息的文件系統鏡像,另一方面也通過GraphDB記錄著所有文件系統鏡像彼此之間的關系。

?

Graph的架構如下:

?

其中,GraphDB是一個構建在SQLite之上的小型圖數據庫,實現了節點的命名以及節點之間關聯關系的記錄。它僅僅實現了大多數圖數據庫所擁有的一個小的子集,但是提供了簡單的接口表示節點之間的關系。

?

同時在Graph的本地目錄中,關于每一個的容器鏡像,具體存儲的信息有:該容器鏡像的元數據,容器鏡像的大小信息,以及該容器鏡像所代表的具體rootfs。

?

8、driver

?

Driver是Docker架構中的驅動模塊。通過Driver驅動,Docker可以實現對Docker容器執行環境的定制。由于Docker運行的生命周期中,并非用戶所有的操作都是針對Docker容器的管理,另外還有關于Docker運行信息的獲取,Graph的存儲與記錄等。因此,為了將Docker容器的管理從Docker Daemon內部業務邏輯中區分開來,設計了Driver層驅動來接管所有這部分請求。

?

在Docker Driver的實現中,可以分為以下三類驅動:graphdriver、networkdriver和execdriver。

?

graphdriver主要用于完成容器鏡像的管理,包括存儲與獲取。即當用戶需要下載指定的容器鏡像時,graphdriver將容器鏡像存儲在本地的指定目錄;同時當用戶需要使用指定的容器鏡像來創建容器的rootfs時,graphdriver從本地鏡像存儲目錄中獲取指定的容器鏡像。

?

在graphdriver的初始化過程之前,有4種文件系統或類文件系統在其內部注冊,它們分別是aufs、btrfs、vfs和devmapper。而Docker在初始化之時,通過獲取系統環境變量”DOCKER_DRIVER”來提取所使用driver的指定類型。而之后所有的graph操作,都使用該driver來執行。

?

graphdriver的架構如下:

?

圖片

?

networkdriver的用途是完成Docker容器網絡環境的配置,其中包括Docker啟動時為Docker環境創建網橋;Docker容器創建時為其創建專屬虛擬網卡設備;以及為Docker容器分配IP、端口并與宿主機做端口映射,設置容器防火墻策略等。networkdriver的架構如下:

?

圖片

?

execdriver作為Docker容器的執行驅動,負責創建容器運行命名空間,負責容器資源使用的統計與限制,負責容器內部進程的真正運行等。在execdriver的實現過程中,原先可以使用LXC驅動調用LXC的接口,來操縱容器的配置以及生命周期,而現在execdriver默認使用native驅動,不依賴于LXC。

?

具體體現在Daemon啟動過程中加載的ExecDriverflag參數,該參數在配置文件已經被設為”native”。這可以認為是Docker在1.2版本上一個很大的改變,或者說Docker實現跨平臺的一個先兆。execdriver架構如下:

?

?

9、libcontainer

?

libcontainer是Docker架構中一個使用Go語言設計實現的庫,設計初衷是希望該庫可以不依靠任何依賴,直接訪問內核中與容器相關的API。

?

正是由于libcontainer的存在,Docker可以直接調用libcontainer,而最終操縱容器的namespace、cgroups、apparmor、網絡設備以及防火墻規則等。這一系列操作的完成都不需要依賴LXC或者其他包。libcontainer架構如下:

另外,libcontainer提供了一整套標準的接口來滿足上層對容器管理的需求。或者說,libcontainer屏蔽了Docker上層對容器的直接管理。又由于libcontainer使用Go這種跨平臺的語言開發實現,且本身又可以被上層多種不同的編程語言訪問,因此很難說,未來的Docker就一定會緊緊地和Linux捆綁在一起。而于此同時,Microsoft在其著名云計算平臺Azure中,也添加了對Docker的支持,可見Docker的開放程度與業界的火熱度。

?

暫不談Docker,由于libcontainer的功能以及其本身與系統的松耦合特性,很有可能會在其他以容器為原型的平臺出現,同時也很有可能催生出云計算領域全新的項目。

?

10、docker container

?

Docker container(Docker容器)是Docker架構中服務交付的最終體現形式。

?

Docker按照用戶的需求與指令,訂制相應的Docker容器:

?

  • 用戶通過指定容器鏡像,使得Docker容器可以自定義rootfs等文件系統;

  • 用戶通過指定計算資源的配額,使得Docker容器使用指定的計算資源;

  • 用戶通過配置網絡及其安全策略,使得Docker容器擁有獨立且安全的網絡環境;

  • 用戶通過指定運行的命令,使得Docker容器執行指定的工作。

?

?

四、docker簡單使用

?

1、安裝

yum install docker -y systemctl enable dockersystemctl start docker

注意:啟動前應當設置源

 

vim /usr/lib/systemd/system/docker.service

?

這里設置阿里的,注冊阿里云賬戶號每個用戶都有:

 
[root@web1 ~]# vim /usr/lib/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=mainEnvironmentFile=-/run/containers/registries.confEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current --registry-mirror=https://rfcod7oz.mirror.aliyuncs.com ?#這個值可以登陸阿里云賬號請參考下圖 ? ? ? ? ?--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current ? ? ? ? ? --default-runtime=docker-runc ? ? ? ? ? --exec-opt native.cgroupdriver=systemd ? ? ? ? ? --userland-proxy-path=/usr/libexec/docker/docker-proxy-current ? ? ? ? ? --init-path=/usr/libexec/docker/docker-init-current ? ? ? ? ? --seccomp-profile=/etc/docker/seccomp.json ? ? ? ? ? $OPTIONS ? ? ? ? ? $DOCKER_STORAGE_OPTIONS ? ? ? ? ? $DOCKER_NETWORK_OPTIONS ? ? ? ? ? $ADD_REGISTRY ? ? ? ? ? $BLOCK_REGISTRY ? ? ? ? ? $INSECURE_REGISTRY ? ? ? ? ? $REGISTRIESExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityTimeoutStartSec=0Restart=on-abnormalKillMode=process[Install]WantedBy=multi-user.target

?

2、docker版本查詢

 
 

[root@web1 ~]# docker versionClient: Version: ? ? ? ? 1.13.1 API version: ? ? 1.26 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: ? ? ?go1.10.3 Git commit: ? ? ?b2f74b2/1.13.1 Built: ? ? ? ? ? Wed May ?1 14:55:20 2019 OS/Arch: ? ? ? ? linux/amd64

?

Server:Version: ? ? ? ? 1.13.1 API version: ? ? 1.26 (minimum version 1.12)Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64Go version: ? ? ?go1.10.3 Git commit: ? ? ?b2f74b2/1.13.1 Built: ? ? ? ? ? Wed May ?1 14:55:20 2019 OS/Arch: ? ? ? ? linux/amd64 Experimental: ? ?false

?

3、搜索下載鏡像

 
 

docker pull alpine          #下載鏡像docker search nginx          #查看鏡像docker pull nginx

?

4、查看已經下載的鏡像

?

 
 

[root@web1 ~]# docker imagesREPOSITORY ? ? ? ? ?TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZEzxg/my_nginx ? ? ? ?v1 ? ? ? ? ? ? ? ? ?b164f4c07c64 ? ? ? ?8 days ago ? ? ? ? ?126 MBzxg/my_nginx ? ? ? ?latest ? ? ? ? ? ? ?f07837869dfc ? ? ? ?8 days ago ? ? ? ? ?126 MBdocker.io/nginx ? ? latest ? ? ? ? ? ? ?e445ab08b2be ? ? ? ?2 weeks ago ? ? ? ? 126 MBdocker.io/alpine ? ?latest ? ? ? ? ? ? ?b7b28af77ffe ? ? ? ?3 weeks ago ? ? ? ? 5.58 MBdocker.io/centos ? ?latest ? ? ? ? ? ? ?9f38484d220f ? ? ? ?4 months ago ? ? ? ?202 MB[root@web1 ~]#

?

5、導出鏡像

?

 
 

docker ?save nginx >/tmp/nginx.tar.gz

?

6、刪除鏡像

?

 
 

docker rmi -f nginx

?

7、導入鏡像

?

 
 

docker load </tmp/nginx.tar.gz

?

8、默認配置文件

?

vim /usr/lib/systemd/system/docker.service?

 
[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=mainEnvironmentFile=-/run/containers/registries.confEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current --registry-mirror=https://rfcod7oz.mirror.aliyuncs.com ? ? ? ? ? --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current ? ? ? ? ? --default-runtime=docker-runc ? ? ? ? ? --exec-opt native.cgroupdriver=systemd ? ? ? ? ? --userland-proxy-path=/usr/libexec/docker/docker-proxy-current ? ? ? ? ? --init-path=/usr/libexec/docker/docker-init-current ? ? ? ? ? --seccomp-profile=/etc/docker/seccomp.json ? ? ? ? ? $OPTIONS ? ? ? ? ? $DOCKER_STORAGE_OPTIONS ? ? ? ? ? $DOCKER_NETWORK_OPTIONS ? ? ? ? ? $ADD_REGISTRY ? ? ? ? ? $BLOCK_REGISTRY ? ? ? ? ? $INSECURE_REGISTRY ? ? ? ? ? $REGISTRIESExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityTimeoutStartSec=0Restart=on-abnormalKillMode=process[Install]WantedBy=multi-user.target~~~~

?

如果更改存儲目錄就添加

?

 
 

--graph=/opt/docker

?

如果更改DNS——默認采用宿主機的dns

?

 
 

--dns=xxxx的方式指定

9、運行hello world

?

這里用centos鏡像echo一個hello word

 

?

 

[root@web1 overlay2]# ?docker imagesREPOSITORY ? ? ? ? ?TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZEzxg/my_nginx ? ? ? ?v1 ? ? ? ? ? ? ? ? ?b164f4c07c64 ? ? ? ?8 days ago ? ? ? ? ?126 MBzxg/my_nginx ? ? ? ?latest ? ? ? ? ? ? ?f07837869dfc ? ? ? ?8 days ago ? ? ? ? ?126 MBdocker.io/nginx ? ? latest ? ? ? ? ? ? ?e445ab08b2be ? ? ? ?2 weeks ago ? ? ? ? 126 MBdocker.io/alpine ? ?latest ? ? ? ? ? ? ?b7b28af77ffe ? ? ? ?3 weeks ago ? ? ? ? 5.58 MBdocker.io/centos ? ?latest ? ? ? ? ? ? ?9f38484d220f ? ? ? ?4 months ago ? ? ? ?202 MB[root@web1 overlay2]# docker run centos echo "hello world"hello world[root@web1 overlay2]#

?

10、運行一個容器-run

 
[root@web1 overlay2]# docker run -it alpine sh ? #運行并進入alpine/ #/ #/ #/ #/ #/ # lsbin ? ?etc ? ?lib ? ?mnt ? ?proc ? run ? ?srv ? ?tmp ? ?vardev ? ?home ? media ?opt ? ?root ? sbin ? sys ? ?usr/ # cd tmp/tmp # exit

?

后臺運行(-d后臺運行)(--name添加一個名字)

 
 

[root@web1 overlay2]# docker run -it -d --name test1 alpineac46c019b800d34c37d4f9dcd56c974cb82eca3acf185e5f8f80c8a60075e343[root@web1 overlay2]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMESac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? 5 seconds ago ? ? ? Up 3 seconds ? ? ? ? ? ? ? ? ? ? ? ? ? ?test1[root@web1 overlay2]#

?

還有一種-rm參數,ctrl+c后就刪除,可以測試環境用,生成環境用的少

 

?

 

[root@web1 overlay2]# docker run -it ?--rm --name centos nginx^C[root@web1 overlay2]###另開一個窗口[root@web1 ~]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES3397b96ea7bd ? ? ? ?nginx ? ? ? ? ? ? ? "nginx -g 'daemon ..." ? 27 seconds ago ? ? ?Up 25 seconds ? ? ? 80/tcp ? ? ? ? ? ? ?centosac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? ? ? ?4 minutes ago ? ? ? Up 4 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? ?test1[root@web1 ~]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMESac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? 4 minutes ago ? ? ? Up 4 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? ?test1[root@web1 ~]#

?

11、如何進入容器

?

三種方法,上面已經演示了一種

第一種,需要容器本身的pid及util-linux,不推薦,暫時不演示了

第二種,不分配bash終端的一種實施操作,不推薦,這種操作如果在開一個窗口也能看到操作的指令,所有人都能看到。

?

 
 

[root@web1 overlay2]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES9fc796e928d7 ? ? ? ?nginx ? ? ? ? ? ? ? "sh" ? ? ? ? ? ? ? ?2 minutes ago ? ? ? Up 8 seconds ? ? ? ?80/tcp ? ? ? ? ? ? ?mynginxac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? 12 minutes ago ? ? ?Up 12 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? test1[root@web1 overlay2]# docker attach mynginx

?

##### lsbin ?boot ?dev ?etc ?home ?lib ?lib64 ?media ?mnt ?opt ?proc ?root ?run ?sbin ?srv ?sys ?tmp ?usr ?var# exit  [root@web1 overlay2]# docker attach mynginxYou cannot attach to a stopped container, start it first[root@web1 overlay2]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMESac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? 13 minutes ago ? ? ?Up 13 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? test1[root@web1 overlay2]#

?

第三種:exec方式,終端時分開的,推薦

?

 

[root@web1 overlay2]# docker exec -it mynginx sh#### lsbin ?boot ?dev ?etc ?home ?lib ?lib64 ?media ?mnt ?opt ?proc ?root ?run ?sbin ?srv ?sys ?tmp ?usr ?var# exit[root@web1 overlay2]#[root@web1 overlay2]#[root@web1 overlay2]#[root@web1 overlay2]# docker padocker: 'pa' is not a docker command.See 'docker --help'[root@web1 overlay2]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES6fc2d091cfe9 ? ? ? ?nginx ? ? ? ? ? ? ? "nginx -g 'daemon ..." ? 45 seconds ago ? ? ?Up 43 seconds ? ? ? 80/tcp ? ? ? ? ? ? ?mynginxac46c019b800????????alpine??????????????"/bin/sh"????????????????16?minutes?ago??????Up?16?minutes???????????????????????????test1

?

12、查看docker進程及刪除容器

?

上面已經演示:

?

 

[root@web1 overlay2]# docker psCONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES9fc796e928d7 ? ? ? ?nginx ? ? ? ? ? ? ? "sh" ? ? ? ? ? ? ? ?2 minutes ago ? ? ? Up 8 seconds ? ? ? ?80/tcp ? ? ? ? ? ? ?mynginxac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? 12 minutes ago ? ? ?Up 12 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? test1

 

?

 

[root@web1 overlay2]# docker ps -a       #-a :顯示所有的容器,包括未運行的CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES9fc796e928d7 ? ? ? ?nginx ? ? ? ? ? ? ? "sh" ? ? ? ? ? ? ? ? ? ? 4 minutes ago ? ? ? Exited (0) About a minute ago ? ? ? ? ? ? ? ? ? ? ? mynginxac46c019b800 ? ? ? ?alpine ? ? ? ? ? ? ?"/bin/sh" ? ? ? ? ? ? ? ?15 minutes ago ? ? ?Up 15 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? test13bf234febeaa ? ? ? ?alpine ? ? ? ? ? ? ?"sh" ? ? ? ? ? ? ? ? ? ? 17 minutes ago ? ? ?Exited (0) 16 minutes ago ? ? ? ? ? ? ? ? ? ? ? ? ? youthful_lumiereab113c63f0b4 ? ? ? ?centos ? ? ? ? ? ? ?"echo 'hello world'" ? ? 31 minutes ago ? ? ?Exited (0) 31 minutes ago ? ? ? ? ? ? ? ? ? ? ? ? ? infallible_torvaldsb326027dcf42 ? ? ? ?zxg/my_nginx ? ? ? ?"nginx" ? ? ? ? ? ? ? ? ?8 days ago ? ? ? ? ?Exited (0) 8 days ago ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? my_nginx4f1f1ca319f2 ? ? ? ?centos ? ? ? ? ? ? ?"bash" ? ? ? ? ? ? ? ? ? 8 days ago ? ? ? ? ?Exited (137) 8 days ago ? ? ? ? ? ? ? ? ? ? ? ? ? ? musing_lichterman64b4e32991c7 ? ? ? ?nginx ? ? ? ? ? ? ? "nginx -g 'daemon ..." ? 12 days ago ? ? ? ? Exited (0) 12 days ago ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mynginx1aee506fe7b5a ? ? ? ?alpine ? ? ? ? ? ? ?"sh" ? ? ? ? ? ? ? ? ? ? 12 days ago ? ? ? ? Created ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? infallible_haibt70620c73b9a0 ? ? ? ?alpine ? ? ? ? ? ? ?"sh" ? ? ? ? ? ? ? ? ? ? 12 days ago ? ? ? ? Created ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? gallant_volhard7655cbf87bb0 ? ? ? ?alpine ? ? ? ? ? ? ?"sh" ? ? ? ? ? ? ? ? ? ? 12 days ago ? ? ? ? Created ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? agitated_brahmagupta33fb949372e8 ? ? ? ?fce289e99eb9 ? ? ? ?"/hello" ? ? ? ? ? ? ? ? 12 days ago ? ? ? ? Created ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? elastic_dijkstra9de47616aea4 ? ? ? ?fce289e99eb9 ? ? ? ?"/hello" ? ? ? ? ? ? ? ? 13 days ago ? ? ? ? Created ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? confident_fermi[root@web1 overlay2]# docker rm 9fc796e928d7 #rm時刪除一個或多個容器9fc796e928d7

?

13、查看容器詳細信息

?

并不需要進入到容器里面,通過查看詳細信息看到了剛才運行的nginx,宿主機curl ip地址訪問一下運行情況。

 

?

 

[root@web1 overlay2]# ?docker inspect mynginx[ ? ?{ ? ? ? ?"Id": "6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010", ? ? ? ?"Created": "2019-08-07T08:57:48.864538933Z", ? ? ? ?"Path": "nginx", ? ? ? ?"Args": [ ? ? ? ? ? ?"-g", ? ? ? ? ? ?"daemon off;"], ? ? ? ?"State": { ? ? ? ? ? ?"Status": "running", ? ? ? ? ? ?"Running": true, ? ? ? ? ? ?"Paused": false, ? ? ? ? ? ?"Restarting": false, ? ? ? ? ? ?"OOMKilled": false, ? ? ? ? ? ?"Dead": false, ? ? ? ? ? ?"Pid": 119948, ? ? ? ? ? ?"ExitCode": 0, ? ? ? ? ? ?"Error": "", ? ? ? ? ? ?"StartedAt": "2019-08-07T08:57:49.417992182Z", ? ? ? ? ? ?"FinishedAt": "0001-01-01T00:00:00Z" ? ? ? ?}, ? ? ? ?"Image": "sha256:e445ab08b2be8b178655b714f89e5db9504f67defd5c7408a00bade679a50d44", ? ? ? ?"ResolvConfPath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/resolv.conf", ? ? ? ?"HostnamePath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hostname", ? ? ? ?"HostsPath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hosts", ? ? ? ?"LogPath": "", ? ? ? ?"Name": "/mynginx", ? ? ? ?"RestartCount": 0, ? ? ? ?"Driver": "overlay2", ? ? ? ?"MountLabel": "", ? ? ? ?"ProcessLabel": "", ? ? ? ?"AppArmorProfile": "", ? ? ? ?"ExecIDs": null, ? ? ? ?"HostConfig": { ? ? ? ? ? ?"Binds": null, ? ? ? ? ? ?"ContainerIDFile": "", ? ? ? ? ? ?"LogConfig": { ? ? ? ? ? ? ? ?"Type": "journald", ? ? ? ? ? ? ? ?"Config": {} ? ? ? ? ? ?}, ? ? ? ? ? ?"NetworkMode": "default", ? ? ? ? ? ?"PortBindings": {}, ? ? ? ? ? ?"RestartPolicy": { ? ? ? ? ? ? ? ?"Name": "no", ? ? ? ? ? ? ? ?"MaximumRetryCount": 0 ? ? ? ? ? ?}, ? ? ? ? ? ?"AutoRemove": false, ? ? ? ? ? ?"VolumeDriver": "", ? ? ? ? ? ?"VolumesFrom": null, ? ? ? ? ? ?"CapAdd": null, ? ? ? ? ? ?"CapDrop": null, ? ? ? ? ? ?"Dns": [], ? ? ? ? ? ?"DnsOptions": [], ? ? ? ? ? ?"DnsSearch": [], ? ? ? ? ? ?"ExtraHosts": null, ? ? ? ? ? ?"GroupAdd": null, ? ? ? ? ? ?"IpcMode": "", ? ? ? ? ? ?"Cgroup": "", ? ? ? ? ? ?"Links": null, ? ? ? ? ? ?"OomScoreAdj": 0, ? ? ? ? ? ?"PidMode": "", ? ? ? ? ? ?"Privileged": false, ? ? ? ? ? ?"PublishAllPorts": false, ? ? ? ? ? ?"ReadonlyRootfs": false, ? ? ? ? ? ?"SecurityOpt": null, ? ? ? ? ? ?"UTSMode": "", ? ? ? ? ? ?"UsernsMode": "", ? ? ? ? ? ?"ShmSize": 67108864, ? ? ? ? ? ?"Runtime": "docker-runc", ? ? ? ? ? ?"ConsoleSize": [ ? ? ? ? ? ? ? ?0, ? ? ? ? ? ? ? ?0 ? ? ? ? ? ?], ? ? ? ? ? ?"Isolation": "", ? ? ? ? ? ?"CpuShares": 0, ? ? ? ? ? ?"Memory": 0, ? ? ? ? ? ?"NanoCpus": 0, ? ? ? ? ? ?"CgroupParent": "", ? ? ? ? ? ?"BlkioWeight": 0, ? ? ? ? ? ?"BlkioWeightDevice": null, ? ? ? ? ? ?"BlkioDeviceReadBps": null, ? ? ? ? ? ?"BlkioDeviceWriteBps": null, ? ? ? ? ? ?"BlkioDeviceReadIOps": null, ? ? ? ? ? ?"BlkioDeviceWriteIOps": null, ? ? ? ? ? ?"CpuPeriod": 0, ? ? ? ? ? ?"CpuQuota": 0, ? ? ? ? ? ?"CpuRealtimePeriod": 0, ? ? ? ? ? ?"CpuRealtimeRuntime": 0, ? ? ? ? ? ?"CpusetCpus": "", ? ? ? ? ? ?"CpusetMems": "", ? ? ? ? ? ?"Devices": [], ? ? ? ? ? ?"DiskQuota": 0, ? ? ? ? ? ?"KernelMemory": 0, ? ? ? ? ? ?"MemoryReservation": 0, ? ? ? ? ? ?"MemorySwap": 0, ? ? ? ? ? ?"MemorySwappiness": -1, ? ? ? ? ? ?"OomKillDisable": false, ? ? ? ? ? ?"PidsLimit": 0, ? ? ? ? ? ?"Ulimits": null, ? ? ? ? ? ?"CpuCount": 0, ? ? ? ? ? ?"CpuPercent": 0, ? ? ? ? ? ?"IOMaximumIOps": 0, ? ? ? ? ? ?"IOMaximumBandwidth": 0 ? ? ? ?}, ? ? ? ?"GraphDriver": { ? ? ? ? ? ?"Name": "overlay2", ? ? ? ? ? ?"Data": { ? ? ? ? ? ? ? ?"LowerDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a-init/diff:/var/lib/docker/overlay2/d8e95505fc3894eb30b48e4b0f48ab5e89d99c09a07c79c0b057c611621e31eb/diff:/var/lib/docker/overlay2/b2a6a25974bf17398b698a27208711574be3c69a2cd06658bbe838359f373a27/diff:/var/lib/docker/overlay2/d4610bc89b3ba8ad6ab30ea895fc3a06efff15db493d86ac9bc100e04abbab67/diff", ? ? ? ? ? ? ? ?"MergedDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/merged", ? ? ? ? ? ? ? ?"UpperDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/diff", ? ? ? ? ? ? ? ?"WorkDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/work" ? ? ? ? ? ?} ? ? ? ?}, ? ? ? ?"Mounts": [], ? ? ? ?"Config": { ? ? ? ? ? ?"Hostname": "6fc2d091cfe9", ? ? ? ? ? ?"Domainname": "", ? ? ? ? ? ?"User": "", ? ? ? ? ? ?"AttachStdin": false, ? ? ? ? ? ?"AttachStdout": false, ? ? ? ? ? ?"AttachStderr": false, ? ? ? ? ? ?"ExposedPorts": { ? ? ? ? ? ? ? ?"80/tcp": {} ? ? ? ? ? ?}, ? ? ? ? ? ?"Tty": true, ? ? ? ? ? ?"OpenStdin": true, ? ? ? ? ? ?"StdinOnce": false, ? ? ? ? ? ?"Env": [ ? ? ? ? ? ? ? ?"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", ? ? ? ? ? ? ? ?"NGINX_VERSION=1.17.2", ? ? ? ? ? ? ? ?"NJS_VERSION=0.3.3", ? ? ? ? ? ? ? ?"PKG_RELEASE=1~buster" ? ? ? ? ? ?], ? ? ? ? ? ?"Cmd": [ ? ? ? ? ? ? ? ?"nginx", ? ? ? ? ? ? ? ?"-g", ? ? ? ? ? ? ? ?"daemon off;" ? ? ? ? ? ?], ? ? ? ? ? ?"ArgsEscaped": true, ? ? ? ? ? ?"Image": "nginx", ? ? ? ? ? ?"Volumes": null, ? ? ? ? ? ?"WorkingDir": "", ? ? ? ? ? ?"Entrypoint": null, ? ? ? ? ? ?"OnBuild": null, ? ? ? ? ? ?"Labels": { ? ? ? ? ? ? ? ?"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>" ? ? ? ? ? ?}, ? ? ? ? ? ?"StopSignal": "SIGTERM" ? ? ? ?}, ? ? ? ?"NetworkSettings": { ? ? ? ? ? ?"Bridge": "", ? ? ? ? ? ?"SandboxID": "3ece36008fbc5f3f46d3d251cf803c1478cc14032d74a36747e4ed8a115b81df", ? ? ? ? ? ?"HairpinMode": false, ? ? ? ? ? ?"LinkLocalIPv6Address": "", ? ? ? ? ? ?"LinkLocalIPv6PrefixLen": 0, ? ? ? ? ? ?"Ports": { ? ? ? ? ? ? ? ?"80/tcp": null ? ? ? ? ? ?}, ? ? ? ? ? ?"SandboxKey": "/var/run/docker/netns/3ece36008fbc", ? ? ? ? ? ?"SecondaryIPAddresses": null, ? ? ? ? ? ?"SecondaryIPv6Addresses": null, ? ? ? ? ? ?"EndpointID": "898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac", ? ? ? ? ? ?"Gateway": "172.17.0.1", ? ? ? ? ? ?"GlobalIPv6Address": "", ? ? ? ? ? ?"GlobalIPv6PrefixLen": 0, ? ? ? ? ? ?"IPAddress": "172.17.0.3", ?      #看到ip地址 ? ? ? ? ? ?"IPPrefixLen": 16, ? ? ? ? ? ?"IPv6Gateway": "", ? ? ? ? ? ?"MacAddress": "02:42:ac:11:00:03", ? ? ? ? ? ?"Networks": { ? ? ? ? ? ? ? ?"bridge": { ? ? ? ? ? ? ? ? ? ?"IPAMConfig": null, ? ? ? ? ? ? ? ? ? ?"Links": null, ? ? ? ? ? ? ? ? ? ?"Aliases": null, ? ? ? ? ? ? ? ? ? ?"NetworkID": "2edae9131e77500a56d251b94ab2cdf0bc86f8df9f2453fa46bf4bab2f7be99f", ? ? ? ? ? ? ? ? ? ?"EndpointID": "898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac", ? ? ? ? ? ? ? ? ? ?"Gateway": "172.17.0.1", ? ? ? ? ? ? ? ? ? ?"IPAddress": "172.17.0.3", ? ? ? ? ? ? ? ? ? ?"IPPrefixLen": 16, ? ? ? ? ? ? ? ? ? ?"IPv6Gateway": "", ? ? ? ? ? ? ? ? ? ?"GlobalIPv6Address": "", ? ? ? ? ? ? ? ? ? ?"GlobalIPv6PrefixLen": 0, ? ? ? ? ? ? ? ? ? ?"MacAddress": "02:42:ac:11:00:03" ? ? ? ? ? ? ? ?} ? ? ? ? ? ?} ? ? ? ?} ? ?}][root@web1 overlay2]# curl 172.17.0.1      #訪問一下<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> ? ?<head> ? ? ? ?<title>Test Page for the Nginx HTTP Server on Fedora</title> ? ? ? ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ? ? ? ?<style type="text/css"> ? ? ? ? ? ?/*<![CDATA[*/ ? ? ? ? ? ?body { ? ? ? ? ? ? ? ?background-color: #fff; ? ? ? ? ? ? ? ?color: #000; ? ? ? ? ? ? ? ?font-size: 0.9em; ? ? ? ? ? ? ? ?font-family: sans-serif,helvetica; ? ? ? ? ? ? ? ?margin: 0; ? ? ? ? ? ? ? ?padding: 0; ? ? ? ? ? ?} ? ? ? ? ? ?:link { ? ? ? ? ? ? ? ?color: #c00; ? ? ? ? ? ?} ? ? ? ? ? ?:visited { ? ? ? ? ? ? ? ?color: #c00; ? ? ? ? ? ?} ? ? ? ? ? ?a:hover { ? ? ? ? ? ? ? ?color: #f50; ? ? ? ? ? ?} ? ? ? ? ? ?h1 { ? ? ? ? ? ? ? ?text-align: center; ? ? ? ? ? ? ? ?margin: 0; ? ? ? ? ? ? ? ?padding: 0.6em 2em 0.4em; ? ? ? ? ? ? ? ?background-color: #294172; ? ? ? ? ? ? ? ?color: #fff; ? ? ? ? ? ? ? ?font-weight: normal; ? ? ? ? ? ? ? ?font-size: 1.75em; ? ? ? ? ? ? ? ?border-bottom: 2px solid #000; ? ? ? ? ? ?} ? ? ? ? ? ?h1 strong { ? ? ? ? ? ? ? ?font-weight: bold; ? ? ? ? ? ? ? ?font-size: 1.5em; ? ? ? ? ? ?} ? ? ? ? ? ?h2 { ? ? ? ? ? ? ? ?text-align: center; ? ? ? ? ? ? ? ?background-color: #3C6EB4; ? ? ? ? ? ? ? ?font-size: 1.1em; ? ? ? ? ? ? ? ?font-weight: bold; ? ? ? ? ? ? ? ?color: #fff; ? ? ? ? ? ? ? ?margin: 0; ? ? ? ? ? ? ? ?padding: 0.5em; ? ? ? ? ? ? ? ?border-bottom: 2px solid #294172; ? ? ? ? ? ?} ? ? ? ? ? ?hr { ? ? ? ? ? ? ? ?display: none; ? ? ? ? ? ?} ? ? ? ? ? ?.content { ? ? ? ? ? ? ? ?padding: 1em 5em; ? ? ? ? ? ?} ? ? ? ? ? ?.alert { ? ? ? ? ? ? ? ?border: 2px solid #000; ? ? ? ? ? ?} ? ? ? ? ? ?img { ? ? ? ? ? ? ? ?border: 2px solid #fff; ? ? ? ? ? ? ? ?padding: 2px; ? ? ? ? ? ? ? ?margin: 2px; ? ? ? ? ? ?} ? ? ? ? ? ?a:hover img { ? ? ? ? ? ? ? ?border: 2px solid #294172; ? ? ? ? ? ?} ? ? ? ? ? ?.logos { ? ? ? ? ? ? ? ?margin: 1em; ? ? ? ? ? ? ? ?text-align: center; ? ? ? ? ? ?} ? ? ? ? ? ?/*]]>*/ ? ? ? ?</style> ? ?</head> ? ?<body> ? ? ? ?<h1>Welcome to <strong>nginx</strong> on Fedora!</h1> ? ? ? ?<div> ? ? ? ? ? ?<p>This page is used to test the proper operation of the ? ? ? ? ? ?<strong>nginx</strong> HTTP server after it has been ? ? ? ? ? ?installed. If you can read this page, it means that the ? ? ? ? ? ?web server installed at this site is working ? ? ? ? ? ?properly.</p> ? ? ? ? ? ?<div> ? ? ? ? ? ? ? ?<h2>Website Administrator</h2> ? ? ? ? ? ? ? ?<div> ? ? ? ? ? ? ? ? ? ?<p>This is the default <tt>index.html</tt> page that ? ? ? ? ? ? ? ? ? ?is distributed with <strong>nginx</strong> on ? ? ? ? ? ? ? ? ? ?Fedora. ?It is located in ? ? ? ? ? ? ? ? ? ?<tt>/usr/share/nginx/html</tt>.</p> ? ? ? ? ? ? ? ? ? ?<p>You should now put your content in a location of ? ? ? ? ? ? ? ? ? ?your choice and edit the <tt>root</tt> configuration ? ? ? ? ? ? ? ? ? ?directive in the <strong>nginx</strong> ? ? ? ? ? ? ? ? ? ?configuration file ? ? ? ? ? ? ? ? ? ?<tt>/etc/nginx/nginx.conf</tt>.</p> ? ? ? ? ? ? ? ?</div> ? ? ? ? ? ?</div> ? ? ? ? ? ?<div> ? ? ? ? ? ? ? ?<a href="http://nginx.net/"><img ? ? ? ? ? ? ? ? ? ?src="nginx-logo.png" ? ? ? ? ? ? ? ? ? ?alt="[ Powered by nginx ]" ? ? ? ? ? ? ? ? ? ?width="121" height="32" /></a> ? ? ? ? ? ? ? ?<a href="http://fedoraproject.org/"><img ? ? ? ? ? ? ? ? ? ?src="poweredby.png" ? ? ? ? ? ? ? ? ? ?alt="[ Powered by Fedora ]" ? ? ? ? ? ? ? ? ? ?width="88" height="31" /></a> ? ? ? ? ? ?</div> ? ? ? ?</div> ? ?</body></html>[root@web1 overlay2]#

?

14、查看日志

?

?

-f? 掛起這個終端,動態查看日志

?

 
 

[root@web1 ~]# docker logs ?-f mynginx

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535430.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

獲取Linux內存、cpu、磁盤IO等信息

#!/bin/bash # 獲取要監控的本地服務器IP地址 IPifconfig | grep inet | grep -vE inet6|127.0.0.1 | awk {print $2} echo "IP地址&#xff1a;"$IP# 獲取cpu總核數 cpu_numgrep -c "model name" /proc/cpuinfo echo "cpu總核數&#xff1a;"$c…

Docker容器網絡解析

Docker 容器網絡的發展歷史 在 Dokcer 發布之初&#xff0c;Docker 是將網絡、管理、安全等集成在一起的&#xff0c;其中網絡模塊可以為容器提供橋接網絡、主機網絡等簡單的網絡功能。 從 1.7 版本開始&#xff0c;Docker正是把網絡和存儲這兩部分的功能都以插件化形式剝離出來…

將指定excel的一列數據提取到另一個excel的指定列

#!/usr/bin/env python import openpyxl bjD:/地市縣公司/西藏臺賬數據分析-設備臺帳分析.xlsx wb openpyxl.load_workbook (bj) get_sheets wb.sheetnames #print(get_sheets) TA01TA01 TA02TA02 TA03TA03 TE01TE01 YG201YG201 YG202YG202 YG203YG203 YG204YG204 YG205YG205…

Docker 數據管理介紹

默認容器的數據是保存在容器的可讀寫層&#xff0c;當容器被刪除時其上的數據也會丟失&#xff0c;所以為了實現數據的持久性則需要選擇一種數據持久技術來保存數據。官方提供了三種存儲方式&#xff1a;Volumes、Bind mounts和tmpfs。前面還介紹了&#xff1a;Docker 服務終端…

Docker 數據持久化的三種方案

容器中的數據可以存儲在容器層。但是將數據存放在容器層存在以下問題&#xff1a; 數據不是持久化。意思是如果容器刪除了&#xff0c;這些數據也就沒了 主機上的其它進程不方便訪問這些數據 對這些數據的I/O會經過存儲驅動&#xff0c;然后到達主機&#xff0c;引入了一層間…

Git 存儲原理及相關實現

Git 是目前最流行的版本控制系統&#xff0c;從本地開發到生產部署&#xff0c;我們每天都在使用 Git 進行我們的版本控制&#xff0c;除了日常使用的命令之外&#xff0c;如果想要對 Git 有更深一步的了解&#xff0c;那么研究下 Git 的底層存儲原理將會對理解 Git 及其使用非…

Git內部原理

Git有什么特點&#xff1f; fast&#xff0c;scalable&#xff0c;distributed revision control system&#xff08;快速&#xff0c;可擴展的分布式版本控制系統&#xff09; 幾乎所有操作都是本地執行 每一個clone都是整個生命周期的完整副本 the stupid content tracker&a…

git存儲原理

四種數據類型 實際上Git基于數據類型的不同&#xff0c;把對象分為四種&#xff1a;數據對象、樹對象、提交對象、標簽對象。Git文件系統的設計思路與linux文件系統相似&#xff0c;即將文件的內容與文件的屬性分開存儲&#xff0c;文件內容以“裝滿字節的袋子”存儲在文件系統…

詳解設計模式:中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;也被稱為調停者模式&#xff0c;是在 GoF 23 種設計模式中定義了的行為型模式。 中介者模式 是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類&#xff0c;該類通常處理不同類之間的通信&#xff0c;并支…

rebase參數以及注意事項

可以根據需要將pick參數&#xff0c;改變為下面代表不同作用的參數&#xff1b;這樣就可以對節點C和D進行不同的操作了。比如&#xff1a; pick&#xff1a;默認參數&#xff0c;表示不對提交節點進行任何操作&#xff0c;直接應用原提交節點。不創建新提交&#xff1b; rewor…

RPC 服務 與 HTTP 服務的區別

1、什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;—遠程過程調用&#xff0c;它是一種通過網絡從遠程計算機程序上請求服務&#xff0c;而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在&#xff0c;如TCP或UDP&#xff0c;為通信程序之間攜帶信…

Docker 網絡命名空間

Docker 用戶可以通過與 CNM 的 Object 以及 API 的交互來管理對應容器的網絡&#xff0c;下面是一個典型的容器網絡生命周期&#xff1a; 1、Driver要向NetworkController注冊。內置的Driver在Libnetwork內注冊&#xff0c;遠程的Driver則通過Plugin mechanism注冊。每一個Driv…

緩存雪崩、擊穿、穿透解決方案

用戶的數據一般都是存儲于數據庫&#xff0c;數據庫的數據是落在磁盤上的&#xff0c;磁盤的讀寫速度可以說是計算機里最慢的硬件了。 當用戶的請求&#xff0c;都訪問數據庫的話&#xff0c;請求數量一上來&#xff0c;數據庫很容易就奔潰的了&#xff0c;所以為了避免用戶直…

Ansible中的playbook詳解

首先簡單說明一下playbook&#xff0c;playbook是什么呢&#xff1f; 根本上說playbook和shell腳本沒有任何的區別&#xff0c;playbook就像shell一樣&#xff0c;也是把一堆的命令組合起來&#xff0c;然后加入對應條件判斷等等&#xff0c;在shell腳本中是一條一條的命令&am…

【Docker】容器鏡像有哪些特性

首先解釋一下什么是Docker鏡像&#xff1f; Docker鏡像它其實是一個模板&#xff0c;擁有這個模板我們才能創建我們的Docker容器&#xff0c;鏡像里含有啟動 docker 容器所需的文件系統結構及其內容&#xff0c;因此是啟動一個 docker 容器的基礎。docker 鏡像的文件內容以及一…

nginx中的location指令

1、location 介紹 location是Nginx中的塊級指令(block directive)&#xff0c;location指令的功能是用來匹配不同的url請求&#xff0c;進而對請求做不同的處理和響應&#xff0c;這其中較難理解的是多個location的匹配順序&#xff0c;本文會作為重點來解釋和說明。 開始之前…

容器底層實現技術Namespace/Cgroup

Docker容器實現原理 Docker容器在實現上是通過namespace技術來進行進程隔離&#xff0c;通過cgroup技術實現容器進程可用資源的限制&#xff0c;當docker啟動一個容器時&#xff0c;實際是創建了多了namespace參數的進程。 Namespace Namespace&#xff1a;命名空間 作用&#…

身體原因 斷更一周

由于眾所周知的原因&#xff0c;博主最近具有發熱、全身乏力、酸痛、干咳等癥狀&#xff0c;已嚴重影響日常的工作學習和博客編寫&#xff0c;所以斷更我將一周&#xff0c;由下周三&#xff08;即2022年12月21日&#xff09;恢復更新 更多往期內容可以參考&#xff1a;全網最…

異方差與多重共線性對回歸問題的影響

異方差的檢驗 1.異方差的畫圖觀察 2.異方差的假設檢驗&#xff0c;假設檢驗有兩種&#xff0c;一般用懷特檢驗使用方法在ppt中&#xff0c;課程中也有實驗&#xff0c;是一段代碼。 異方差的解決辦法 多重共線性 多重共線性可能帶來的影響&#xff1a; 多重共線性的檢驗 多重…

如何修改Docker的鏡像源

改或新增/etc/docker/daemon.json 文件 vi/etc/docker/daemon.json 添加需要修改的國內鏡像源鏡像源 { "registry-mirrors":["http://hub-mirror.c.163.com"] } 重啟Docker服務 Systemctl restart docker.service 方法二 修改或新增 /etc/sysconfig…