什麼是Docker容器?(全面了解使用)

  • 2022 年 5 月 15 日
  • 筆記

一:為什麼需要Docker容器?

1.引入

1.1麻煩的環境部署

1.在軟體開發中,最麻煩的事情之一就是環境配置。在正常情況下,如果要保證程式能運行,我們需要設置好作業系統,以及各種庫和組件的安裝。

2.舉例來說,要運行一個Python程式,電腦必須要有 Python 引擎,還需要安裝好程式的各種依賴,甚至還要配置特定的環境變數。假設你有兩個程式都需要部署在同一個伺服器上,一個需要軟體是基於Python2.0,一個是Python3.0,那麼在部署上就很容易造成混亂。因為不同版本的Python模組可能互不兼容,況且不同開發環境上的庫也需要額外的配置。如果要部署很多程式,而開發環境和部署環境各不相同的話,可想而知配置得多麼麻煩。

3.為了更好地將軟體從一個環境移植到另一個環境上,必須從根源上解決問題,那麼如何在移植軟體的時候,將一模一樣的原始環境遷移過來呢?

1.2虛擬機(Virtual Machine)

虛擬機是移植環境的一種解決方案。虛擬機本質上也是一個軟體,在這個軟體中,我們可以運行另一種作業系統。比如我們想要在 MacOS 上運行 Linux 系統,我們就在電腦上安裝 Linux 鏡像,並使用虛擬機打開此鏡像,就能創建出一個鏡中鏡了。這個方案非常方便,想要新環境,就安裝鏡像,然後使用虛擬機打開,不想要直接刪除。但是這個方案有幾個缺點:
  1. 佔用資源多:虛擬機需要安裝整個作業系統,自然會消耗大量記憶體和硬碟空間。如我們只需要運行1MB的軟體,有時候也不得不安裝幾個G的環境才能運行。
  2. 運行步驟冗餘:虛擬機安裝的是完整的系統,每次運行程式都需要按部就班,打開系統、登入用戶等等之類麻煩的步驟,很不方便。
  3. 運行速度慢:為了運行特定環境中的軟體,虛擬機必須先運行系統,而系統佔用的資源往往很多(網路,GUI,IO等等),自然也會影響運行速度。

1.3Linux容器(Container)

為了解決虛擬機存在的這些缺點,Linux發展出了另一種虛擬化的技術:Linux容器。Linux 容器不是模擬一個完整的作業系統,而是對進程進行隔離。或者說,就是在正常進程的外面套用了一個保護層。對於容器裡面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層程式的隔離。由於容器是進程級別的,相比虛擬機有更多優勢:

  1. 佔有資源少:容器只佔用需要的資源,不佔用那些用不到的資源。相比於虛擬機安裝完整的作業系統,容器需要消耗的空間自然就少了很多。
  2. 資源利用率高:虛擬機都是獨享資源,電腦需要為每個虛擬環境單獨分配資源,不僅僅佔用空間大,而且資源的利用率很低。而容器之間可以共享資源,最大化資源的利用率。
  3. 運行速度快:容器裡面的應用就是底層系統的一個進程,所以啟動容器相當於直接運行本機的一個進程,而不是一個完整並臃腫的作業系統,自然就快很多。

preview

二:Docker是什麼?

1.Docker簡介

Docker屬於Linux容器的一種封裝,提供簡單易用的容器使用介面,它也是目前最流行的Linux容器解決方案。Docker 將軟體程式碼和其依賴,全打包在一個文件中。運行單個文件,就會生成虛擬容器。在這個虛擬容器中,不管本地的作業系統是如何的不同,此容器都能照常運行。

簡而言之,Docker的介面非常簡單,可以幫助用戶更好地創建和使用容器,讓相同的程式碼在不同的環境上正常運行。

2.Docker的用途

Docker目前主要有以下三個用途:

  1. 提供一次性的環境:本地測試別人的軟體、持續集成的時候提供單元測試和構建的環境。
  2. 提供彈性的雲服務:因為Docker容器可以隨時啟動或關閉,所以非常適合動態規劃和縮容。
  3. 組建微服務構架:通過多個容器,服務的部署能更加靈活,幫助實現微服務構架。
  4. 不需要虛擬硬體和作業系統,輕量級,佔用體積小,啟動快

3.Docker容器 VS VM

