Docker筆記

Docker簡介

1、什么是容器(虛擬機通過中間層將一臺或者多臺虛擬機運行在物理硬件之上,容器直接運行在操作系統內核之上,容器也叫做操作系統虛擬化)

依托Linux內核功能的虛擬化技術
依賴于Linux內核特性,Namespace和Cgroups

2、docker特點

提供簡單清亮的建模方式
職責的邏輯分離
職責的落地分離
快速高效的開發生命周期
鼓勵使用面向服務的架構

3、docker的使用場景

使用docker容器開發、測試、部署服務(輕量 開發環境部署 提交至私有庫 測試環境下載)
創建隔離的運行環境(同一服務不同版本可能服務不同客戶)
搭建測試環境(學習成本下降)

4、docker的基本組成

客戶端/守護進程

CS架構

本地/遠程

鏡像(構建和打包階段)

容器的基石

層疊的只讀文件系統

1層,引導文件系統bootfs
2層,root文件系統 加載更多的只讀文件

聯合加載 指一次同時加載許多個文件系統,將各層文件系統疊加在一起,最終的文件將包含所有的底層文件和目錄,docker將這樣的文件系統稱為鏡像

寫實復制

當一個容器啟動時,docker會在最頂層加一個讀寫層,第一次啟動的初始的讀寫層是空的,如果想修改文件,會先從制度成復制到讀寫層,只讀層版本依然存在,創建一個新容器時,讀寫層+鏡像=容器

倉庫

公有(dockerHub)

私有

5、Docker的主要特性如下

文件系統隔離:每個進程容器運行在完全獨立的根文件系統里

資源隔離:可以使用cgroup為每個進程容器分配不同的系統資源,例如cpu和內存

網絡隔離:每個進程容器運行在自己的網絡命名空間里,擁有自己的虛擬接口和IP地址

寫實復制:采用寫實復制方式創根文件系統,這讓部署變得極其快捷,并且節省內存和硬盤空間。

日志記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索

變更管理:容器文件系統的變更可以提交至新的映像中,并可重復使用以創建更多的容器。無需使用模板或者手動配置。

交互式Shell:Docker可以分配一個虛擬終端并關聯到任何容器的標準輸入上,例如運行一個一次性交互shell

6、Docker客戶端和守護進程

Docker守護進程

service docker stop
service docker start
service docker restart

docker -d [options]
# -d 以守護進程運行

# 啟動配置項
/etc/default/docker

# docker的啟動選項
tcp
uninx
soketfd

7、Docker容器

容器的基本操作

docker run IMAGE [COMMAND][ARG...]
# run在新容器中執行命令
docker run -i -t IMAGE /bin/bash
# -i --interactive 為容器始終打開標準輸入
# -t --tty=true 創建一個偽tty終端
# --name 自動以容器名字

查看容器

docker ps [-a][-l]
# 不指定參數默認返回正在運行的容器
# -a列出所有容器
# -l列出最新創建的一個容器
docker inspect [name][id]

重新啟動已經停止的容器

docker start [-i] 容器名

刪除停止的容器

docker rm [name][id]
# -f 強制刪除

守護式容器

能夠長期運行
沒有交互式回話
使用運行應用程序和服務
ctrl+c/ctrl+p退出不影響

docker run -d 鏡像名 [COMMAND][ARG]
# -d使用后臺的方式啟動

附加到運行中的容器

docker attach ID/NAME

查看容器日志

docker logs [-f][-t][--tail]
# -f 一直跟蹤日志變化并返回結果
# -t 在返回結果上加上時間戳
# --tail 返回結尾處多少數量的日志,默認返回所有

查看容器內進程

docker top [name]

在運行中的容器內啟動新的進程

docker exec [-d][-i][-t] 容器名 [COMMAND][ARG...]

停止守護式容器

docker stop 容器名 # 發送信號等待停止
docker kill 容器名 # 直接停止

docker部署靜態網站

# 端口映射
run [-P][-p]
# -P 隨機映射端口
# -p 指定端口映射

鏡像與倉庫

查看和刪除鏡像

docker images [OPTIONS][REPOSITORY]
# -a 顯示所有鏡像
# -f 過濾條件
# --no-trunc 不使用截斷形式顯示數據,默認是截斷唯一id
# -q 是顯示唯一id

docker rmi [OPTIONS] IMAGE [IMAGES...]
# -f 強制刪除
# --no-prue=false 保留未打開標簽的父鏡像

# 刪除所有鏡像
docker rmi $(docker image -q)

# 查看鏡像的存儲目錄和文件
tree /opt/data/registestry/repositories/

獲取鏡像

# 查找鏡像
# Docker Hub
docker search [OPTIONS] TEAM
# --automated 只顯示自動化構建的鏡像
# --no-trunc 不適用截斷形式顯示數據,默認是截斷唯一id的
# -s 限制顯示結果的最低星級

拉取鏡像

docker pull
# -a,--a-tags 將所有匹配標記的都下載

# 使用--registty-mirror(提高下載速度)
# 1.修改:/etc/default/docker
# 2.添加:DOCKER_OPTS="--registry-mirror=本地鏡像的連接"

推送鏡像

docker push 鏡像

構建鏡像

1.保存對容器的修改,并在此使用

2.自定義容器的能力

3.以軟件的形式打包并分發服務及其運行環境

docker commit # 通過容器構建
docker commit [OPTION] CONTAINER [REPOSITROY[:TAG]]

