Docker命令

docker

http://www.runoob.com/docker/docker-install-python.html

http://dockone.io/article/102

http://www.runoob.com/docker/docker-resources.html

Clients Hosts Registries

Docker鏡像 Images 用于創(chuàng)建容器的只讀模板,包含容器啟動所需的一切信息其监,包括運(yùn)行程序和配置數(shù)據(jù)

Docker容器 Container Hosts 獨(dú)立的應(yīng)用

Docker客戶端 Client

Docker主機(jī) Host 一個物理或者虛擬的機(jī)器用于執(zhí)行Docker守護(hù)進(jìn)程和容器

Docker倉庫 Registry 用于保存鏡像

Docker Machine Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應(yīng)的平臺上安裝Docker椭符,比如VirtualBox跟伏、 Digital Ocean、Microsoft Azure秧了。

  • 三個組件:

    • Docker Client 是用戶界面跨扮,它支持用戶與Docker Daemon之間通信。

    • Docker Daemon運(yùn)行于主機(jī)上,處理服務(wù)請求衡创。

    • Docker Index是中央registry帝嗡,支持擁有公有與私有訪問權(quán)限的Docker容器鏡像的備份。

  • 三要素:

    • Docker Containers 容器負(fù)責(zé)應(yīng)用程序的運(yùn)行璃氢,包括操作系統(tǒng)哟玷、用戶添加的文件以及元數(shù)據(jù)

    • Docker Images是一個只讀模板,用來運(yùn)行Docker容器拔莱。

    • DockerFile是文件指令集碗降,用來說明如何自動創(chuàng)建Docker鏡像。

Docker Client的是交互層

Docker Daemon負(fù)責(zé)實際操作:

1塘秦, 基于Dockerfile的指令構(gòu)建鏡像Docker Images讼渊, 然后推送到中央registry:Docker Index, 以供他人使用, 公有或者私有訪問權(quán)限

2尊剔,運(yùn)行容器 運(yùn)行容器源于我們在第一步中創(chuàng)建的鏡像爪幻。當(dāng)容器被啟動后,一個讀寫層會被添加到鏡像的頂層须误。當(dāng)分配到合適的網(wǎng)絡(luò)和IP地址后挨稿,需要的應(yīng)用程序就可以在容器中運(yùn)行了。

命令

    docker info

    sudo docker pull busybox   預(yù)構(gòu)建Image
    (busybox是最小的Linux系統(tǒng))

    docker run busybox /bin/echo Hello Docker  運(yùn)行應(yīng)用

    sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")   啟動sample_job的容器(后臺模式)

    2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

    這個長字符叫做容器ID

    docker logs 2b1b7a428627 查看容器內(nèi)的輸出

    docker logs $sample_job  查看日志

    docker help

    docker ps 查看容器

    docker stop $sample_job 停止容器

    docker restart $sample_job

    docker stop $sample_job;
    docker rm $sample_job

    docker images 查看鏡像列表

    docker search (image-name)

    docker history (image_name)

    docker push (image_name) 將鏡像推送到registry

    docker stats --help 查看docker stats 的用法

容器的使用

docker create # 創(chuàng)建一個容器但是不啟動它
docker run # 創(chuàng)建并啟動一個容器
docker stop # 停止容器運(yùn)行钉赁,發(fā)送信號SIGTERM
docker start # 啟動一個停止?fàn)顟B(tài)的容器
docker restart # 重啟一個容器
docker rm # 刪除一個容器
docker kill # 發(fā)送信號給容器讳苦,默認(rèn)SIGKILL
docker attach # 連接(進(jìn)入)到一個正在運(yùn)行的容器
docker wait # 阻塞到一個容器,直到容器停止運(yùn)行

獲取容器相關(guān)信息

docker ps # 顯示狀態(tài)為運(yùn)行(Up)的容器
docker ps -a # 顯示所有容器,包括運(yùn)行中(Up)的和退出的(Exited)
docker inspect # 深入容器內(nèi)部獲取容器所有信息
docker logs # 查看容器的日志(stdout/stderr)
docker events # 得到docker服務(wù)器的實時的事件
docker port # 顯示容器的端口映射
docker top # 顯示容器的進(jìn)程信息
docker diff # 顯示容器文件系統(tǒng)的前后變化

導(dǎo)出容器

docker cp # 從容器里向外拷貝文件或目錄
docker export # 將容器整個文件系統(tǒng)導(dǎo)出為一個tar包草描,不帶layers、tag等信息

執(zhí)行

