您好,登錄后才能下訂單哦!
本篇內容主要講解“Docker管理的碎片知識有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Docker管理的碎片知識有哪些”吧!
本文旨在匯總整理Docker日常管理的知識碎片。
Namespace:是容器虛擬化依賴的Linux 主要核心技術,用于各容器之間的隔離。主要通過以下六項隔離技術來實現:有兩個偽文件系統:/proc和/sys/
● UTS: 允許每個container擁有獨立的hostname(主機名)和domainname(域名),使其在網絡上可以被視作一個獨立的節點而非Host上的一個進程。
● IPC:contaner中進程交互還是采用linux常見的進程間交互方法,包括常見的信號量,消息隊列和共享內存。container的進程間交互實際上還是host上具有相同pid中的進程交互。
● PID:不同用戶的進程就是通過pid namesapce隔離開的,且不同namespace中可以有相同pid。所有的LXC(linux containers)進程在docker中的父進程為docker進程,每個LXC進程具有不同的namespace。
● NET:
● MNT:文件系統的掛載點。
● USRE:每個container可以有不同的user和groupid,也就是說可以在container內部用container內部的用戶執行程序而非Host上的用戶。
eg1:docker run -it -m 200M --memory-swap 300M centos //-m或–memory:設置內存的使用限額,–memory-swap:設置swap(交換分區)的使用限額
eg2: docker run -it --name containerB -c 512 centos //containerB,cpu權重限制為512;-c或者–cpu-shares設置容器實驗cpu的權重。如果不設置默認是1024
eg3: docker run -it --name testA --device-write-bps /dev/sda:30MB centos //容器testA限制該磁盤每秒寫入的數量為為30MB;
其他參數:
-bps:每秒讀寫的數據量。byte per second
-iops:每秒io的次數。 io per second--device-read-bps:設置讀取設備的bps
--device-write-bps:設置寫入設備的bps--device-read-iops:設置讀取設備的iops
--device-write-iops:設置寫入設備的iops
有時我們想不停止容器的情況下,調整容器映射端口,那怎樣在容器使用中,映射容器內應用的服務端口到本機宿主機器呢?
當容器中運行一些網絡應用,要讓外部訪問這些應用時,可以通過 -P 或 -p 參數兩種方式來指定端口映射。使用 -P(大) 參數時,Docker 會隨機映射一個宿主本地端口到內部容器開放的網絡端口上;使用 -p(小) 參數時,可以指定要映射的端口,并且在一個指定的端口上只可以綁定一個容器。支持的格式有:
IP:HostPort:ContainerPort
IP:ContainerPort
HostPort:ContainerPort
下面我們來分別舉例說明:
eg1:docker run -d -P nginx //docker ps查看會發現,宿主機本地的隨機分配了一個 3**** 端口被映射到了容器的 80 端口上,在本機瀏覽器訪問 http://localhost:3**** 就會出現 nginx 歡迎頁面
eg2:docker run -d -p 8080:80 nginx //使用 docker ps 可看到,本地主機的 8080 端口被映射到了容器的 80 端口
驗證:命令格式:docker port CONTAINER [PRIVATE_PORT[/PROTO]]
使用 docker inspect + 容器ID 獲取容器的具體信息:
eg3:給運行中的容器添加映射端口
docker inspect \`container_name` | grep IPAddress //將container_name 換成實際環境中的容器名,獲得容器的IP地址 iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000 //將容器的8000端口映射到docker主機的8001端口 或: docker commit container_id foo/live //提交一個運行中的容器為鏡像 docker run -d -p 8000:80 foo/live /bin/bash //運行鏡像并添加端口映射,宿主8000到容器80,
docker中宿主機與容器(container)互相拷貝傳遞文件
docker cp mycontainer:/opt/testnew/file.txt /opt/test/ //從容器拷貝文件到宿主機 docker cp /opt/test/file.txt mycontainer:/opt/testnew/ //從宿主機拷貝文件到容器 sudo docker commit -m "描述內容" -a "author name" 32555789dd00 aipaper/devinz83:v2 //-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創建鏡像的容器的 ID;最后指定目標鏡像的倉庫名和 tag 信息。創建成功后會返回這個鏡像的 ID 信息 docker images //驗證 REPOSITORY TAG aipaper/devinz83 v2 #修改容器配置文件yaml vi /opt/docker/yml/docker-compose-resty-redis.yml docker stack deploy --compose-file=/opt/docker/yml/docker-compose-resty-redis.yml resty_redis //使用新修改后的鏡像部署了docker應用
注:不管容器有沒有啟動,docker cp都會生效;完成后,使用 docker commit 命令來提交更新后的副本。
之后更新容器的yml文件,更新image為新的對象:
有時我們會由于各種原因,比如硬件升級、數據中心變化,資源限制等因素,需要將當前docker容器所在遷移到其他資源池或主機。
1)導出和導入容器:
導出容器:即從容器的文件系統創建壓縮文件,導出的文件保存為“gzip”文件;之后通過文件傳輸工具(如scp或rsync)將壓縮文件復制到新服務器。再在新服務器中,將這個gzip文件導入到一個新容器中。
docker export container-name | gzip > container-name.gz zcat container-name.gz | docker import - container-name docker run -d container-name /bin/bash //使用“docker run”命令訪問在新服務器中創建的新容器
注:導出容器工具的一個缺點是,它不導出容器的端口和變量,也不導出包含容器的底層數據。當嘗試在另一臺服務器中加載容器時,這可能會導致錯誤。對此,我們可另考慮使用Docker鏡像遷移來將容器從一臺服務器遷移到另一臺服務器。
2)容器鏡像遷移:
即我們遷移容器關聯到的鏡像到新的資源池,這也是將Docker容器遷移到另一臺服務器的最常用方法。對于要遷移的容器,首先使用“Docker commit”命令將其Docker鏡像保存到壓縮文件中。
docker commit container-id image-name //生成的鏡像將被壓縮
之后將上述鏡像上傳到新服務器上,在新服務器中,將使用“docker run”創建一個新容器。
使用此方法,數據卷不會被遷移,但它會保留,在容器內創建的應用程序的數據。
3)先保存,再加載鏡像
docker鏡像是應用程序的代碼、庫、配置文件等的包。Docker容器是由這些鏡像創建的。
可以使用“docker save”壓縮鏡像并將其遷移到新服務器。之后在新服務器中,使用“docker load”將壓縮鏡像文件用于創建新鏡像。
docker save image-name > image-name.tar cat image-name.tar | docker load
4)遷移數據卷:
Docker容器中的數據卷是共享目錄,其中包含特定于容器的數據。卷中的數據是持久的,在容器重新創建期間不會丟失。
使用導出或提交工具將Docker容器或鏡像從一臺服務器遷移到另一臺服務器時,不會遷移基礎數據卷。在這種情況下,包含數據的目錄將手動遷移到新服務器。然后在新服務器創建容器,引用該目錄作為其數據卷。
另一個簡單的方法是通過在“docker run”命令中傳遞“-volumes from”參數來備份和恢復數據卷。
docker run --rm --volumes-from datavolume-name -v $(pwd):/backup image-name tar cvf backup.tar /path-to-datavolume docker run --rm --volumes-from datavolume-name -v $(pwd):/backup image-name bash -c "cd /path-to-datavolume && tar xvf /backup/backup.tar --strip 1"
上述命令中:datavolume-name是/path/to/volume,此命令提供數據卷的備份。要指定工作目錄,還可以指定-w/backup。在/backup文件夾中生成的備份可以通過scp或ftp工具復制到新服務器。然后提取復制的備份并將其還原到新容器中的數據卷中。
5)遷移整個Docker容器:
以上方法僅適用于單個容器。但是將所有容器都要從一臺服務器遷移到另一臺服務器的情況下,我們采用另一種方法。此方法包括將整個docker目錄(“/var/lib/docker”)復制到新服務器。為了使這種方法成功,需要確定幾個關鍵點。
1、保留文件夾的權限和所有權。
2、遷移前停止Docker服務。
3、驗證兩臺服務器中的Docker版本是否兼容。
4、遷移前后驗證容器列表和功能。
5、環境變量和其他配置文件的路徑。
6、如果此方法由于任何故障而無法工作,我們將配置自定義腳本以將容器和鏡像從一臺服務器遷移到另一臺服務器。
docker attach ContainerID //需要對應的container是運行中的,不處于stop狀態 ##對于未運行的,可以把Docker鏡像中的文件復制到宿主來看,示例如下 sudo docker cp nginx-ubuntu-container:/etc/apt/sources.list ~/Documents/
語法:docker run [option] 鏡像名 [向啟動容器中傳入的命令]
常用可選參數說明:
-i 表示以“交互模式”運行容器
-t 表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即 分配一個偽終端。
--name 為創建的容器命名
-v 表示目錄映射關系(前者是宿主機目錄,后者是映射到宿主機上的目錄,即 宿主機目錄:容器中目錄),可以使 用多個-v 做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后 共享到容器上。
-d 在run后面加上-d參數,則會創建一個守護式容器在后臺運行(這樣創建容器后不 會自動登錄容器,如果只加-i -t 兩個參數,創建后就會自動進去容器)。
-p 表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p 做多個端口映射
-e 為容器設置環境變量
--network=host 表示將主機的網絡環境映射到容器中,容器的網絡與主機相同
到此,相信大家對“Docker管理的碎片知識有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。