Docker容器和傳統VM技術,在技術實現上有所不同。下圖顯示的是VM與Docker容器的邏輯組成:

  • VM:使用Hypervisor提供虛擬機的運行平台,管理每個VM中作業系統的運行。每個VM都要有自己的作業系統、應用程式和必要的依賴文件等。
  • Docker容器:使用Docker引擎進行調度和隔離,提高了資源利用率,在相同硬體能力下可以運行更多的容器實例;每個容器擁有自己的隔離化用戶空間。

虛擬機與Docker容器對比

img

Server:相當於雲伺服器
Host OS:為作業系統
Docker Engine:可以認為我們在這個作業系統上安裝了一個docker的軟體
App A:在Docker組件中運行App A
App B:在Docker組件中運行App B 
# 所以docker完全沒有作業系統的概念,用的還是宿主機的作業系統,但是它做出了隔離。也實現了虛擬化。

虛擬機與Docker容器對比

Docker容器與傳統VM的區對比

三:Docker容器是如何工作的?

1.Docker的三大組成要素:

  • 鏡像:Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的配置參數。 鏡像不包含任何動態數據,其內容在構建之後也不會被改變。鏡像可以用來創建Docker容器,用戶可以使用設備上已有的鏡像來安裝多個相同的Docker容器。
  • 容器:鏡像創建的運行實例,Docker利用容器來運行應用。每個容器都是相互隔離的、保證安全的平台。我們可以把容器看做是一個輕量級的Linux運行環境。
  • 鏡像倉庫:集中存放鏡像文件的地方。用戶創建完鏡像後,可以將其上傳到公共倉庫或者私有倉庫,需要在另一台主機上使用該鏡像時,只需要從倉庫上下載即可。

Docker容器的運行邏輯如下圖所示,Docker使用客戶端/伺服器 (C/S) 架構模式,Docker守護進程(Docker daemon)作為Server端接收Docker客戶端的請求,並負責創建、運行和分發Docker容器。Docker守護進程一般在Docker主機後台運行,用戶使用Docker客戶端直接跟Docker守護進程進行資訊交互。

Docker運行流程

2.Docker運行流程

其中:

  • Docker客戶端:用於和Docker守護進程(Docker Daemon)建立通訊的客戶端。Docker客戶端只需要向Docker伺服器或者守護進程發出請求(Docker構建、Docker拉取和Docker啟動等指令),伺服器或者守護進程將完成所有工作並返回結果。
    • 如橙色流程所示,執行Docker構建指令會根據Docker文件構建一個鏡像存放於本地Docker主機。
    • 如藍色流程所示,執行Docker拉取指令會從雲端鏡像倉庫拉取鏡像至本地Docker主機或將本地鏡像推送至遠端鏡像倉庫。
    • 如黑色流程所示,執行Docker啟動指令會將鏡像安裝至容器並啟動容器。
  • Docker主機:一個物理或者虛擬的機器用於執行 Docker守護進程和容器。
  • Docker守護進程:接收並處理Docker客戶端發送的請求,監測Docker API的請求和管理Docker對象,比如鏡像、容器、網路和數據卷。

4.Docker伺服器與客戶端

Docker是一個客戶端-服務端(C/S)架構程式,Docker客戶端只需要向Docker伺服器或者守護進程發送請求即可,伺服器或者守護進程將完成所有工作並返回結果,Docker提供了一個命令行工具以及一正太Restful Api,我們可以在同一台宿主機上運行Docker守護進程和客戶端,也可以從本地Docker客戶端連接運行在另外一台宿主機的Docker的守護進程。

image-20220507205600123

# 使用了RESTful API的目的就是為了統一規範,無需自己在生成一套體系。現在幾乎所有的軟體都是通過RESTful API來傳輸數據。

5.docker非常重要的概念:鏡像(image)與容器(container)

1.有了鏡像---》鏡像運行起來是容器(真正的執行單位)
鏡像		: 面向對象的類    
容器		: 對象
    
2. 鏡像是從哪裡來的?    
-鏡像就是一堆文件
-從遠程倉庫獲取(拉取)

四:docker架構圖

Docker是一個客戶端-伺服器(C/S)架構程式(mysql,redis都是cs架構),整套RESTful API

1598927543254

  • Docker客戶端(Docker Client)

•Docker客戶端(Docker Client)是用戶與Docker進行交互的最主要方式。當在終端輸入docker命令時,對應的就會在服務端產生對應的作用,並把結果返回給客戶端。Docker Client除了連接本地服務端,通過更改或指定DOCKER_HOST連接遠程服務端。

  • Docker服務端(Docker Server)