docker exec # 在容器里執(zhí)行一個命令,可以執(zhí)行bash進(jìn)入交互式
運(yùn)行web應(yīng)用

docker run -d -P training/webapp python app.py 運(yùn)行一個python Flask應(yīng)用

-d  后臺模式
-P 將容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機(jī)上胰苏。

docker ps 這里多了端口信息。

Docker 開放了 5000 端口(默認(rèn) Python Flask 端口)映射到主機(jī)端口 32769 上陕赃。
這時我們可以通過瀏覽器訪問WEB應(yīng)用

runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py -p來綁定指定端口

docker port 可以查看指定 (ID或者名字)容器的某個確定端口映射到宿主機(jī)的端口號毙玻。

docker port 7a38a1ad55c6

docker port determined_swanson

docker logs [ID或者名字] 可以查看容器內(nèi)部的標(biāo)準(zhǔn)輸出。

-f:讓 dokcer logs 像使用 tail -f 一樣來輸出容器內(nèi)部的標(biāo)準(zhǔn)輸出。

docker top determined_swanson 查看容器內(nèi)部運(yùn)行的進(jìn)程

docker inspect determined_swanson 來查看Docker的底層信息米者。它會返回一個 JSON 文件記錄著 Docker 容器的配置和狀態(tài)信息韭畸。

docker stop determined_swanson

docker start determined_swanson

docker rm determined_swanson 要先停止再移除

Dickerfile

Docker為我們提供了Dockerfile來自動化構(gòu)建鏡像

所有Dockerfile都必須以FROM命令開始宇智。 FROM命令會指定鏡像基于哪個基礎(chǔ)鏡像創(chuàng)建,接下來的命令也會基于這個基礎(chǔ)鏡像(譯者注:CentOS和Ubuntu有些命令可是不一樣的)胰丁。FROM命令可以多次使用随橘,表示會創(chuàng)建多個鏡像。具體語法如下:

FROM <image name>

MAINTAINER <author name> 設(shè)置鏡像作者

RUN 《command》 在shell或者exec的環(huán)境下執(zhí)行的命令锦庸。RUN指令會在新創(chuàng)建的鏡像上添加新的層面机蔗,接下來提交的結(jié)果用在Dockerfile的下一條指令中

ADD 《src》 《destination》 復(fù)制文件指令。它有兩個參數(shù)<source>和<destination>甘萧。destination是容器內(nèi)的路徑萝嘁。source可以是URL或者是啟動配置上下文中的一個文件。

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

EXPOSE <port>; 指定容器運(yùn)行時的監(jiān)聽端口

鏡像的使用

docker images # 顯示本地所有的鏡像列表
docker import # 從一個tar包創(chuàng)建一個鏡像扬卷,往往和export結(jié)合使用
docker build # 使用Dockerfile創(chuàng)建鏡像(推薦)
docker commit # 從容器創(chuàng)建鏡像
docker rmi # 刪除一個鏡像
docker load # 從一個tar包創(chuàng)建一個鏡像牙言,和save配合使用
docker save # 將一個鏡像保存為一個tar包,帶layers和tag信息
docker history # 顯示生成一個鏡像的歷史命令
docker tag # 為鏡像起一個別名

docker images

REPOSTITORY:表示鏡像的倉庫源

TAG:鏡像的標(biāo)簽

IMAGE ID:鏡像ID

CREATED:鏡像創(chuàng)建時間

SIZE:鏡像大小

同一倉庫源可以有多個 TAG邀泉,代表這個倉庫源的不同個版本嬉挡,如ubuntu倉庫源里,有15.10汇恤、14.04等多個不同的版本庞钢,我們使用 REPOSTITORY:TAG 來定義不同的鏡像。

指定使用ubuntu:15.10倉庫源

docker run -t -i ubuntu:15.10 /bin/bash

-t:在新容器內(nèi)指定一個偽終端或終端因谎。

-i:允許你對容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互基括。

exist 退出
  • 構(gòu)建新的鏡像

當(dāng)我們在本地主機(jī)上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。如果我們想預(yù)先下載這個鏡像财岔,我們可以使用 docker pull 命令來下載它风皿。

docker pull ubuntu:13.10

  • 查找鏡像

我們可以從 Docker Hub 網(wǎng)站來搜索鏡像,Docker Hub 網(wǎng)址為: https://hub.docker.com/

docker search httpd

NAME:鏡像倉庫源的名稱

DESCRIPTION:鏡像的描述

OFFICIAL:是否docker官方發(fā)布
  • 創(chuàng)建鏡像

當(dāng)我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時匠璧,我們可以通過以下兩種方式對鏡像進(jìn)行更改桐款。

