亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

什么是docker Docker入門教程第一篇

2024-09-01 13:48:21
字體:
來源:轉載
供稿:網友

Docker是個新生的事物,概念類似虛擬化。網上關于Docker入門的東西已經很多了。不過本文探討了Docker的特點、特性、原理,還介紹了具有中國特色的安裝測試過程,另外還談到了Docker的社區生態和Dockerfile,并使用Dockerfile構建一個nginx環境。

緣起

在幾個月前聽說Docker,但是一直沒有時間去研究,前一段時間趁著azure免費試用,趕緊實驗一下,但是卡在了ubuntu基礎鏡像的下載上(由于國內網絡的特殊原因),所以也就擱淺了,這里把經驗和體會分享一下。

Docker簡介

我覺得簡單來說,Docker就是一個應用程序執行容器,類似虛擬機的概念。但是與虛擬化技術的不同點在于下面幾點:

1.虛擬化技術依賴物理CPU和內存,是硬件級別的;而docker構建在操作系統上,利用操作系統的containerization技術,所以docker甚至可以在虛擬機上運行。
2.虛擬化系統一般都是指操作系統鏡像,比較復雜,稱為“系統”;而docker開源而且輕量,稱為“容器”,單個容器適合部署少量應用,比如部署一個redis、一個memcached。
3.傳統的虛擬化技術使用快照來保存狀態;而docker在保存狀態上不僅更為輕便和低成本,而且引入了類似源代碼管理機制,將容器的快照歷史版本一一記錄,切換成本很低。
4.傳統的虛擬化技術在構建系統的時候較為復雜,需要大量的人力;而docker可以通過Dockfile來構建整個容器,重啟和構建速度很快。更重要的是Dockfile可以手動編寫,這樣應用程序開發人員可以通過發布Dockfile來指導系統環境和依賴,這樣對于持續交付十分有利。
5.Dockerfile可以基于已經構建好的容器鏡像,創建新容器。Dockerfile可以通過社區分享和下載,有利于該技術的推廣。

Docker的主要特性如下(摘自Docker:具備一致性的自動化軟件部署):

文件系統隔離:每個進程容器運行在完全獨立的根文件系統里。
資源隔離:可以使用cgroup為每個進程容器分配不同的系統資源,例如CPU和內存。
網絡隔離:每個進程容器運行在自己的網絡命名空間里,擁有自己的虛擬接口和IP地址。
寫時復制:采用寫時復制方式創建根文件系統,這讓部署變得極其快捷,并且節省內存和硬盤空間。
日志記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索。
變更管理:容器文件系統的變更可以提交到新的映像中,并可重復使用以創建更多的容器。無需使用模板或手動配置。
交互式Shell:Docker可以分配一個虛擬終端并關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。
目前Docker正處在開發階段,官方不建議用于生產環境。另外,Docker是基于Ubuntu開發的,所以官方推薦將其安裝在Ubuntu的操作系統上,目前只能安裝在linux系統上。

Docker的使用入門

Docker官方的安裝指導挺詳細的。但是由于國內的特殊情況,我這里基于這個安裝指導,給出適用于國內開發者的入門過程?;赨buntu Precise 12.04 (LTS) (64-bit),推薦這個版本,其他版本參考官方安裝手冊。

1、Docker的安裝
首先,Docker官方聲稱最好是運行在Linux內核3.8以上,所以要先進行內核升級

# install the backported kernelsudo apt-get updatesudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring# rebootsudo reboot

添加Docker倉庫的key:

 

復制代碼 代碼如下:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

添加鏡像,這里直接用俄羅斯的Yandex

 

sudo sh -c "echo deb http://mirror.yandex.ru/mirrors/docker/ docker main > /etc/apt/sources.list.d/docker.list"sudo apt-get update

安裝Docker

sudo apt-get install lxc-docker

一般上面的步驟不會有任何問題。

2、Docker鏡像下載

Docker運行至少需要一個ubuntu的基礎鏡像,這個鏡像會在你初次嘗試執行時自動下載,不過從國內直接用基本上就別想了,需要使用代理。這里用Docker中文社區提供的代理。出處1,出處2。

修改/etc/default/docker文件,取消注釋http_proxy的部分:

# If you need Docker to use an HTTP proxy, it can also be specified here.
export http_proxy=http://192.241.209.203:8384/ 
經過筆者測試,上面這個代理也不是很穩定,可能用的人比較多吧。

可用的代理地址(持續關注中)

http://192.241.209.203:8384

然后,你就可以執行下面的命令,測試執行了,由于代理不是很穩定,可能需要多嘗試幾次(淡定):

sudo docker run -i -t ubuntu /bin/bash