•Docker Daemon其實就是Docker 的服務端。它負責監聽Docker API請求(如Docker Client)並管理Docker對象(Docker Objects),如鏡像、容器、網路、數據卷等

  • Docker Registries

•俗稱Docker倉庫,專門用於存儲鏡像的雲服務環境.

•Docker Hub就是一個公有的存放鏡像的地方,類似Github存儲程式碼文件。同樣的也可以類似Github那樣搭建私有的倉庫。

  • Docker 對象(Docker Objects)

•鏡像:一個Docker的可執行文件,其中包括運行應用程式所需的所有程式碼內容、依賴庫、環境變數和配置文件等。

•容器:鏡像被運行起來後的實例。

•網路:外部或者容器間如何互相訪問的網路方式,如host模式、bridge模式。

•數據卷:容器與宿主機之間、容器與容器之間共享存儲方式,類似虛擬機與主機之間的共享文件目錄。

docker pull :  拉取鏡像(從遠程倉庫中獲取放到Images)
docker run  :  運行鏡像(運行鏡像後就會放到容器里)
docker container :  查看運行了那些鏡像(容器)
docker image :  查看有那些鏡像 
docker network :  查看網路
docker valume :  查看數據表等
    - 數據表等建議放到宿主機上,因為如果一旦容器刪除了,在容器上的數據表就沒有了。

docker 三大要素:鏡像(image)、容器(container)、倉庫(repository)

1.鏡像:就是一個只讀的模板,鏡像可以用來創建docker容器,一個鏡像可以創建很多容器

2.容器:用鏡像創建的實例,可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。可以把容器看做是一個簡易版的Linux環境(包括root用戶許可權、進程空間、網路空間等)和運行在其中的應用程式。容器與鏡像的關係類似於面向對象編程中的類和對象,鏡像好比是類,那麼容器則是對象

3.倉庫是集中存放鏡像文件的場所。倉庫(repository)和倉庫註冊伺服器(Registry)是有區別的。倉庫註冊伺服器上往往存放多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。倉庫又分為公開倉庫(public)和私有倉庫(private)兩種形式。最大的倉庫是DockerHub (//hub.docker.com),存放了數量龐大的鏡像供用戶下載。中國的公有倉庫包括阿里雲、網易雲等。

 
docker本身就是一個容器運行載體或稱之為管理引擎。我們把應用程式和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就似乎image鏡像文件。只有通過鏡像文件才能生成docker容器。image文件可以看做是容器的模板。docker根據image文件生成容器實例。同一個image文件,可以生成多個可以同時運行的容器實例。

image文件 生成的容器實例,本身也是一個文件,稱為鏡像文件
一個容器運行一種服務,當我們需要的時候,就可以通過docker客戶端創建一個對應的運行實例,也就是我們的容器。
倉庫就是放了一堆鏡像的地方,我們可以把鏡像發布到倉庫中,需要的時候從倉庫中拉下來就可以

五:docker安裝

1 windows安裝

1 windows安裝(不建議你裝)//get.daocloud.io/

2.烏班圖安裝:

# 0 卸載
sudo apt-get remove docker docker-engine docker.io containerd runc
# 1 安裝必要工具
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 2 安裝GPG證書
curl -fsSL //download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#換成阿里雲
curl -fsSL //mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 2 寫入軟體源資訊
#官方
sudo add-apt-repository "deb [arch=amd64] //download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#換成阿里雲
sudo add-apt-repository "deb [arch=amd64] //mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 3 更新並安裝docker-ce
sudo apt-get -y install docker-ce
# 4 開啟docker服務
systemctl status docker

# 安裝成功後,使用 docker version查看

如果出現許可權禁止,需要切換到root用戶執行

    su
    輸入密碼
    docker version

3.cent os安裝:(條件7.0以上版本)

0 卸載(如果沒有安裝過無需卸載)
yum remove docker docker-common  docker-selinux docker-engine
rm -rf /var/lib/docker

1 更新yum
yum update

2 安裝需要的軟體包:yum-util (會生成該命令yum-config-manager)
命令:yum install -y yum-utils device-mapper-persistent-data lvm2

3 執行(向你的yum源,增加一條記錄)
yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
4 安裝 
yum install docker-ce

5 驗證安裝(查看版本)
docker -v  
~]# docker -v  (19年03月12日發布)
# 自從分了docker-ce和docker-ee以後,以年份命名版本
Docker version 19.03.12, build 48a66213fe