1.從已經(jīng)創(chuàng)建的容器中更新鏡像,并且提交這個鏡像
2.使用 Dockerfile 指令來創(chuàng)建一個新的鏡像
  • 更新鏡像

docker run -t -i ubuntu:15.10 /bin/bash

在運(yùn)行的容器內(nèi)使用 apt-get update 命令進(jìn)行更新夷恍。 exist退出

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 提交容器副本

-m:提交的描述信息

-a:指定鏡像作者

e218edb10161:容器ID

runoob/ubuntu:v2:指定要創(chuàng)建的目標(biāo)鏡像名:標(biāo)簽

docker images

docker run -t -i runoob/ubuntu:v2 /bin/bash

  • 構(gòu)建鏡像

們使用命令 docker build 魔眨, 從零開始來創(chuàng)建一個新的鏡像。為此酿雪,我們需要創(chuàng)建一個 Dockerfile 文件遏暴,其中包含一組指令來告訴 Docker 如何構(gòu)建我們的鏡像。

每一個指令都會在鏡像上創(chuàng)建一個新的層指黎,每一個指令的前綴都必須是大寫的朋凉。

第一條FROM,指定使用哪個鏡像源

RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令醋安,安裝了什么杂彭。墓毒。。

然后盖灸,我們使用 Dockerfile 文件蚁鳖,通過 docker build 命令來構(gòu)建一個鏡像磺芭。

ROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

docker build -t runoob/centos:6.7 .

參數(shù)說明:

-t :指定要創(chuàng)建的目標(biāo)鏡像名

. :Dockerfile 文件所在目錄赁炎,可以指定Dockerfile 的絕對路徑

docker images

我們可以使用新的鏡像來創(chuàng)建容器

run -t -i runoob/centos:6.7 /bin/bash

  • 鏡像標(biāo)簽

docker tag 860c279d2fec runoob/centos:dev

容器連接

docker run -d -P training/webapp python app.py

-P 參數(shù)創(chuàng)建一個容器,使用 docker ps 來看到端口5000綁定主機(jī)端口32768钾腺。

我們也可以使用 -p 標(biāo)識來指定容器端口綁定到主機(jī)端口徙垫。

兩種方式的區(qū)別是:

-P :是容器內(nèi)部端口隨機(jī)映射到主機(jī)的高端口。
-p : 是容器內(nèi)部端口綁定到指定的主機(jī)端口


docker run -d -p 5000:5000 training/webapp python app.py

另外放棒,我們可以指定容器綁定的網(wǎng)絡(luò)地址姻报,比如綁定127.0.0.1。

docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py

上面的例子中间螟,默認(rèn)都是綁定 tcp 端口吴旋,如果要綁定 UDP 端口,可以在端口后面加上 /udp厢破。

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以讓我們快捷地查看端口的綁定情況荣瑟。

docker port adoring_stonebraker 5002
  • Docker容器連接

端口映射并不是唯一把 docker 連接到另一個容器的方法。

docker有一個連接系統(tǒng)允許將多個容器連接在一起摩泪,共享連接信息笆焰。

docker連接會創(chuàng)建一個父子關(guān)系,其中父容器可以看到子容器的信息见坑。

當(dāng)我們創(chuàng)建一個容器的時候嚷掠,docker會自動對它進(jìn)行命名。另外荞驴,我們也可以使用--name標(biāo)識來命名容器

docker run -d -P --name runoob training/webapp python app.py

Docker Registry

docker login # 登錄到一個registry
docker search # 從registry倉庫搜索鏡像
docker pull # 從倉庫下載鏡像到本地
docker push # 將一個鏡像push到registry倉庫中

Docker Registry不皆。它是所有倉庫(包括共有和私有)以及工作流的中央Registry。在深入Docker Registry之前熊楼,讓我們先去看看一些常見的術(shù)語和與倉庫相關(guān)的概念霹娄。

Repositories(倉庫)可以被標(biāo)記為喜歡或者像書簽一樣標(biāo)記起來
用戶可以在倉庫下評論。
私有倉庫和共有倉庫類似孙蒙,不同之處在于前者不會在搜索結(jié)果中顯示项棠,也沒有訪問它的權(quán)限。只有用戶設(shè)置為合作者才能訪問私有倉庫挎峦。
成功推送之后配置webhooks香追。

Docker Registry有三個角色,分別是index坦胶、registry和registry client透典。

Docker 安裝 Python

  • 官方鏡像

docker search python

docker pull python:2.7