# -a 指定鏡像作者
# -m 記錄鏡像的構建信息
# -p 指示commit命令可以不暫停上傳
docker build # 通過Dockerfile文件構建
# 1.FROM
FROM <image>
FROM <image>:<tag>
# 必須是已經存在的鏡像

# 2.MAINTAINER(作者信息)
# 包含鏡像的作者,所有者和聯系信息

# 3.RUN
# 指定當前鏡像中運行的命令
RUN <command> (shell模式)

# 4.CMD(容器運行時運行的)

# 5.EXPOSE
# 指定運行該鏡像的容器使用的端口

# 6.ENV
ENV REFERSH_DATE 2016-07-25(多次執行時,更改時間,則會帶來此條以下命令刷新緩存)

# 7.ADD(提供tar解壓功能)
ADD <src> <dest>

# 8.COPY(淡出能提供復制)
COPY <scr> <dest>

# 9.ENTRYPOINT
# 不會被docker run中的啟動命令所覆蓋

# 10.VOLUME
VOLUME["/data"]
# 向基于鏡像創建的容器添加卷

# 11.USER
# 指定鏡像會以什么樣的用戶運行(不指定用戶默認以root)

# 12.WORDIR
# 從鏡像創建一個新容器時,在容器內部設置工作目錄

# 13.ONBUILD
# 鏡像出發器(當一個鏡像被其他鏡像作為基礎鏡像時執行)
# buil命令
docker build [OPTIONS] PATH |URL| -
# --force-rm
# --no-cache 跳過構建緩存
# --pull
# -q 不顯示構建過程
# --rm
# -t

Dockerfile構建過程

  1. 從基礎鏡像運行一個容器
  2. 指定一條命令,對容器作出修改
  3. 執行類似commit的操作,提交一個新的鏡像層
  4. 再基于剛提交的鏡像云心給一個新容器
  5. 執行Dockerfile中的下一條指令,直至所有的指令執行完畢

構建緩存

  1. --no-cache 跳過構建緩存
  2. 查看鏡像構建過程
docker history [image]

Docker容器的網絡連接

Linux虛擬網橋(docker0)

可以設置ip地址

相當于擁有一個隱藏的虛擬網卡

添加虛擬網橋

sudo brctl addbr br0

修改docker0地址

sudo ifconfig docker0 192.168.100.1 netmask 255.255.255.0

修改docker守護進程的啟動配置

/etc/default/docker 中添加DOCKER_OPS值 -b=br0

重啟守護進程

docker容器的互聯

--icc=true #默認false(拒絕所有容器間的互聯)
--link
docker run --link=[CONTAINER_NAME]:[ALIAS][IMAGE][COMMOND0]

# 允許特定的連接
--icc=false
--iptable=true
--link

docker容器與外部網絡的連接

ip_forward

Linux系統的一個變量,值決定系統是否會轉發流量

sysctl net.ipv4.conf.all.forwarding = 1(允許流量轉發)

iptables

iptables是基于Linux內核集成的包過濾防火墻系統,幾乎所有的Linux發行版都會包含iptables的功能

允許端口映射訪問
限制IP訪問容器

8、Docker容器的數據卷

什么是數據卷(Data Volume)

數據卷設計的目的,在于數據的持久化,它完全獨立于容器的生成周期,因此Docker不會再容器刪除時刪除其掛在的數據卷,也不會存在類似垃圾回收機制,對容器醫用的數據卷進行處理

docker的數據卷是獨立于docker的存在,它存在于docker host,與docker容器的生成周期分離

docker數據卷存在于docker宿主機的文件系統

docker數據卷可以使目錄頁可以使用文件

docker容器可以利用數據卷的技術與宿主機進行數據共享

同一目錄或者文件可以支持多個容器訪問,實現了容器間數據的共享和交換

數據卷的特點

數據卷在容器啟動時初始化,如果容器在使用鏡像掛在點包含了數據,這些數據會拷貝至初始化的數據卷中。

數據卷可以在容器里的內容直接進行修改

數據卷的變化不會影響鏡像的更新

卷會一直存在,即使掛載的容器已經被刪除

為容器添加數據卷

docker run -v 本機目錄:容器映射目錄名 -it ubuntu /bin/bash

docker的數據卷容器

命令的容器掛載數據卷,其他容器通過掛載這個容器實現數據共享,掛載數據卷的容器,就叫做數據卷容器

掛載數據卷容器的方法

docker run --volume-from [CONTAINER NAME]

在docker中,如果一個數據卷還在被容器使用,它就會一直存在。使用數據卷容器掛載數據,實際上此容器起到的作用,僅僅是將數據卷的配置傳遞到新容器中。

docker數據卷的備份還原操作(ubuntu)

數據備份方法

# 需要備份容器name,存放的本地backup目錄
docker run --volumes-from [container name] -v$(pwd):backup ubuntu
tar cvf /backup/backup.tar [container data volume] # 需要備份的目錄

數據還原方法

# 需要還原的容器name,存放的本地backup目錄
docker run --volume-from [container name] v$(pwd):backup ubuntu
tar xvf /backup/backup.tar [container data volume] # 還原的目錄
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容

  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,520評論 0 120
  • Docker — 云時代的程序分發方式 要說最近一年云計算業界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,562評論 15 147
  • Docker docker概念 Docker 擴展了 Linux 容器(Linux Containers),或著說...
    AkaTBS閱讀 707評論 0 3
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,773評論 0 7
  • 今天看到一個段關于沙發的描寫很是溫暖,就好像說的不是一個物,而且每個人都會有的老友一樣。 你知道,人,容易疲倦。當...
    琳小喵閱讀 205評論 0 0