注意:自從區分docker-ce和docker-ee之後,docker最初始的版本是17.03,也就是17年發布的,所有17是老版本和新版本的分水嶺

image-20200328163029517

系統支援情況

image-20200328163106682

6 啟動docker服務
systemctl start docker

7 停止docker服務,重啟docker服務
systemctl stop docker
systemctl restart docker

8 開機啟動	
systemctl enable docker

9 查看概要資訊
docker info(你可能寫了一個管理docker的運維平台)

六:容器鏡像的基本操作

1.鏡像操作

下載鏡像:

# 遠程倉庫地址://hub.docker.com/
	- 註冊 登錄
    
# 你可以上傳鏡像(類似於github),你把你製作的鏡像傳上去,別人可以下載使用
# 搜索鏡像:
    方式一://hub.docker.com/    點點點搜索
	方式二:docker search 鏡像名字
    
# 後面有OK代表官方    

image-20220509130418840

# search作用:
	搜索Docker Hub(鏡像倉庫)上的鏡像
# 命令格式:
	docker search [OPTIONS] TERM
# 命令參數(OPTIONS):
	-f,  --filter filter   	根據提供的格式篩選結果
	     --format string   	利用Go語言的format格式化輸出結果
	     --limit int       	展示最大的結果數,默認25個
	     --no-trunc        	內容全部顯示
        
 #  命令演示
docker search -f is-offical=true ubuntu
docker search ubuntu

image-20220507215754877

# 拉取下載鏡像
docker pull hello-world  # 最新版本latest
docker pull hello-world:nanoserver  # 指定版本

image-20220507220136327

docker pull hello-world:版本號(默認最新,可以指定版本號)

image-20220509133812650

查看鏡像

# 查看機器上有哪些鏡像
# 命令:docker images
# 解釋:

REPOSITORY  TAG   IMAGE ID   CREATED   SIZE
鏡像名字    版本     id號     創建時間   大小

image-20220507220402100

運行鏡像

# 命令:
docker run 鏡像名字

docker run hello-world

# 例:
第一個hello-world(沒有任何意義)
	docker run hello-world
	1 客戶端連到服務端,服務下載了hello-world鏡像
    2 通過鏡像跑起容器來
    3 容器輸出一些東西,通過服務端發送給客戶端,客戶端展示在窗口裡了

刪除鏡像

# 命令:
docker rmi 鏡像名字/Id號

# 注意:
1.如果還有基於這個鏡像的容器,是不允許刪除鏡像的
2.可以先刪除容器,在刪除鏡像
	# 查詢容器依賴	
	docker ps -a
    # 在刪除要不允許的鏡像
    docker rm 容器/id

2.拉取python3.6鏡像,redis最新鏡像,mysql5.7鏡像,nginx鏡像

# 拉取python3.6鏡像,redis最新鏡像,mysql5.7鏡像
    docker pull python:3.8
    docker pull redis
    docker pull mysql:5.7
    docker pull nginx
    docker pull centos:centos7
     
# 查詢當前鏡像
	docker images

鏡像容器是可以看作:

鏡像容器是可以看作:
	-鏡像就是一堆文件,這堆文件通過docker跑起來,就是容器,你現在就把他當成,一個作業系統內跑了這個軟體(比如就是:centos+redis)
    -假設centos7的鏡像跑起來,此時容器你就當成在你宿主機上跑了一個centos7的作業系統(虛擬機)

七:容器操作

1 刪除容器
 docker rm 容器名字/容器id
    
2 啟動並運行容器
	# 通過centos:centos7鏡像,創建一個容器名字叫mycentos,並且把它運行起來
    docker run -di --name=mycentos centos:centos7
    # 結果:會列印出容器的id號

    
3 查看機器上正在運行的容器
	docker ps
    
4 查看宿主機上所有的容器(包括停止的)
	docker ps -a
    
5 停止容器
	docker stop 容器名字/id號
    
6 啟動容器
	docker start 容器id/名字   # id號只要能夠區分即可無需寫全部

八:補充:配置鏡像(提升加速)

# 配置加速(之前去//hub.docker.com/),阿里雲,清華,做了一個備份,配置好以後,再拉鏡像會去中國地址拉取
第一步:vi /etc/docker/daemon.json  
第二步:
# 指定清華源,提升拉取加速
{
"registry-mirrors": ["//docker.mirrors.ustc.edu.cn"]
}

九:容器的創建和啟動

虛擬機的生命周期

image-20200328220206803

容器的生命周期

image-20200328220217504

1.容器創建 – docker create