下面這個截圖是我成功pull完成,并測試hello world成功(大概嘗試了3-4次):

Docker入門教程,Docker是什么,Docker簡介,Docker安裝

Docker的社區和生態

倉庫和鏡像

評估一項開源技術很大程度上需要關注它的社區和生態。Docker的生態是通過推送和拉取特定的“鏡像(image)包”來展開的。你可以從docker index上搜索需要的鏡像。也可以通過下面的命令搜索:

sudo docker search

鏡像可以看作是包含有某些軟件的容器系統,比如ubuntu就是一個官方的基礎鏡像,很多鏡像都是基于這個鏡像“衍生”,該鏡像包含基本的ubuntu系統。再比如,hipache是一個官方的鏡像容器,運行后可以支持http和websocket的代理服務,而這個鏡像本身又基于ubuntu。

通過pull來拉取鏡像,將鏡像下載到本地,比如

sudo docker pull hipache

通過images查看現在有哪些鏡像:

sudo docker imagesREPOSITORY   TAG     IMAGE ID   CREATED    VIRTUAL SIZEubuntu    13.10    9f676bd305a4  6 weeks ago   178 MBubuntu    saucy    9f676bd305a4  6 weeks ago   178 MBubuntu    13.04    eb601b8965b8  6 weeks ago   166.5 MBubuntu    raring    eb601b8965b8  6 weeks ago   166.5 MBubuntu    12.10    5ac751e8d623  6 weeks ago   161 MBubuntu    quantal    5ac751e8d623  6 weeks ago   161 MBubuntu    10.04    9cc9ea5ea540  6 weeks ago   180.8 MBubuntu    lucid    9cc9ea5ea540  6 weeks ago   180.8 MBubuntu    12.04    9cd978db300e  6 weeks ago   204.4 MBubuntu    latest    9cd978db300e  6 weeks ago   204.4 MBubuntu    precise    9cd978db300e  6 weeks ago   204.4 MB

上面的都是鏡像,都從屬于ubuntu倉庫(一般倉庫名應該是username/repository格式,如果是直接以repository作為倉庫名的,是指官方發布的倉庫)。我們拉取ubuntu的時候,實際上是把倉庫里的鏡像都拉下來了。每個鏡像都有一個唯一的IMAGE ID,和一個易于記憶的TAG,可以通過IMAGE ID的前幾位或者repository:TAG來標識一個鏡像。

Dockerfile和通過Dockerfile來構建Nginx容器
除了pull,鏡像也可以通過"編譯"得到,這里的"編譯"是指一種構建行為,通過手動編寫或者從github獲取Dockerfile來構建一個鏡像??梢园袲ockerfile看成是一個腳本,這個腳本會在容器每次啟動時執行。一般在Dockerfile里面需要編寫基礎軟件的安裝腳本和配置腳本。下面這個Dockerfile是個例子:

## Ubuntu Dockerfile## https://github.com/dockerfile/ubuntu## Pull base image.FROM ubuntu:12.10# Update OS.RUN echo "deb http://archive.ubuntu.com/ubuntu quantal main universe multiverse" > /etc/apt/sources.listRUN apt-get updateRUN apt-get upgrade -y# Install basic packages.RUN apt-get install -y software-properties-commonRUN apt-get install -y curl git htop unzip vim wget# Add files.ADD root/.bashrc /root/.bashrcADD root/.gitconfig /root/.gitconfigADD root/scripts /root/scripts# Set working directory.ENV HOME /rootWORKDIR /root

FROM指令表示這次構建需要基于ubuntu倉庫的12.10這個TAG的鏡像,如果本地不存在這個鏡像的話,會自動下載鏡像。鏡像實際上就是編譯好的結果。向上面這個Dockerfile,在原始ubuntu的基礎上安裝了很多常用的軟件。

docker官方有Dockerfile的教程:https://www.docker.com/what-docker

實踐

首先確保你已經完成上面的安裝步驟,并拉取到基礎鏡像ubuntu:12.10。

現在我們用上面的Dockerfile來構建這個倉庫(上面的Dockerfile實際上是github dockerfile項目的基本倉庫dockerfile/ubuntu,所下面的命令直接從github下載Dockerfile來構建)

 

復制代碼 代碼如下:
sudo docker build -t="dockerfile/ubuntu" github.com/dockerfile/ubuntu

 

下面是最后構建成功時的輸出:

...Processing triggers for ureadahead ... ---> 0a4392cf8e2dStep 6 : ADD root/.bashrc /root/.bashrc ---> b0e86f348c09Step 7 : ADD root/.gitconfig /root/.gitconfig ---> e2a9c001d457Step 8 : ADD root/scripts /root/scripts ---> 678febabdbdcStep 9 : ENV HOME /root ---> Running in c4afef311cf1 ---> eaa3ae3277a8Step 10 : WORKDIR /root ---> Running in d50c273c75b8 ---> c9ecf5bc3227Successfully built c9ecf5bc3227Removing intermediate container 1a3d1f794c49Removing intermediate container 9f72df8abb63Removing intermediate container 5694d1e3e77eRemoving intermediate container 6a184821f89cRemoving intermediate container 8195bd05fc36Removing intermediate container d50c273c75b8Removing intermediate container 70de07353ecfRemoving intermediate container 73e3f6204613Removing intermediate container 5dd948415981Removing intermediate container c4afef311cf1

此時會多出一個倉庫:

sudo docker imagesREPOSITORY   TAG     IMAGE ID   CREATED    VIRTUAL SIZEdockerfile/ubuntu latest    c9ecf5bc3227  About a minute ago 294.2 MB...

現在我們可以來構建dockerfile/nginx了(當然,從一開始你就可以直接pull這個鏡像)

sudo docker build -t="dockerfile/nginx" github.com/dockerfile/nginx

完成后,會看到編譯好的鏡像:

sudo docker imagesREPOSITORY   TAG     IMAGE ID   CREATED    VIRTUAL SIZEdockerfile/nginx latest    68508350c656  About a minute ago 308.3 MBdockerfile/ubuntu latest    c9ecf5bc3227  16 minutes ago  294.2 MB...

現在是時候看到真正的效果了!用下面這個命令運行容器:

sudo docker run -d -p 80:80 dockerfile/nginx

這個命令會以daemon的方式運行容器,通過下面命令查看正在運行的容器:

sudo docker psCONTAINER ID  IMAGE      COMMAND    CREATED    STATUS    PORTS    NAMES98c474a7dd6a  dockerfile/nginx:latest nginx    6 seconds ago  Up 6 seconds  0.0.0.0:80->80/tcp trusting_hawking

訪問你主機的80端口,可以看到nginx的歡迎頁面了!這時,我們來看看本機的進程sudo ps -ef:

root  1428 952 0 15:19 ?  00:00:00 nginx: master process nginxroot  1429 417 0 15:19 ?  00:00:00 /sbin/udevd --daemonwww-data 1441 1428 0 15:19 ?  00:00:00 nginx: worker processwww-data 1442 1428 0 15:19 ?  00:00:00 nginx: worker processwww-data 1443 1428 0 15:19 ?  00:00:00 nginx: worker processwww-data 1444 1428 0 15:19 ?  00:00:00 nginx: worker process

似乎有些接近事物的本質了!nginx的進程實際上是在本機上的,這意味著,容器中程序的執行仍然是使用本機操作系統的,容器并不自己構建操作系統,而是以某種隔離的方式依賴本機操作系統工作。這就是Docker和虛擬機的本質區別。

你可以像下面這樣,將本機的目錄映射給這個"nginx容器"。<sites-enabled-dir>目錄下應該有nginx的配置文件片段

 

復制代碼 代碼如下:
docker run -d -p 80:80 -v <sites-enabled-dir>:/etc/nginx/sites-enabled -v <log-dir>:/var/log/nginx dockerfile/nginx

 

PS:這步筆者沒有成功,日志路徑是可以map的,但是sites-enable-dir中的配置始終不行。繼續診斷中。
鏡像的共享與Dockfile的分發
可以共享你的鏡像和用來構建的Dockfile分享給社區:

Docker index是官方的鏡像目錄,可以從里面得到大量的預編譯好的鏡像
Dockerfile Project一個托管Dockerfile的倉庫集合

原理
總的來說Docker的核心技術如下:

命名空間
AUFS(advanced multi layered unification filesystem)
cgroup

