關於什麼是docker,為什麼要使用docker,這個文章裡面就不提了。這裡主要是以實際操作為例,在一台伺服器上操練如何安裝使用docker的過程。
安裝環境
一般用各種docker相關的廠商提供的指令碼安裝就可以了
rancher提供的指令碼
curl | sh
或者curl -ssl | sh
rancher提供的指令碼裡面可以指定安裝的docker環境版本,如果要安裝最新的版本,也可以用下面的daocloud提供的指令碼
curl -ssl | sh
修改映象庫的mirror
安裝完docker環境之後,執行docker version,如果成功安裝,應該就可以看到docker的版本號。
然後如果不經過特殊的配置,docker相關的命令拉取映象的目的地是docker.com的官方映象庫。因為各種網路原因,從docker官方映象庫拉取映象會很慢。好在同樣很多docker相關的廠商提供了映象庫的mirror。
下面是我用的mirror,以及修改mirror的指令碼
配置mirror:curl -ssl | sh -s
執行第乙個容器
我們可以去docker的官方映象庫瀏覽頁面裡面去查詢映象,學習使用方法。
這裡我們先實現乙個小目標,希望用一條語句跑乙個mongodb起來。
docker run --name=「ykbmongodb」 -p 27017:27017 -v /data/mongo/db:/data/db -v /data/mongo/dbconfig:/data/configdb -d mongo:3.2
我們來分別解析這條語句。
最後面的mongo:3.2,mongo表示映象的名字,這是mongodb的映象名。3.2表示標籤(可以理解為版本號)。如果不寫標籤,缺省會拉取標籤為latest的映象。注意,latest也只是乙個標籤,不一定保證它真的就是最新的。也就是說,如果你維護乙個工具的映象,每次發布乙個新的映象版本,你需要把latest這個標籤賦給這個最新的版本。
name引數表示執行起來的容器的名字,最好是乙個有意義的可以理解的名字。如果沒有這個引數,系統會預設給一串數字字元組合作為名字。
p這個引數比較關鍵了,是把容器裡面的埠和宿主機(也就是你當前用的這個伺服器)的埠做乙個對映。比如說,mongodb是需要占用27017作為服務的埠的。容器可以近似的看作是宿主機內部乙個類似虛擬機器的存在,這就意味著,容器裡面的27017和宿主機是不通的,如果需要實現訪問宿主機的27017埠就訪問到容器的27017,那麼就需要實現這樣的乙個埠對映。
v這個引數在理解了p引數之後就好理解了,就是為了能對映檔案和資料夾。注意冒號前面是宿主機,後面是容器內部。v引數通常用於把容器裡面的資料或者配置檔案暴露到宿主機可以輕易訪問的路徑下面,便於修改,維護,備份。
其他的各種引數,可以參考docker的文件了。
mongodb的容器執行起來之後,可以用mongodb的客戶端嘗試連線並寫入資料了。
換個姿勢再執行乙個容器
先看一下現在系統裡面有哪些映象吧,用這個方法
docker images
如果沒有意外,現在應該只有乙個之前我們拉下來的mongodb 3.2的映象。
我們再嘗試拉取乙個nginx的映象。
docker pull nginx
再看一下現在有哪些映象,是不是多了乙個?
現在用docker run 執行nginx的容器,就會發現不用再拉取映象,直接執行了,不過我們可以加大一點難度。
我們準備乙個叫做index.html的檔案,裡面的內容隨便寫,我寫的就一句話:
hello world!
把這個檔案放在宿主機/data/testnginx資料夾下面。然後執行下面的語句執行nginx容器:
docker run --name mynginx -d -p 80:80 -v /data/testnginx:/usr/share/nginx/html nginx
解析一下這條語句,和前面執行mongodb的相比,最大的區別就是
-v /data/testnginx:/usr/share/nginx/html
實際上就是把本機的/data/testnginx目錄和容器裡面的/usr/share/nginx/html關聯了起來。
注意我們之前已經在宿主機的這個資料夾下面放置了index.html檔案,也就是說當容器執行起來的時候,容器裡面的/usr/share/nginx/html裡面也有了這個index.html檔案。
然後我們用瀏覽器訪問一下宿主機的ip,預設80埠,可以看到,實際上我們訪問了容器的80埠,並開啟了index.html這個頁面。
檔案(夾)對映,埠對映是執行乙個映象的容器時最重要的引數,需要特別注意映象的使用說明裡面關於這部分的內容。
經過上面的操作,我們都理解了,在我們操作的這台伺服器上,安裝了docker執行環境之後,就可以拉取映象,執行容器。
拉取下來的映象,也是以專門的資料格式儲存在docker執行環境裡面的。也就是說,在現在操作的伺服器上,找不到乙個叫做mongo的映象檔案,或者nginx的映象檔案,可以由使用者來複製,編輯。
除去一些特殊的操作,正常情況下,想要在乙個docker環境裡面新增乙個映象,有兩個辦法:
和我們上面操作的一樣,docker pull
用docker build命令,編譯自己的映象
編譯自己的映象
我們先嘗試著編譯乙個自己的映象,不要擔心,看起來很複雜,其實很簡單。
docker build --rm -f dockerfile -t testbuildnginx:0.1 .
t引數是指定編譯之後的映象名字和標籤
f引數指定了乙個叫做dockerfile的檔案,這個檔案告訴了build命令如何編譯生成乙個新的映象。
所以可以看到,編譯映象的命令沒什麼好解釋的。關鍵點都在如何編寫這個dockerfile上面。
dockerfile
dockerfile就是乙個文字檔案,以我這個檔案為例:
from nginx
copy bin/index.html /usr/share/nginx/html
這個dockerfile就包含上面這兩行內容。
from nginx表示,當前要編譯的映象,以nginx映象為基礎。
copy bin/index.html /usr/share/nginx/html就更好理解了,就是把宿主機上的bin資料夾下面的index.html複製到映象裡面的/usr/share/nginx/html資料夾下面。
所以,在絕大多數情況下,編譯乙個映象,都是在某乙個映象的基礎上,做一些改動,增加或者刪除某些檔案,或者安裝解除安裝某個應用,修改某個配置檔案。
一般來說,映象追溯到最後,都是基於某個linux的發行版本。
對於我們來說,我們一般會基於某個比較穩定的成熟的應用映象來做自己的映象。比如說基於nginx,tomcat,jetty。當然也可以基於centos的映象,再在dockerfile裡面寫上安裝nginx,tomcat,jetty等操作,理論上當然可以,但是沒有必要。
執行自己的映象
像執行別的映象一樣,一旦編譯完成,這個映象就存在在本機的docker環境中了,可以通過docker run的命令執行。
docker run --name mytestbuildnginx -d -p 80:80 --restart=always testbuildnginx:0.1
假設我們當前的產品就是乙個簡單的html頁面,那麼完全可以通過jenkins做乙個持續整合的流程,類似這樣:
基礎映象
前面說過,編譯映象的時候,一定是基於某個基礎映象,這個基礎映象可以是官方或者私有映象庫的某個映象,也可以是自己之前編譯出來的某個映象。也就是說基於a編譯出b,再基於b編譯c,這樣是沒有問題的。
通常工作中也會維護自己的基礎映象,在這個基礎上編譯其他映象版本。這個情況類似我們有時候會維護一套**模板,新專案基於**模板來建立專案。
映象在宿主機上的儲存結構
除了pull和build之外,有別的辦法操作映象嗎
私有映象庫
docker入門(1) 安裝教程
配置 系統 ubuntu版本6.04.5 linux核心版本 4.4.0 連線工具 putty 一 配置源裡的阿里雲映象倉庫 從docker官網安裝特別慢 sudo vim etc apt sources.list 將以下配置覆蓋修改進去 deb xenial main restricted uni...
docker 1 docker的安裝和使用
當前為win7系統 我是一路next 安裝好後會有三個圖示在桌面上 雙擊執行 docker quickstart terminal 如果之前git是自己安裝的,這裡windows會尋找bash.exe,可以選擇瀏覽到自己安裝git目錄下的bash.exe.解決 網上文章說將安裝目錄下的boot2do...
Docker技術入門之 Docker安裝 1
docker從1.13版本之後採用時間線的方式作為版本號,分為社群版ce和企業版ee。社群版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施 容器 外掛程式等。社群版按照stable和edge兩種方式發布,每個季度更新stable版本,如17.06...