# 作用:
	利用鏡像創建出一個Created 狀態的待啟動容器
    
# 命令格式:
	docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    
# 命令參數(OPTIONS):查看更多
  -t, --tty           		分配一個偽TTY,也就是分配虛擬終端
  -i, --interactive    	即使沒有連接,也要保持STDIN打開
  --name          		為容器起名,如果沒有指定將會隨機產生一個名稱
    
# 命令參數(COMMAND\ARG):
	COMMAND 表示容器啟動後,需要在容器中執行的命令,如ps、ls 等命令
	ARG 表示執行 COMMAND 時需要提供的一些參數,如ps 命令的 aux、ls命令的-a等等
    
# 創建容器命令演示:
docker create --name test-container centos:centos7 ps -A
# 我們創建了一個容器,並指定在啟動容器的時候執行:docker ps -a
docker create -ti --name test-container2 centos /bin/bash 

2.容器啟動 – docker start

# 作用:
	將一個或多個處於創建狀態或關閉狀態的容器啟動起來
# 命令格式:
	docker start [OPTIONS] CONTAINER [CONTAINER...]
# 命令參數(OPTIONS):
	-a, --attach		將當前shell的 STDOUT/STDERR 連接到容器上
	-i, --interactive		將當前shell的 STDIN連接到容器上	
# 命令演示:
docker ps -a
docker start -a 65ebc
docker start test-container

3.重點(容器一直運行的原因)

# 容器一直運行的原因COMMAND
1.它有一條前台進程,一直在運行
2.以後如果自己製作的鏡像,運行起容器,必須有個可以夯住的命令COMMAND
3.如果COMMAND該命令結束,該容器也就結束了

image-20220509144507216

# 當我們在後台啟動的時候
1.比如:docker run -di --name=mycentos centos:centos7
2.這時他會自動啟動一個 /bin/bash窗口
3.因為我們並沒有關閉這個/bin/bash窗口,所以他會一直在後台運行  
4.我們在使用start或者直接run進入這個鏡像的時候,就相當於運行的這個命令:/bin/bash,就進入了這個bash窗口,相當於進入了容器(其實不是進入了容器,可以把他看作是xshell一個遠程連接,連接到這個容器。)這裡我們看作是進入到了這個容器,當我們使用exit退出的時候,就相當於關閉了/bin/bash這個窗口。所以容器一直會在後台運行的原因就是這個/bin/bash窗口一直在啟動這,沒有關閉它

4.容器創建並啟動 – docker run