由于本人才疏學淺,有興趣的朋友可以擴展閱讀一下,一定會對Docker有更深刻的認識的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久天天躁日日躁| 久久精品91久久香蕉加勒比| 欧美成人性生活| 亚洲高清免费观看高清完整版| 国产成人一区二区三区小说| 欧美影院成年免费版| 国产精品欧美一区二区三区奶水| 亚洲日本中文字幕免费在线不卡| 国产精品美女主播在线观看纯欲| 都市激情亚洲色图| 亚洲欧美综合区自拍另类| 色综合导航网站| 国产91对白在线播放| 欧美成aaa人片在线观看蜜臀| 亚洲精品国精品久久99热| www欧美xxxx| 欧美日韩成人精品| 亚洲综合成人婷婷小说| 国产成人精品免高潮费视频| 精品香蕉一区二区三区| 福利一区视频在线观看| 成人信息集中地欧美| 欧美体内谢she精2性欧美| 2024亚洲男人天堂| 亚洲最大av网| 国产一级揄自揄精品视频| 色婷婷成人综合| 日本久久久久久| 亚洲欧美中文在线视频| 国产欧美日韩中文字幕在线| 国产精品自在线| 亚洲日本欧美日韩高观看| 91精品国产综合久久男男| 亚洲成人久久电影| 日韩av电影手机在线| 成人h片在线播放免费网站| 欧美电影第一页| 91人人爽人人爽人人精88v| 亚洲人成网站免费播放| 97久久久免费福利网址| 久久99久久久久久久噜噜| 亚洲日本成人女熟在线观看| 伊人久久精品视频| www.久久久久久.com| 亚洲激情在线观看| www.99久久热国产日韩欧美.com| x99av成人免费| 国产精品7m视频| 日韩成人网免费视频| 日韩欧美在线字幕| 精品无码久久久久久国产| 中文字幕成人在线| 亚洲国产天堂久久国产91| 亚洲国产精品人人爽夜夜爽| 欧美性猛交xxxx乱大交3| 欧美性色xo影院| 国产精品久久综合av爱欲tv| 自拍亚洲一区欧美另类| 日韩精品在线免费观看视频| 黑人狂躁日本妞一区二区三区| 欧美日韩中文字幕在线| 亚洲天堂影视av| 中文字幕日韩av电影| 国产精品999999| 成人啪啪免费看| www.欧美三级电影.com| 夜夜嗨av一区二区三区四区| 国产成人精品日本亚洲专区61| 欧美国产第一页| 日韩欧美aⅴ综合网站发布| 国产精品久久久久av| 色综合久久精品亚洲国产| 国产欧美 在线欧美| 日韩在线观看高清| 亚洲最大的av网站| 国产成人精品一区二区三区| 精品国产老师黑色丝袜高跟鞋| 色综合91久久精品中文字幕| 中文字幕自拍vr一区二区三区| 最近2019中文字幕第三页视频| 精品少妇v888av| 亚洲第一区第一页| 亚洲精品国产精品自产a区红杏吧| 久久伊人91精品综合网站| 97av视频在线| 亚洲片av在线| 日韩av免费在线播放| 欧美噜噜久久久xxx| 国产成人精品一区二区三区| 97超级碰在线看视频免费在线看| 日韩中文字幕在线观看| 91豆花精品一区| 在线观看久久av| 日韩av在线电影网| 国产精品一区二区久久| 欧美激情一区二区三区久久久| 国产精品r级在线| 国精产品一区一区三区有限在线| 人妖精品videosex性欧美| 成人日韩在线电影| 国内免费久久久久久久久久久| 亚洲精品国产免费| 国产精品麻豆va在线播放| 欧美高清videos高潮hd| 国产aⅴ夜夜欢一区二区三区| 久久久久免费视频| 欧美第一黄网免费网站| 欧美精品videossex88| 亚洲国产精品国自产拍av秋霞| 亚洲性xxxx| 久久免费视频这里只有精品| 中文欧美日本在线资源| 一区二区欧美久久| 中国人与牲禽动交精品| 欧美国产日韩一区二区三区| 欧美激情精品久久久久久蜜臀| 久久综合久中文字幕青草| 国产欧美va欧美va香蕉在线| 色先锋久久影院av| 欧美在线观看视频| 黄色一区二区在线| 国产精品热视频| 日韩在线观看网站| 国产精品美女网站| 不卡av在线网站| 欧美成人精品h版在线观看| 98精品国产高清在线xxxx天堂| 一区二区日韩精品| 亚洲片av在线| 黄色一区二区在线| 夜夜嗨av色综合久久久综合网| 日韩欧美一区二区三区| 久久久久久免费精品| 亚洲少妇激情视频| 久青草国产97香蕉在线视频| 91久久中文字幕| 亚洲一区二区三区sesese| 久久久av免费| 97在线看福利| 亚洲人成欧美中文字幕| 全球成人中文在线| 国产视频亚洲视频| 91在线高清视频| 亚洲国产福利在线| 国产欧美一区二区三区四区| 午夜精品三级视频福利| 欧美限制级电影在线观看| 日韩动漫免费观看电视剧高清| 成人中文字幕+乱码+中文字幕| 中文字幕日韩欧美在线视频| 欧美成人免费在线视频| 国产69精品99久久久久久宅男| 欧美亚洲另类激情另类| 久久久久久久一区二区| 日韩在线观看免费| 亚洲乱码一区二区| 国产精品影片在线观看| 欧美日韩国产中文字幕| 精品国模在线视频| 亚州精品天堂中文字幕| 久久精品国产一区二区电影| 亚洲第一中文字幕在线观看| 久久精品影视伊人网| 91久久综合亚洲鲁鲁五月天|