在~/python/myapp目錄下創(chuàng)建一個 helloworld.py 文件晴楔,代碼如下:

#!/usr/bin/python
print("Hello, World!");

運(yùn)行容器

runoob@runoob:~/python$ docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python:3.5 python helloworld.py

命令說明:

-v $PWD/myapp:/usr/src/myapp :將主機(jī)中當(dāng)前目錄下的myapp掛載到容器的/usr/src/myapp

-w /usr/src/myapp :指定容器的/usr/src/myapp目錄為工作目錄

python helloworld.py :使用容器的python命令來執(zhí)行工作目錄中的helloworld.py文件

輸出結(jié)果:

Hello, World!
  • Dockerfile

創(chuàng)建Dockerfile

首先,創(chuàng)建目錄python,用于存放后面的相關(guān)東西峭咒。

 mkdir -p ~/python ~/python/myapp
 
 myapp目錄將映射為python容器配置的應(yīng)用目錄

 cd ~/python
 
 vim Dockerfile
 
 docker build -t python:3.5 

DockerFile

Dockerfile

Dockerfile是docker構(gòu)建鏡像的基礎(chǔ)税弃,也是docker區(qū)別于其他容器的重要特征,正是有了Dockerfile凑队,docker的自動化和可移植性才成為可能则果。

不論是開發(fā)還是運(yùn)維,學(xué)會編寫Dockerfile幾乎是必備的漩氨,這有助于你理解整個容器的運(yùn)行西壮。
FROM , 從一個基礎(chǔ)鏡像構(gòu)建新的鏡像

FROM ubuntu

MAINTAINER , 維護(hù)者信息

MAINTAINER William wlj@nicescale.com

ENV , 設(shè)置環(huán)境變量

ENV TEST 1

RUN , 非交互式運(yùn)行shell命令

RUN apt-get -y update
RUN apt-get -y install nginx

ADD , 將外部文件拷貝到鏡像里,src可以為url

ADD http://nicescale.com/ /data/nicescale.tgz

WORKDIR /path/to/workdir, 設(shè)置工作目錄

WORKDIR /var/www

USER , 設(shè)置用戶ID

USER nginx

VULUME <#dir>, 設(shè)置volume

VOLUME [‘/data’]

EXPOSE , 暴露哪些端口

EXPOSE 80 443

ENTRYPOINT [‘executable’, ‘param1’,’param2’]執(zhí)行命令

ENTRYPOINT ["/usr/sbin/nginx"]

CMD [“param1”,”param2”]

CMD ["start"]

docker創(chuàng)建、啟動container時執(zhí)行的命令叫惊,如果設(shè)置了ENTRYPOINT款青,則CMD將作為參數(shù)
Dockerfile最佳實踐

盡量將一些常用不變的指令放到前面
CMD和ENTRYPOINT盡量使用json數(shù)組方式

通過Dockerfile構(gòu)建image

docker build csphere/nginx:1.7 .

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霍狰,隨后出現(xiàn)的幾起案子抡草,更是在濱河造成了極大的恐慌,老刑警劉巖蔗坯,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件康震,死亡現(xiàn)場離奇詭異,居然都是意外死亡步悠,警方通過查閱死者的電腦和手機(jī)签杈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼎兽,“玉大人答姥,你說我怎么就攤上這事⊙枰В” “怎么了鹦付?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長择卦。 經(jīng)常有香客問我敲长,道長,這世上最難降的妖魔是什么秉继? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任祈噪,我火速辦了婚禮,結(jié)果婚禮上尚辑,老公的妹妹穿的比我還像新娘辑鲤。我一直安慰自己,他們只是感情好杠茬,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布月褥。 她就那樣靜靜地躺著弛随,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宁赤。 梳的紋絲不亂的頭發(fā)上舀透,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音决左,去河邊找鬼愕够。 笑死,一個胖子當(dāng)著我的面吹牛哆窿,可吹牛的內(nèi)容都是我干的链烈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼挚躯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擦秽?” 一聲冷哼從身側(cè)響起码荔,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎感挥,沒想到半個月后缩搅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡触幼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年硼瓣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片置谦。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡堂鲤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出媒峡,到底是詐尸還是另有隱情瘟栖,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布谅阿,位于F島的核電站半哟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏签餐。R本人自食惡果不足惜寓涨,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氯檐。 院中可真熱鬧戒良,春花似錦、人聲如沸男摧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拇颅,卻和暖如春奏司,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背樟插。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工韵洋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人黄锤。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓搪缨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸵熟。 傳聞我的和親對象是個殘疾皇子副编,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容