# 創建並啟動(run)
# 參數:
    -i:表示運行容器
    -t:表示容器啟動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個偽終端。
    -d:在run後面加上-d參數,則會創建一個守護式容器在後台運行(這樣創建容器後不會自動登錄容器,如果只加-i -t兩個參數,創建後就會自動進去容器)。
    --name :為創建的容器命名。如果不寫,會自動分配一個名字(英文人名)
    -v:表示目錄映射關係(前者是宿主機目錄,後者是容器目錄,映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上。(下述單獨演示)
    -p:表示埠映射,前者是宿主機埠,後者是容器內的映射埠。可以使用多個-p做多個埠映射 (下述單獨演示)
    
# 例子:run
    docker run -it --name=myredis redis  # 這時就會啟動redis容器並進去redis容器  
    docker run -id --name=oursql mysql  # 這時就不會進入mysql容器,再後台運行
    
    
# 注意,docker run  鏡像 
使用該命令:如果本地沒有,會先pull,再run

5.進入容器內部和退出容器

5.1進入容器

# 方式1:
	1.查詢機器上運行的容器
	docker ps
    2.進入容器
	docker exec -it 容器id/bin/bash
    docker exec -it 427 /bin/bash
    
# 第二種:ssh連接(容器內部裝ssh服務端)(不常用)    

image-20220508154911862

#  exec真正的作用是在容器內執行命令,而不是真正的進入到容器內部
1.因為 /bin/bash這個命令,就相當於與這個容器建立了連接,所以我們可以和容器做交互,當我們關閉這個連接的時候,就會自動結束掉這個容器。

2.執行exec命令:
	docker exec -it 容器id ls  # 查詢根路徑所有文件

image-20220509160251690

# top 命令(容器內部執行查詢進程)

image-20220509160447117

# 容器內部是純凈的空間,安裝:vim 

image-20220509160529874

5.2退出容器

# 命令:exit
	1.如果是一個夯在哪裡得命令,則使用exit退出容器
    2.如果不是則會自動退出容器

6.(-it 進入容器退出) 與 (-id 進入容器退出)區別

# -it 進入容器退出(前台容器自動結束【後台停止運行】)
1.在我們使用 -it 參數直接進入該容器的時候,使用exit退出的時候這個容器就會自動結束。
	- 此時後台就沒有該運行中的容器。

# -id 進入容器退出(前台容器自動結束【後台正常運行】)    
2.如果使用 -id 後台運行容器的時候,使用 docker exec進入該容器,此時使用exit退出該容器的話,只是退出該容器,並沒有從後台結束該容器,該容器還會在後台運行這。

十:文件拷貝(宿主機和容器互相拷貝文件)

# 1.從宿主機拷貝到容器內部
	docker cp 宿主機文件 容器id:容器路徑
        
    docker cp /home/a.txt 427:/home      
# 2.從容器中拷貝到宿主機
	docker cp 容器id:容器路徑 宿主機路徑(起別名)
        
    docker cp 427:home/a.txt a.txt

image-20220509163741818

十一:目錄掛載(映射作用)

# 目錄掛載格式:
docker run -di --name=mycentos99 -v /宿主機要掛載目錄:/容器要掛載路徑 指定鏡像

docker run -di --name=mycentos99 -v /home:/home centos:centos7

# -v 	: 映射

# 掛載作用:
1.一旦掛載,以後宿主機目錄內修改,同樣影響容器內部
2.容器內修改同樣影響宿主機

image-20220509172926617

十二:埠映射

圖解:

image-20220509173207821

# 命令:	
	- 使用參數 -p 宿主機埠:容器埠
    - 例:docker run -it -p 6377:6379 redis   # 將宿主機得6377埠映射到容器redis6379埠上
# 演示:
# 創建容器
	- docker run -di -p 6377:6379 redis
# 進入容器
	- docker exec -it 27d /bin/bash
  	- 此時啟動的是redis服務端  
# 連接客戶端
	- redis-cli
# 在容器中操作redis
	- set name born

image-20220508172701112

# 此時我們使用遠程連接我們得宿主機雲伺服器的6377埠。

image-20220508172436104

image-20220508172859995

為什麼會後台啟動redis服務?
# 為什麼會後台啟動redis服務?
	1.我們在啟動redis容器的時候,他會自動運行一個腳本文件:docker-entrypoint.sh
    2.就像啟動cent os自動啟動一個/bin/bash窗口
    3.而redis啟動/bin/bash與之建立連接之後,會自動執行這個腳本文件

image-20220508173057283

# docker-entrypoint.sh 這個腳本的路徑:
	/usr/local/bin/docker-entrypoint.sh

image-20220508173327911

十三:查看容器ip地址

# 命令:
# 查看容器詳細資訊
	- docker inspect 容器id
# 只查看容器ip地址
	- docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱/容器ID

image-20220508175818913

# 其實宿主機與容器之間是通過網關進行通訊的
	- 查看網關
    	# 容器內下載該命令:
    	- 下載查看ip資訊的命令:yum install net-tools
        - ifconfig:查看網路相關資訊

image-20220508180936586

# 所以此時我們在連接redis的時候就有兩種方式
	- 第一種:
    	- 因為我們做了埠映射,所以我們可以通過:雲伺服器地址:6377連接
     - 第二種:
    	- 此時我們已經知道了容器的ip地址,所以就可以通過: 容器的ip地址:6379 (此時埠號就是它本身的6379因為是直接通過它本身的ip建立的連接)

image-20220509194515012

# 每個容器都有ip地址,每一個ip地址標誌著一台唯一伺服器,所以就實現了宿主與容器之間的隔離性,每一個容器就相當於一個虛擬機

十四:應用部署

# 在容器內部署mysql

# 容器內查詢env,環境變數密碼
docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
        
# -e		: 表示環境變數指定密碼   

# 進入容器
docker exec -it 749 /bin/bash

mysql

mysql -uroot -p 123456

show databases;

drop database lqz;

# 官方提供的
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
        
# 宿主部署容器內redis
docker run -di -p 6377:6379 redis:latest
        
# 宿主部署容器內nginx
docker run -di --name=mynginx -p 8080:80 nginx
    
    
# 我們都使用了 -p 參數做了埠映射,所以我們在訪問雲伺服器指定映射埠後,就訪問到部署好的容器,所以有了docker完全就需要在本地下載這些應用,直接使用docker pull拉下來使用即可

image-20220508183347990