什麼是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 鏡像,並使用虛擬機打開此鏡像,就能創建出一個鏡中鏡了。這個方案非常方便,想要新環境,就安裝鏡像,然後使用虛擬機打開,不想要直接刪除。但是這個方案有幾個缺點:
- 佔用資源多:虛擬機需要安裝整個作業系統,自然會消耗大量記憶體和硬碟空間。如我們只需要運行1MB的軟體,有時候也不得不安裝幾個G的環境才能運行。
- 運行步驟冗餘:虛擬機安裝的是完整的系統,每次運行程式都需要按部就班,打開系統、登入用戶等等之類麻煩的步驟,很不方便。
- 運行速度慢:為了運行特定環境中的軟體,虛擬機必須先運行系統,而系統佔用的資源往往很多(網路,GUI,IO等等),自然也會影響運行速度。
1.3Linux容器(Container)
為了解決虛擬機存在的這些缺點,Linux發展出了另一種虛擬化的技術:Linux容器。Linux 容器不是模擬一個完整的作業系統,而是對進程進行隔離。或者說,就是在正常進程的外面套用了一個保護層。對於容器裡面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層程式的隔離。由於容器是進程級別的,相比虛擬機有更多優勢:
- 佔有資源少:容器只佔用需要的資源,不佔用那些用不到的資源。相比於虛擬機安裝完整的作業系統,容器需要消耗的空間自然就少了很多。
- 資源利用率高:虛擬機都是獨享資源,電腦需要為每個虛擬環境單獨分配資源,不僅僅佔用空間大,而且資源的利用率很低。而容器之間可以共享資源,最大化資源的利用率。
- 運行速度快:容器裡面的應用就是底層系統的一個進程,所以啟動容器相當於直接運行本機的一個進程,而不是一個完整並臃腫的作業系統,自然就快很多。
二:Docker是什麼?
1.Docker簡介
Docker屬於Linux容器的一種封裝,提供簡單易用的容器使用介面,它也是目前最流行的Linux容器解決方案。Docker 將軟體程式碼和其依賴,全打包在一個文件中。運行單個文件,就會生成虛擬容器。在這個虛擬容器中,不管本地的作業系統是如何的不同,此容器都能照常運行。
簡而言之,Docker的介面非常簡單,可以幫助用戶更好地創建和使用容器,讓相同的程式碼在不同的環境上正常運行。
2.Docker的用途
Docker目前主要有以下三個用途:
- 提供一次性的環境:本地測試別人的軟體、持續集成的時候提供單元測試和構建的環境。
- 提供彈性的雲服務:因為Docker容器可以隨時啟動或關閉,所以非常適合動態規劃和縮容。
- 組建微服務構架:通過多個容器,服務的部署能更加靈活,幫助實現微服務構架。
- 不需要虛擬硬體和作業系統,輕量級,佔用體積小,啟動快
3.Docker容器 VS VM
Docker容器和傳統VM技術,在技術實現上有所不同。下圖顯示的是VM與Docker容器的邏輯組成:
- VM:使用Hypervisor提供虛擬機的運行平台,管理每個VM中作業系統的運行。每個VM都要有自己的作業系統、應用程式和必要的依賴文件等。
- Docker容器:使用Docker引擎進行調度和隔離,提高了資源利用率,在相同硬體能力下可以運行更多的容器實例;每個容器擁有自己的隔離化用戶空間。
Server:相當於雲伺服器
Host OS:為作業系統
Docker Engine:可以認為我們在這個作業系統上安裝了一個docker的軟體
App A:在Docker組件中運行App A
App B:在Docker組件中運行App B
# 所以docker完全沒有作業系統的概念,用的還是宿主機的作業系統,但是它做出了隔離。也實現了虛擬化。
虛擬機與Docker容器對比
三:Docker容器是如何工作的?
1.Docker的三大組成要素:
- 鏡像:Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的配置參數。 鏡像不包含任何動態數據,其內容在構建之後也不會被改變。鏡像可以用來創建Docker容器,用戶可以使用設備上已有的鏡像來安裝多個相同的Docker容器。
- 容器:鏡像創建的運行實例,Docker利用容器來運行應用。每個容器都是相互隔離的、保證安全的平台。我們可以把容器看做是一個輕量級的Linux運行環境。
- 鏡像倉庫:集中存放鏡像文件的地方。用戶創建完鏡像後,可以將其上傳到公共倉庫或者私有倉庫,需要在另一台主機上使用該鏡像時,只需要從倉庫上下載即可。
Docker容器的運行邏輯如下圖所示,Docker使用客戶端/伺服器 (C/S) 架構模式,Docker守護進程(Docker daemon)作為Server端接收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的守護進程。
# 使用了RESTful API的目的就是為了統一規範,無需自己在生成一套體系。現在幾乎所有的軟體都是通過RESTful API來傳輸數據。
5.docker非常重要的概念:鏡像(image)與容器(container)
1.有了鏡像---》鏡像運行起來是容器(真正的執行單位)
鏡像 : 面向對象的類
容器 : 對象
2. 鏡像是從哪裡來的?
-鏡像就是一堆文件
-從遠程倉庫獲取(拉取)
四:docker架構圖
Docker是一個客戶端-伺服器(C/S)架構程式(mysql,redis都是cs架構),整套RESTful API
- 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.烏班圖安裝:
- 系統要求:Ubuntu 14.04及其以上版本
- 查看官方源安裝教程
# 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是老版本和新版本的分水嶺
系統支援情況
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代表官方
# 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
# 拉取下載鏡像
docker pull hello-world # 最新版本latest
docker pull hello-world:nanoserver # 指定版本
docker pull hello-world:版本號(默認最新,可以指定版本號)
查看鏡像
# 查看機器上有哪些鏡像
# 命令:docker images
# 解釋:
REPOSITORY TAG IMAGE ID CREATED SIZE
鏡像名字 版本 id號 創建時間 大小
運行鏡像
# 命令:
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"]
}
九:容器的創建和啟動
虛擬機的生命周期
容器的生命周期
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該命令結束,該容器也就結束了
# 當我們在後台啟動的時候
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服務端)(不常用)
# exec真正的作用是在容器內執行命令,而不是真正的進入到容器內部
1.因為 /bin/bash這個命令,就相當於與這個容器建立了連接,所以我們可以和容器做交互,當我們關閉這個連接的時候,就會自動結束掉這個容器。
2.執行exec命令:
docker exec -it 容器id ls # 查詢根路徑所有文件
# top 命令(容器內部執行查詢進程)
# 容器內部是純凈的空間,安裝:vim
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
十一:目錄掛載(映射作用)
# 目錄掛載格式:
docker run -di --name=mycentos99 -v /宿主機要掛載目錄:/容器要掛載路徑 指定鏡像
docker run -di --name=mycentos99 -v /home:/home centos:centos7
# -v : 映射
# 掛載作用:
1.一旦掛載,以後宿主機目錄內修改,同樣影響容器內部
2.容器內修改同樣影響宿主機
十二:埠映射
圖解:
# 命令:
- 使用參數 -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
# 此時我們使用遠程連接我們得宿主機雲伺服器的6377埠。
為什麼會後台啟動redis服務?
# 為什麼會後台啟動redis服務?
1.我們在啟動redis容器的時候,他會自動運行一個腳本文件:docker-entrypoint.sh
2.就像啟動cent os自動啟動一個/bin/bash窗口
3.而redis啟動/bin/bash與之建立連接之後,會自動執行這個腳本文件
# docker-entrypoint.sh 這個腳本的路徑:
/usr/local/bin/docker-entrypoint.sh
十三:查看容器ip地址
# 命令:
# 查看容器詳細資訊
- docker inspect 容器id
# 只查看容器ip地址
- docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱/容器ID
# 其實宿主機與容器之間是通過網關進行通訊的
- 查看網關
# 容器內下載該命令:
- 下載查看ip資訊的命令:yum install net-tools
- ifconfig:查看網路相關資訊
# 所以此時我們在連接redis的時候就有兩種方式
- 第一種:
- 因為我們做了埠映射,所以我們可以通過:雲伺服器地址:6377連接
- 第二種:
- 此時我們已經知道了容器的ip地址,所以就可以通過: 容器的ip地址:6379 (此時埠號就是它本身的6379因為是直接通過它本身的ip建立的連接)
# 每個容器都有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拉下來使用即可