一、容器
作業系統的的組成
-
Bootloader:它負責裝置的啟動過程。
-
Shell:Shell是一種程式語言,它可以控制其他檔案,程序以及所有其他程式。
-
Kernel:它是作業系統的主要元件,管理記憶體,CPU和其他相關元件。
-
Desktop Environment:這是使用者通常與之互動的環境。
-
Graphical server(圖形伺服器):它是作業系統的子系統,用於在螢幕上顯示圖形
-
Applications: 這些是執行不同使用者任務(例如word,excel等)的程式集。
-
Daemons : 後臺服務提供商。
什麼是核心kernel
核心是作業系統的關鍵元件。 它藉助程序間通訊和系統呼叫,在硬體級別上充當應用程式和資料處理之間的橋樑。
每當將作業系統載入到記憶體中時,首先,將載入核心並將其保留在那裡,直到作業系統關閉。 核心負責處理低階任務,例如任務管理,記憶體管理,風險管理等。
核心的任務
-
用於應用程式執行的流程管理。
-
記憶體和I / O(輸入/輸出)管理。
-
系統呼叫控制(核心的核心行為)。
-
藉助裝置驅動程式進行裝置管理。
核心空間
核心處於提升的系統狀態,其中包括受保護的記憶體空間以及對裝置硬體的完全訪問許可權。 此係統狀態和記憶體空間統稱為核心空間。 在核心空間內,對硬體和系統服務的核心訪問進行管理,並作為服務提供給系統的其餘部分。
使用者空間
使用者空間或使用者域是在作業系統核心環境之外執行的程式碼,使用者空間定義為作業系統用來與核心連線的各種應用程式或程式或庫。
使用者的應用程式是在使用者空間中執行的,它們可以透過核心系統呼叫訪問計算機可用資源的一部分。 透過使用核心提供的核心服務,可以建立使用者級別的應用程式,例如遊戲或辦公軟體。
-
-
容器內的應用直接執行在宿主機的核心之上,容器並沒有自己的核心,也不需要虛擬硬體,相當輕量化
-
二、Docker
1.什麼是docker
Docker是一個開源的應用容器引擎,基於go語言開發,用於執行容器裡的應用。
Docker也可以作為管理容器和映象的一種工具。
2.Docker和虛擬機器的區別
Docker容器 | 虛擬機器 | |
特性 | 所有容器共享宿主機核心 | 每個虛擬機器都有獨立的作業系統和核心 |
隔離性 | 透過namespace實現資源隔離,透過cgroup實現限制資源的最大使用量 | 完全隔離,每個虛擬機器都有獨立的硬體資源 |
啟動速度 | 秒級啟動速度 | 分鐘級啟動速度 |
效能損耗 | 容器相當於宿主機的程序,效能幾乎沒有損耗 | 需要透過hypervisor虛擬機器管理程式對宿主機資源虛擬訪問,至少有20%~50%的效能損耗 |
系統支援量(單機) | 單機容量能夠支援成百上千個容器 | 單機容量最多支援幾十個虛擬機器 |
3.Docker核心概念
Docker有三個核心概念:映象、容器和倉庫。
映象
映象是建立容器的基礎。
映象是一個只讀的模板檔案,裡面包含執行容器中的應用程式所有需要的所有內容(應用程式檔案、配置檔案、執行庫檔案、依賴包等)
容器
容器是用映象執行的例項。
容器可以被建立、啟動、停止、刪除,每個容器之間預設是相互隔離的。
倉庫
倉庫是用來儲存映象的地方。
倉庫有公有倉庫和私有倉庫之分。
4.Linux中的namespace( 名稱空間)
六個名稱空間和隔離內容
namespace | 系統呼叫引數 | 隔離內容 |
---|---|---|
UTS | CLONE_NEWUTS | 主機名與域名 |
IPC | CLONE_NEWWIPC | 訊號量、訊息佇列和共享記憶體 |
PID | CLONE_NEWPID | 程序編號 |
NETWORK | CLONE_NEWNET | 網路裝置、網路棧、埠等 |
MOUNT | CLONE_NEWNS | 掛載點(檔案系統) |
USER | CLONE_NEWUSER | 使用者和使用者組(3.8以後的核心才支援) |
一個宿主機執行了N個容器,多個容器共用一個 OS,必然帶來的以下問題:
-
怎麼樣保證每個容器都有不同的檔案系統並且能互不影響?
-
一個docker主程序內的各個容器都是其子程序,那麼如果實現同一個主程序下不同型別的子程序?各個容器子程序間能相互通訊(記憶體資料)嗎?
-
每個容器怎麼解決IP及埠分配的問題?
-
多個容器的主機名能一樣嗎?
-
每個容器都要不要有root使用者?怎麼解決賬戶重名問題
namespace是Linux系統的底層概念,在核心層實現,即有一些不同型別的名稱空間被部署在核內,各個docker容器執行在同一個docker主程序並且共用同一個宿主機系統核心,各docker容器執行在宿主機的使用者空間,每個容器都要有類似於虛擬機器一樣的相互隔離的執行空間,但是容器技術是在一個程序內實現執行指定服務的執行環境,並且還可以保護宿主機核心不受其他程序的干擾和影響,如檔案系統空間、網路空間、程序空間等,目前主要透過以下技術實現容器執行空間的相互隔離:
功能 | 系統呼叫引數 | 核心版本 | |
---|---|---|---|
MNT Namespace(mount) | 提供磁碟掛載點和檔案系統的隔離能力 | CLONE_NEWNS | 2.4.19 |
IPC Namespace(Inter-Process Communication) | 提供程序間通訊的隔離能力,包括訊號量,訊息佇列和共享記憶體 | CLONE_NEWIPC | 2.6.19 |
UTS Namespace(UNIXTimesharing System) | 提供核心,主機名和域名隔離能力 | CLONE_NEWUTS | 2.6.19 |
PID Namespace(ProcessIdentification) | 提供程序隔離能力 | CLONE_NEWPID | 2.6.24 |
Net Namespace(network) | 提供網路隔離能力,包括網路裝置,網路棧,埠等 | CLONE_NEWNET | 2.6.29 |
User Namespace(user) | 提供使用者隔離能力,包括使用者和組 | CLONE_NEWUSER | 3.8 |
TimeNamespace | 提供時間隔離能力 | CLONE_NEWTIME | 5.6 |
syslogNamespace | 提供syslog隔離能力 | syslognamespace是由華為工程師RuiXiang(瑞翔)提出的,但沒有合併到linux核心中,後systemd在2020年2在2020年2 月實現了一個名為“journalnamespace”的類似功能 | |
Controlgroup(cgroup)Namespace | 提供程序所屬的控制組的身份隔離 |
如果不對一個容器做任何資源限制,則宿主機會允許其佔用無限大的記憶體空間,有時候會因為程式碼bug程式會一直申請記憶體,直到把宿主機記憶體佔完,為了避免此類的問題出現,宿主機有必要對容器進行資源分配限制,比如CPU、記憶體等
Cgroups 最主要的作用,就是限制一個程序組能夠使用的資源上限,包括CPU、記憶體、磁碟、網路頻寬等等。此外,還能夠對程序進行優先順序設定,資源的計量以及資源的控制(比如:將程序掛起和恢復等操作)
cgroups 具體實現
-
blkio: 塊裝置IO限制
-
cpu: 使用排程程式為 cgroup 任務提供 cpu 的訪問
-
cpuacct: 產生 cgroup 任務的 cpu 資源報告
-
cpuset: 如果是多核心的 cpu,這個子系統會為 cgroup 任務分配單獨的 cpu 和記憶體
-
devices: 允許或拒絕 cgroup 任務對裝置的訪問
-
freezer: 暫停和恢復 cgroup 任務
-
memory: 設定每個 cgroup 的記憶體限制以及產生記憶體資源報告
-
net_cls: 標記每個網路包以供 cgroup 方便使用
-
ns: 名稱空間子系統
-
perf_event: 增加了對每 group 的監測跟蹤的能力,可以監測屬於某個特定的 group 的所有執行緒以及執行在特定CPU上的執行緒
Docker
相當於增強版的LXC,功能更為強大和易用,也是當前最主流的容器前端管理工具Docker 先啟動一個容器也需要一個外部模板,也稱為映象,docke的映象可以儲存在一個公共的地方共享使用,只要把映象下載下來就可以使用,最主要的是可以在映象基礎之上做自定義配置並且可以再把其提交為一個映象,一個映象可以被啟動為多個容器。
pouch
Pouch (小袋子)起源於 2011 年,並於2017年11月19日上午,在中國開源年會現場,阿里巴巴正式開源了基於 Apache 2.0 協議的容器技術 Pouch。Pouch 是一款輕量級的容器技術,擁有快速高效、可移植性高、資源佔用少等特性,主要幫助阿里更快的做到內部業務的交付,同時提高超大規模下資料中心的物理資源利用率
- runc: 早期libcontainer是Docker公司控制的一個開源專案,OCI的成立後,Docker把libcontainer專案移交給了OCI組織,runC就是在libcontainer的基礎上進化而來,目前Docker預設的runtime,runc遵守OCI規範
低階容器執行時與高階容器執行時
-
High-Level:高階執行時提供基於API的遠端管理操作,客戶端可以透過高階別執行時管理容器的整個生命週期(建立、刪除、重啟、停止),高階別執行時並不真正直接執行容器,而是呼叫低階別執行時執行,比如dockerd、containerd都是高階別執行時。
-
Low-Level:接受高階別執行時的指令,按照相應的指令執行容器,因此低階別執行時真是執行容器的地方,例如runc
三、安裝Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
軟體 | 作用 |
---|---|
yum-utils: | 提供了 yum-config-manager 工具 |
device mapper: | 是Linux核心中支援邏輯卷管理的通用裝置對映機制,它為實現用於儲存資源管理的塊裝置驅動提供了一個高度模組化的核心架構。 |
device mapper |
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #下載yum倉庫
yum install -y docker-ce docker-ce-cli containerd.io # 此處安裝最新版 如果不想安裝最新版 yum list --help #可以使用幫助檢視 yum list --showduplicates docker-ce #檢視所有的可用版本 yum -y install docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7 containerd.io
作用 | |
---|---|
docker-ce(Docker Community Edition) | 這是 Docker 的社群版。Docker 社群版是免費的, 面向開發者、小型團隊和個人使用。它包含了 Docker Engine, 這是一個用於構建和執行容器的開源容器執行時。 |
docker-ce-cli(Docker Command Line Interface) | 這是 Docker 的命令列工具, 它允許使用者與 Docker Engine 互動,執行容器相關的操作。 透過 Docker CLI,使用者可以構建、執行、管理和釋出容器。 |
containerd.io |
/etc/sysconfig/docker-network /etc/sysconfig/docker-storage /etc/sysconfig/docker
/usr/lib/systemd/system/docker.service
/etc/docker/daemon.json
/etc/containers/registries.conf
docker version Client: Docker Engine - Community Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:32:04 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:31:02 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
docker info Client: Docker Engine - Community Version: 26.1.4 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.14.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.27.1 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: Containers: 2 # 容器數量 Running: 0 Paused: 0 Stopped: 2 Images: 4 # 映象數量 Server Version: 26.1.4 # server 版本 Storage Driver: overlay2 #docker 使用的是 overlay2 檔案驅動 Backing Filesystem: xfs ## 宿主機上的底層檔案系統 Supports d_type: true Using metacopy: false Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: cgroupfs # Cgroups 驅動 Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: d2d58213f83a351ca8f528a95fbd145f5654e957 runc version: v1.1.12-0-g51d5e94 init version: de40ad0 Security Options: seccomp Profile: builtin Kernel Version: 3.10.0-693.el7.x86_64 # 宿主機的相關資訊 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 1.781GiB Name: localhost.localdomain ID: 39eee203-7863-4c80-a955-9aef575138c1 Docker Root Dir: /var/lib/docker # docker 資料儲存目錄 Debug Mode: false Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://6ijb8ubo.mirror.aliyuncs.com/ # registry 地址 Live Restore Enabled: false
位置:/etc/docker/daemon.json
#映象加速下載 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://n8lnq9bb.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
命令 | 含義 | 例子 |
---|---|---|
docker --help | 檢視幫助 | |
docker image --help | 檢視映象幫助 | docker image --help |
docker search 映象名稱 | 搜尋相關映象 | docker search nginx |
docker pull 映象名稱:標籤 | 下載映象(不加標籤預設使用latest) | docker pull nginx |
docker images | 檢視所有已有映象 | docker images |
docker images 映象名稱 | 檢視單個映象 | docker images nginx |
docker inspect 映象ID | 檢視映象的詳細資訊 | docker inspect 56b21e040954 |
docker tag 舊名稱 新名稱 | 修改映象的 標籤 |
搜尋映象
官方網站進行映象的搜尋
官網: http://hub.docker.com
1.搜尋映象
#格式
docker search 關鍵字
docker search nginx
#NAME: 列出了搜尋結果中各個映象的名稱。
#DESCRIPTION: 描述了每個映象的簡要說明或介紹。
#STARS: 顯示了每個映象的星級評分或受歡迎程度。星級數量越高表示該映象的受歡迎程度越高。
#OFFICIAL: 表示是否是官方構建的映象,OK表示是官方構建的。
#AUTOMATED: 表示是否是自動構建的映象,這個欄位沒有值表示不是自動構建的。
2.獲取映象
#格式
docker pull 倉庫名稱[:標籤]
#如果下載映象時不指定標籤,則預設會下載倉庫中最新版本的映象,即選擇標籤為 latest 標籤。
3.檢視映象資訊
映象下載後存放在 /var/lib/docker
。
Docker 相關的本地資源存放在 /var/lib/docker/ 目錄下,其中 containers 目錄存放容器資訊,image 目錄存放映象資訊,overlay2 目錄下存放具體的映象底層檔案。
檢視下載的映象檔案資訊
cat /var/lib/docker/image/overlay2/repositories.json
檢視下載到本地的所有映象
docker images
獲取映象詳細資訊
根據映象的唯一標識 ID 號(IMAGE ID)獲取。
#格式
docker inspect 映象ID號
●lowerdir是映象層,目錄或者檔案是隻讀的,其實就是rootfs,image layer可以分很多層,所以對應的lowerdir是可以有多個目錄
●upperdir是在lowerdir之上的容器層,這層是可讀可寫的,在啟動一個容器時候會進行建立,所有的對容器資料更改都發生在這裡層
●MergedDir是表現層,是容器的掛載點
為本地的映象新增新的標籤
#格式
docker tag 名稱:[標籤] 新名稱:[新標籤]
刪除映象
注意:如果該映象已經被容器使用,正確的做法是先刪除依賴該映象的所有容器,再去刪除映象。
#格式
#方式一
docker rmi 倉庫名稱:標籤 #當一個映象有多個標籤時,只是刪除其中指定的標籤
#方式二
docker rmi 映象ID號 #會徹底刪除該映象
#舉個例子,刪除標籤web
docker rmi nginx:latest
4.存出和載入映象
儲存映象
將映象儲存為本地檔案。
#格式
docker save -o 儲存檔名 儲存的映象
docker save -o /data/nginx nginx:latest #存出映象命名為nginx存在當前目錄下
載入映象
將映象檔案匯入到映象庫中。
#格式 #方式一 docker load < 存出的檔案 #方式二 docker load -i 存出的檔案
docker load < /data/nginx
上傳映象
將映象上傳到阿里倉庫,需要註冊賬號
https://cr.console.aliyun.com/cn-hangzhou/instances
六、Docker 容器操作
1.建立並啟動容器 -----docker run命令
幫助: man docker-run
可以直接執行 docker run
命令, 等同於先執行 docker create 命令,再執行 docker start 命令。
注意:容器是一個與其中執行的 shell 命令/程序共存亡的終端,命令/程序執行容器執行, 命令/程序結束容器退出。
#基本格式 docker run -d [選項] 映象名:標籤 [容器啟動命令] #常用選項 -d:以後臺模式執行容器。 -i:--interactive: 這個選項使得容器的標準輸入保持開啟狀態
-t:--tty: 這個選項分配一個偽終端(pseudo-TTY)給容器。
-h:設定容器內的名稱
--name:為容器指定一個名稱。 -p:將容器的埠對映到主機上的特定埠。 -P:隨機埠對映 -v:將主機上的目錄或檔案掛載到容器中。 -e:設定容器的環境變數。 --rm:容器停止後自動刪除。 --network:指定容器要使用的網路。 --link:將容器連結到另一個容器。
同時按三個鍵,ctrl+p+q 容器後臺執行
說明 | |
---|---|
no | 預設的重啟策略,不管容器是正常退出還是異常退出,總是不重啟容器。 |
on-failure[:max-retries] | 只在容器異常退出時重啟容器。可選的 max-retries 引數指定重試的最大次數。 |
always | 不管容器是正常退出還是異常退出,總是重啟容器 |
unless-stopped | 總是重啟容器,但不考慮docker服務端啟動時就已經退出的容器 |
docker run -d --restart always httpd
在使用 Docker 中的 --restart=always
選項時,容器將會在任何情況下都嘗試自動重啟,包括以下情況:
-
容器異常退出(非正常退出): 如果容器的主程序以非零狀態退出(即錯誤退出),Docker 將自動嘗試重新啟動容器。
-
Docker 守護程序重啟: 當 Docker 守護程序重啟(例如伺服器重啟或 Docker 服務重新啟動),所有具有
--restart=always
選項的容器也將被重新啟動。 -
手動停止容器: 即使手動使用
docker stop
命令停止了容器,使用--restart=always
的容器也會被 Docker 自動重新啟動。
雖然 --restart=always
選項會嘗試在大多數情況下重新啟動容器,但有一些特定情況下容器可能不會被重啟,例如:
-
手動刪除容器: 如果你手動使用
docker rm
命令刪除了容器,那麼--restart=always
選項將不再適用,因為容器已經從 Docker 中移除。 -
宿主機系統重啟或關機: 當宿主機作業系統因為重啟或關機而停止時,Docker 服務及其管理的容器也會停止,此時
--restart=always
的設定無法保證容器能夠立即重啟,需要等待 Docker 服務重新啟動後才能生效。
注意每個容器的名稱要唯一
docker run -it --name hx httpd
docker run -it -h 0730 centos:7
docker run --rm -it centos:7 bash
作用 | |
---|---|
docker ps | 檢視容器的狀態(看不到退出的,可以看到執行的) |
docker ps -a | 檢視容器的狀態 包括退出的 , 和執行的 |
docker ps -a -s | 檢視容器的狀態 -s 檢視容器的大小 |
docker ps -l | 檢視最近的一個容器狀態 |
docker ps [OPTIONS] docker container ls [OPTIONS] 選項: -a, --all Show all containers (default shows just running) -q, --quiet Only display numeric IDs -s, --size Display total file sizes -f, --filter filter Filter output based on conditions provided -l, --latest Show the latest created container (includes all states) -n, --last int Show n last created containers (includes all states) (default -1)
#顯示退出狀態的容器 #-f的大部分選項只能看啟動的容器 docker ps -f status=exited
docker top cb
docker stats [OPTIONS] [CONTAINER...] Display a live stream of container(s) resource usage statistics Options: -a, --all Show all containers (default shows just running) --format string Pretty-print images using a Go template --no-stream Disable streaming stats and only pull the first result --no-trunc Do not truncate output
#檢視單個容器
docker stats cbd84392fac4
#檢視所有容器,並且只執行一次
docker stats --no-stream
#檢視容器 docker ps -q #檢視映象 docker images
docker logs [OPTIONS] CONTAINER 選項: --details Show extra details provided to logs -f, --follow Follow log output --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes) --tail string Number of lines to show from the end of the logs (default "all") -t, --timestamps Show timestamps --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for2 minutes)
docker rm [OPTIONS] CONTAINER [CONTAINER...] docker container rm [OPTIONS] CONTAINER [CONTAINER...] #選項: -f, --force Force the removal of a running container (uses SIGKILL) -v, --volumes Remove the volumes associated with the container #刪除停止的容器 docker container prune [OPTIONS] Options: --filter filter Provide filter values (e.g. 'until=<timestamp>') -f, --force Do not prompt for confirmation
docker start|stop|restart|pause|unpause 容器ID
例子:
docker attach b92e987b5d15
在執行中的容器啟動新程序,可以執行單次命令,以及進入容器測試環境使用此方式,使用exit退出,但容器還在執行,此為推薦方式
格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 常用選項: -d, --detach Detached mode: run command in the background -e, --env list Set environment variables -i, --interactive Keep STDIN open even if not attached -t, --tty Allocate a pseudo-TTY #常見用法 docker exec -it 容器ID sh|bash
例子: 一次性操作
[root@ubuntu2204 ~]#docker run -idt --name c7-1 centos:7 4a965b518c1c64b2958fa574b48b39406e0cee808f171187a1a7a4b28b98c417 [root@ubuntu2204 ~]#docker exec c7-1 cat /etc/passwd root:x:0:0:root:/root:/bin/bash
例子: 持久操作
[root@ubuntu2204 ~]#docker exec -it c7-1 sh sh-4.2# sh-4.2# sh-4.2#
10.
-P , --publish-all= true | false預設為false #示例: docker run -P nginx:latest #對映容器所有暴露埠至隨機本地埠
#格式
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
docker run -p 可以將容器的預定義的指定埠對映到宿主機的相應埠
注意: 多個容器對映到宿主機的埠不能衝突,但容器內使用的埠可以相同
方式1: 容器80埠對映宿主機本地隨機埠
docker run -p 80 --name nginx-test-port1 nginx
方式2: 容器80埠對映到宿主機本地埠81
docker run -p 81:80 --name nginx-test-port2 nginx
方式3: 宿主機本地IP:宿主機本地埠:容器埠
docker run -p 10.0.0.100:82:80 --name nginx-test-port3 nginx
方式4: 宿主機本地IP:宿主機本地隨機埠:容器埠,預設從32768開始
docker run -p 10.0.0.100::80 --name nginx-test-port4 nginx
方式5: 宿主機本機ip:宿主機本地埠:容器埠/協議,預設為tcp協議
docker run -p 10.0.0.100:83:80/udp --name nginx-test-port5 nginx
方式6: 一次性對映多個埠+協議
docker run -p 8080:80/tcp -p 8443:443/tcp -p 53:53/udp --name nginx-test-port6 nginx
容器會自動將容器的ID加入自已的/etc/hosts檔案中,並解析成容器的IP
例子: 一次性檢視主機名
docker run --rm alpine cat /etc/hosts
例子: 進入到容器中 檢視主機名
docker run -d alpine tail -f /etc/hosts docker exec -it 1cb sh / # cat /etc/hosts
例子: 人為的修改 hosts 檔案 --add-host 新增指定資訊
docker run -it --rm --name a1 --add-host www.hx.com:6.6.6.6 --add-host www.ky36.com:9.9.9.9 alpine
容器的dns伺服器,預設採用宿主機的dns 地址,可以用下面方式指定其它的DNS地址
將dns地址配置在宿主機
-
在容器啟動時加選項 --dns=x.x.x.x
-
在/etc/docker/daemon.json 檔案中指定
例子: 指定容器的dns
docker run -it --rm --dns 1.1.1.1 --dns 2.2.2.2 centos bash
例子: 配置檔案指定DNS和搜尋domain名
vim /etc/docker/daemon.json { "registry-mirrors": ["https://n8lnq9bb.mirror.aliyuncs.com"], "dns" : [ "114.114.114.114", "1.1.1.1" ], "dns-search": [ "kcg.com" , "kgc.org" ] }
systemctl restart docker docker run -it --rm centos:7 bash cat /etc/resolv.conf
、
、