一基本概念
1. 什么是Docker
...
2. Docker的基本概念
鏡像(Image)
是一個(gè)只讀模板辐宾,用來運(yùn)行Docker容器。
容器(Container)
負(fù)責(zé)應(yīng)用程序的運(yùn)行,包括操作系統(tǒng)、用戶添加的文件以及元數(shù)據(jù)
容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)狸窘、開始钟些、停止烟号、刪除。每個(gè)容器都是相互隔離的政恍、保證安全的平臺(tái)汪拥。
注:鏡像是只讀的,容器在啟動(dòng)的時(shí)候創(chuàng)建一層可寫層作為最上層篙耗。
倉庫(Repository)
倉庫是集中存放鏡像文件的場所迫筑。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
注:Docker 倉庫的概念跟Git類似宗弯,注冊服務(wù)器可以理解為 GitHub 這樣的托管服務(wù)
二脯燃、快速開始
1. 安裝
# ubuntucurl -fsSL https://get.docker.com/ | shsudo service docker restart
2. 鏡像
獲取
# 從倉庫注冊服務(wù)器拉取sudo docker pull ubuntu:14.04# 官方倉庫注冊服務(wù)器,相當(dāng)于 sudo docker pull registry.hub.docker.com/ubuntu:14.04# 也可使用其他倉庫蒙保,如: sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
顯示
sudo docker images
運(yùn)行
sudo docker run -t -i ubuntu:14.04 /bin/bash
修改
# 運(yùn)行容器bash辕棚,通過shell進(jìn)行操作sudo docker run -t -i ubuntu:14.04 /bin/bash# 提交更新sudo docker commit -m"Added json gem"-a"Docker Newbee"0b2616b0e5a8 ouruser/sinatra:v2
-m:? 提交信息
-a:? 指定更新的用戶信息
0b2616b0e5a8: 容器的 ID
ouruser/sinatra: 倉庫名
v2: 倉庫tag
創(chuàng)建
通過修改已有image, 具體操作修改中已有
通過Dockerfile來創(chuàng)建
mkdir mydockerimg# docker image的配置文件vim Dockerfile# 創(chuàng)建imagesudo docker build -t testimg .
-t: 指定新的image的名字
.: Dockerfile所在目錄
Dockerfile示例
# 這是注釋FROM ubuntu:14.04MAINTAINER AIR_CC RUN apt-get -y updateCMDecho"hello-world"ADD myApp /var/wwwEXPOSE80
#: 注釋
FROM: 告訴 Docker 使用哪個(gè)鏡像作為基礎(chǔ)
MAINTAINER: 維護(hù)者的信息
RUN: 在創(chuàng)建鏡像時(shí)運(yùn)行的操作
CMD: 啟動(dòng)容器后運(yùn)行的程序
ADD: 復(fù)制本地文件到鏡像
WORKDIR: 設(shè)置 dockerfile 命令運(yùn)行目錄
EXPOSE: 對外部開放端口
通過本地文件系統(tǒng)導(dǎo)入
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz? | dockerimport- ubuntu:14.04
注:具體鏡像可在openva中找
保存與載入
1.保存已有的鏡像
sudodockersave-oubuntu_14.04.tarubuntu:14.04
載入鏡像
sudodockerload--inputubuntu_14.04.tar# 或者sudodockerload
刪除
# 暫停并刪除相應(yīng)的容器sudo docker stop containerNamesudo docker rm containerName# 刪除鏡像sudo docker rmi imageName
注:刪除鏡像之前需要先stop & rm相應(yīng)的container
# 刪除所有的containersudo docker stop $(docker ps -a -q)sudo docker rm $(docker ps -a -q)# 刪除所有的imagesudo docker rmi $(docker images -q)
2. 容器
容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,以及它們的運(yùn)行態(tài)環(huán)境追他。對應(yīng)的坟募,虛擬機(jī)可以理解為模擬運(yùn)行的一整套操作系統(tǒng)(提供了運(yùn)行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應(yīng)用。
運(yùn)行
# 運(yùn)行一下邑狸,就終止sudo docker run -tid? ubuntu:14.04
run的參數(shù)說明
-t: 為container分配一個(gè)偽終端(pseudo-tty)懈糯,并綁定到容器的標(biāo)準(zhǔn)輸入上
-i: 讓容器的標(biāo)準(zhǔn)輸入保持打開
-d: 使容器在后臺(tái)以守護(hù)態(tài)(Daemonized)形式運(yùn)行
終止
使用sudo docker stop 終止;
注:當(dāng)容器中指定的應(yīng)用終結(jié)時(shí)单雾,容器也會(huì)終止
sudo docker start -- 啟動(dòng)一個(gè)處于終止的容器
sudo docker restart -- 重啟一個(gè)處于運(yùn)行態(tài)的容器
運(yùn)行日志
獲取 container 中程序輸出到 terminal 上的信息docker logs
進(jìn)入
使用attach
sudo docker run -tid ubuntu:14.04sudo docker attach # ctrl + c:? 殺死該 contanier# ctrl + p + ctrl + q: 退出container交互界面
使用nsenter
導(dǎo)出與導(dǎo)入
導(dǎo)出
sudo dockerexport > outputFileName
導(dǎo)入
sudo dockerimport
注:用戶既可以使用 docker load 來導(dǎo)入鏡像存儲(chǔ)文件到本地鏡像庫赚哗,也可以使用 docker import來導(dǎo)入一個(gè)容器快照到本地鏡像庫。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時(shí)的快照狀態(tài))硅堆,而鏡像存儲(chǔ)文件將保存完整記錄屿储,體積也要大。此外渐逃,從容器快照文件導(dǎo)入時(shí)可以重新指定標(biāo)簽等元數(shù)據(jù)信息够掠。
刪除
sudo docker stopsudo docker rm
注: 刪除容器前需先stop*