docker可以安裝在windows/mac os/linux系統(tǒng)上,目前最新版本為:1.12.0
安裝
- windwos: 需要機(jī)器要能支持VT-x虛擬化技術(shù),下載地址 https://download.docker.com/win/stable/InstallDocker.msi 安裝完成后會(huì)在桌面創(chuàng)建兩個(gè)圖標(biāo),運(yùn)行其中一個(gè)(boot2docker)啟動(dòng)docker引擎,等待初始化到100%完成,然后運(yùn)行另外一個(gè)(docker terminal),在其中執(zhí)行docker命令即可
- mac os: 下載地址 https://download.docker.com/mac/stable/Docker.dmg
- linux 在終端執(zhí)行:
curl -SL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -等待安裝完成,然后添加開機(jī)啟動(dòng)chkconfig docker on,啟動(dòng)docker執(zhí)行service docker start
鏡像
docker鏡像可以看作是類似于操作系統(tǒng)鏡像一樣的東西,你可以在鏡像中安裝你的應(yīng)用,以及所需要的各種依賴庫,然后將該鏡像共享給其他人,其他人拿到鏡像后,通過docker啟動(dòng)你的應(yīng)用,無需再次安裝各種依賴軟件。docker鏡像類似于操作系統(tǒng)鏡像,擔(dān)比操作系統(tǒng)鏡像更輕量,構(gòu)建更快速。
容器
鏡像只是一個(gè)文件放在那里,當(dāng)啟動(dòng)它后,就會(huì)創(chuàng)建并運(yùn)行一個(gè)容器,運(yùn)行起來的容器就相當(dāng)于一個(gè)運(yùn)行著的操作系統(tǒng),此時(shí)你就可以進(jìn)入容器安裝軟件,執(zhí)行各種操作了。一個(gè)鏡像可以啟動(dòng)多個(gè)容器,它們互不干擾??梢园宴R像比做編程語言里面的類,容器就是類的實(shí)例。容器有運(yùn)行和停止兩種狀態(tài)。
Hello world
//從官方倉庫下載mysql鏡像
docker pull centos
//查看本地?fù)碛械溺R像
docker images
//啟動(dòng)centos鏡像
docker run centos
//查看運(yùn)行著的容器,加-a查看所有的容器
docker ps
fuxiaodeiMac:~ fuxiao$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
227dff6338c1 mysql "docker-entrypoint.sh" 21 seconds ago Up 20 seconds 3306/tcp zen_sammet
//停止容器
docker stop 227dff6338c1
docker常用命令:http://www.itdecent.cn/p/50134af6f809
創(chuàng)建鏡像
1. 修改已有鏡像
啟動(dòng)一個(gè)已有鏡像,然后進(jìn)入容器,安裝自己需要的軟件庫,然后exit推出鏡像,執(zhí)行
docker commit -m "描述" -a "SongCF" 0b2616b0e5a8 songcf/mysql:v2
//-a 鏡像作者信息
//0b2616b0e5a8 剛才運(yùn)行的容器id
//songcf/mysql:v2 要?jiǎng)?chuàng)建的鏡像的名稱tag
2. 利用 Dockerfile 來創(chuàng)建鏡像
需要先熟悉dockerfile如何編寫
參考:https://yeasy.gitbooks.io/docker_practice/content/dockerfile/basic_structure.html
容器間網(wǎng)絡(luò)通信
這里僅描述啟動(dòng)容器的時(shí)候指定端口該方法。
//-p ip:hostPort:containerPort
//-p ip::containerPort
//-p hostPort:containerPort
例如:
docker run -p 3306:3306 mysql
//啟動(dòng)mysql容器時(shí),將容器的3306端口綁定到本機(jī)的3306端口,其它應(yīng)用訪問本機(jī)3306端口即訪問到容器中的mysql
數(shù)據(jù)卷
在主機(jī)與容器間共享數(shù)據(jù),類似共享文件夾,啟動(dòng)容器時(shí)添加-v參數(shù),如:
docker run -v /root/data/:/songcf/data/ centos
//將本機(jī)的/root/data/目錄掛載到centos容器的/songcf/data/目錄,在centos容器中操作/songcf/data/目錄,就相當(dāng)于更改了主機(jī)上的/root/data/目錄
多個(gè)容器可以掛載主機(jī)上的同一目錄,實(shí)現(xiàn)容器間目錄共享。
常見問題
1. pull鏡像速度太慢
添加國(guó)內(nèi)代理,例如使用aliyun,登錄 https://dev.aliyun.com/ 選擇一個(gè)鏡像,點(diǎn)擊 點(diǎn)擊獲取鏡像加速器地址(須注冊(cè)并登錄阿里云),然后會(huì)得到一個(gè)網(wǎng)址,類似 https://xxxxx.mirror.aliyuncs.com,接下來將該地址添加到docker配置文件中,以centos系統(tǒng)為例:
//打開配置文件
vi /etc/sysconfig/docker
//在options中添加鏡像加速地址(注意是添加)
OPTIONS='--registry-mirror=https://xxxxx.mirror.aliyuncs.com'
然后執(zhí)行service docker restart重啟docker
2. 無法訪問私有倉庫
目前我門的私有倉庫為v2版本,且沒有添加證書,客戶端訪問默認(rèn)走h(yuǎn)ttps,需要在配置文件中指定倉庫地址使用http,而非https
//打開配置文件
vi /etc/sysconfig/docker
//在options中指定私有倉庫地址不使用https(注意是添加)
OPTIONS='--insecure-registry 192.168.2.55:5000'
然后執(zhí)行service docker restart重啟docker
3. 共享鏡像
自己創(chuàng)建鏡像后,可以通過docker push到倉庫上供他人使用,但是當(dāng)倉庫再遠(yuǎn)端,你要和旁邊的同時(shí)共享鏡像,自己push,然后他再pull可能會(huì)有點(diǎn)慢,所以此時(shí)可以導(dǎo)出鏡像文件給它使用:
//到處centos鏡像到xxx.tar文件
docker save -o xxx.tar centos
//然后xxx.tar傳給同事導(dǎo)入即可
docker load -i xxx.tar
// ps: save/load鏡像導(dǎo)入導(dǎo)出,export/import容器導(dǎo)入導(dǎo)出
入門電子書推薦:
https://yeasy.gitbooks.io/docker_practice/content/index.html