docker使用辦法

docker的使用

5.1從docker鏡像倉庫獲取鏡像的命令

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標(biāo)簽]

Docker 鏡像倉庫地址:地址的格式一般是 <域名/IP>[:端口號] 。默認(rèn)地址是 DockerHub。

下載gitlab鏡像

docker pull gitlab/gitlab-ce:latest

下載指定版本的ubuntu鏡像

?docker pull ubuntu:16.04

5.2 docker鏡像的使用

5.2.1后臺啟動一個docker容器

docker run –d –it <imagename>

5.2.2 只運行一次容器

docker run -it --rm ubuntu:16.04 bash

docker run 就是運行容器的命令,

說明一下上面用到的參數(shù)。

-it :這是兩個參數(shù),一個是 -i :交互式操作,一個是 -t 終端。我們這里打算進入

bash 執(zhí)行一些命令并查看返回結(jié)果,因此我們需要交互式終端。

--rm :這個參數(shù)是說容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容器并不會立即刪除,除非手動 docker rm 。我們這里只是隨便執(zhí)行個命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費空間。

ubuntu:16.04 :這是指用 ubuntu:16.04 鏡像為基礎(chǔ)來啟動容器。

bash :放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 bash 。

5.2.3在運行狀態(tài)的容器里啟動一個bash

docker ?exec ?-it ?$container_id ?bash

5.2.4啟動mysql鏡像的時候設(shè)置mysql的密碼

docker run -d -P -e MYSQL_ROOT_PASSWORD=root mysql

登錄mysql容器

docker run -it –-rm mysql mysql –u root –p root

5.2.5啟動gitlab容器

docker pull gitlab/gitlab-ce

docker run --name='gitlab-ce' -d -p 10022:22 -p 8999:80 --restart always?? gitlab/gitlab-ce

-p 用來指定docker容器映射宿主機的服務(wù)端口。80是web訪問用的端口,22是ssh協(xié)議用的端口,在啟動過程中g(shù)itlab容器初始化需要一段時間

5.2.6重啟容器

?docker restart $container_id

5.2.7列出docker中的鏡像

docker image list

5.2.8查看鏡像、容器、數(shù)據(jù)卷所占用的空間

docker system df

5.2.9查看虛懸鏡像

docker image ls -f dangling=true

5.2.10刪除虛懸鏡像

docker image prune

5.2.11列出docker容器中的頂層鏡像

docker image ls

5.2.12列出docker中所有鏡像

docker image ls -a

5.2.13查看正在運行的容器

docker?ps

5.2.14查看所有容器,包括停止的

docker?ps -a

5.2.15查看最新創(chuàng)建的容器

docker?ps -l

5.2.16查看最新創(chuàng)建的x個容器

docker?ps -n=2

5.2.17列出某一個特定鏡像

docker image ls xxx(鏡像名稱)

5.2.18查看某個鏡像某個版本之后的鏡像

docker image ls -f since=mongo:3.2

docker image ls -f before=mongo:3.2

5.2.19列出鏡像的id

docker image ls -q

5.2.20列出鏡像的id以及名稱

docker image ls --format “{{.ID}}:{{.Repository}}”

以表格等距顯示,并且有標(biāo)題行

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

5.2.21刪除本地鏡像

如果要刪除本地的鏡像,可以使用 docker image rm 命令,其格式為:

$ docker image rm 鏡像名稱/短id

如果有兩個相同id的鏡像存在,可以使用docker image rmi –f <imageid>

5.2.22列出某一倉庫所有的鏡像

docker image ls -q XXXX(倉庫名)

5.2.23刪除某一倉庫的鏡像

docker image rm $(docker image ls -q redis)

鏡像是容器的基礎(chǔ),每次執(zhí)行 docker run 的時候都會指定哪個鏡像作為容器運行的基礎(chǔ)。

5.2.24定制web服務(wù)器的例子

docker run --name webserver -d -p 80:80 nginx

端口號1:端口號2 其中端口號2為容器內(nèi)部端口號,其中端口號1為宿主機端口號

5.2.25可以使用dockerfile定制鏡像

在一個空白目錄中,建立一個文本文件,并命名為 Dockerfile :

$ mkdir mynginx

$ cd mynginx

$ touch Dockerfile

在Dockeerfile文件中寫入如下內(nèi)容

FROM nginx

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

from指定基礎(chǔ)鏡像

RUN 指令是用來執(zhí)行命令行命令的

在Dockerfile所在目錄下執(zhí)行

docker build -t nginx:v3 .

會看到如下輸出

Sending build context to Docker daemon 2.048 kB

Step 1 : FROM nginx

---> e43d811ce2f4

Step 2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

---> Running in 9cdc27646c7b

---> 44aa4490ce2c

Removing intermediate container 9cdc27646c7b

Successfully built 44aa4490ce2c

docker build的指令

這里我們使用了 docker build 命令進行鏡像構(gòu)建。其格式為:

docker build [選項] <上下文路徑/URL/->

5.2.26容器的導(dǎo)出

docker?export containerid >?導(dǎo)出的文件壓縮包

5.2.27容器的導(dǎo)入

docker?import? -?新鏡像名 <文件名稱

5.2.28鏡像的備份與恢復(fù):

docker?save -o?備份鏡像名稱?已經(jīng)存在的鏡像

查看是否已經(jīng)備份成功?ls

刪除備份的鏡像?docker?rmi?備份的鏡像名稱

導(dǎo)入備份的鏡像?docker?load <備份的鏡像名稱

5.2.29網(wǎng)絡(luò)端口的快捷方式

通過docker?ps可以查看正在運行的容器,同時可以查看容器的端口映射

5.2.30查看web應(yīng)用程序的日志

可以查看容器內(nèi)部的標(biāo)準(zhǔn)輸出

docker logs[id或者名字]

查看web應(yīng)用程序容器的進程

docker top [容器名或id]

檢查web應(yīng)用程序

docker inspect <鏡像名>

5.2.31 容器的啟動與停止

docker? stop?容器名或ID? ?停止容器

docker? start?容器名或ID? ?啟動容器

docker? rm? ? 容器名或ID? ?刪除容器時,容器必須停止

5.2.32容器的查找:

docker search?容器名或id

5.2.33從主機往容器中拷貝

將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下。

docker cp /www/runoob 96f7f14e99ab:/www/

2、將容器中文件拷往主機

將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中。

docker cp? 96f7f14e99ab:/www /tmp/

將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重命名為www。

docker cp /www/runoob 96f7f14e99ab:/www

5.2.34 docker容器的自啟動

在容器退出或斷電開機后,docker可以通過在容器創(chuàng)建時的--restart參數(shù)來指定重啟策略;

# 多個參數(shù)值選擇

no? 不自動重啟容器. (默認(rèn)value)

on-failure? 容器發(fā)生error而退出(容器退出狀態(tài)不為0)重啟容器,可以指定重啟的最大次數(shù),如:on-failure:10

unless-stopped? 在容器已經(jīng)stop掉或Docker stoped/restarted的時候才重啟容器

always? 在容器已經(jīng)stop掉或Docker stoped/restarted的時候才重啟容器,手動stop的不算

例如:

# 設(shè)置啟動策略

docker run --restart always --name mynginx -d nginx

如果容器已經(jīng)被創(chuàng)建,需要修改策略

docker update --restart no mynginx

5.2.35 建立本地倉庫

建立本地倉庫,首先下載registry鏡像

docker pull registry

默認(rèn)情況下,會將倉庫存放于容器內(nèi)的/var/lib/registry目錄下,這樣如果容器被刪除,則存放于容器中的鏡像也會丟失,所以我們一般情況下會指定本地一個目錄(剛剛創(chuàng)建的/home/docker_registry)掛載到容器內(nèi)的/var/lib/registry下,如下:

docker run -d -p 5000:5000 -v /home/docker_registry: /var/lib/registry registry

至此我們就創(chuàng)建了一個私有倉庫,地址在本機的5000端口上,我的是192.168.248.132,即:192.168.248.132:5000

測試調(diào)試

把一個本地鏡像push到私有倉庫中

在一臺裝有docker的機器下pull一個比較小的鏡像來測試

docker pull busybox

接下來修改一下該鏡像的tag

docker tag busybox 192.168.248.132:5000/busybox

接下來把打了tag的鏡像上傳到私有倉庫

docker push 192.168.2.114:5000/busybox

此時報錯

The push refers to repository

[192.168.248.132:5000/busybox]

Get http://192.168.248.132:5000/v2/: dial tcp 192.168.248.132:5000: connect: connection refused

因為Docker從1.3.X之后,與docker registry交互默認(rèn)使用的是https,然而此處搭建的私有倉庫只提供http服務(wù),所以當(dāng)與私有倉庫交互時就會報上面的錯誤。

為了解決這個問題需要在啟動docker server時增加啟動參數(shù)為默認(rèn)使用http訪問。修改docker啟動配置文件:

vim? /usr/lib/systemd/system/docker.service

找到?ExecStart,修改為如下內(nèi)容

ExecStart=/usr/bin/dockerd? --insecure-registry 192.168.248.132:5000

重啟docker:

systemctl daemon-reload

systemctl restart docker

然后上傳成功

docker push 192.168.248.132:5000/busybox

進行驗證從私有倉庫pull下該鏡像

docker pull 192.168.248.132:5000/busybox

備注:

鏡像的存儲路徑 /var/lib/docker,當(dāng)碰到打算刪除掉docker鏡像但是發(fā)現(xiàn)有幾個鏡像就是刪除不了,加了-f強制刪除也不行,一直報Error: No such container的錯誤,最后終于找到了辦法直接刪除文件

停掉docker服務(wù),systemctl stop docker

刪除文件 rm –rf /var/lib/docker

5.2.36 對現(xiàn)有鏡像進行修改,如安裝包,修改配置文件以后做出新的鏡像

[root@localhost containers]# docker images

REPOSITORY????????? TAG???????????????? IMAGE ID??????????? CREATED???????????? SIZE

centos????????????? v1????????????????? e726f783613f??????? 2 minutes ago?????? 336MB

tomcat????????????? latest????????????? dd6ff929584a??????? 42 hours ago??????? 463MB

mysql?????????????? latest????????????? 91dadee7afee??????? 2 days ago????????? 477MB

centos????????????? latest????????????? 1e1148e4cc2c??????? 3 months ago??????? 202MB

首先登陸要修改的容器

docker run -d -it 1e1148e4cc2c

安裝依賴包

yum install vim net-tools telnet –y

安裝成功以后退出該容器

然后執(zhí)行如下指令

[root@localhost ~]# docker commit 5fc7cd5223a9(容器id) centos:v1

這樣就將修改的容器重新打包鏡像進行上傳

通過docker images可以看到新的鏡像文件

5.2.37 實現(xiàn)docker容器與本地卷的掛載

[root@localhost ~]# docker images

REPOSITORY????????? TAG???????????????? IMAGE ID??????????? CREATED???????????? SIZE

centos????????????? latest????????????? 9f38484d220f??????? 2 weeks ago???????? 202MB

centos????????????? v1????????????????? e726f783613f??????? 3 weeks ago???????? 336MB

tomcat????????????? latest????????????? dd6ff929584a??????? 3 weeks ago???????? 463MB

mysql?????????????? latest????????????? 91dadee7afee??????? 3 weeks ago???????? 477MB

centos????????????? ????????????? 1e1148e4cc2c??????? 3 months ago??????? 202MB

[root@localhost ~]# docker run -it -d --name lvm -v /data:/data 9f38484d220f

31f66d1fb09534c04b7cc6bee200025a50ea39e01835fd07ac89ace30206e534

[root@localhost ~]# docker ps

CONTAINER ID??????? IMAGE?????????????? COMMAND???????????? CREATED???????????? STATUS????????????? PORTS?????????????? NAMES

31f66d1fb095??????? 9f38484d220f??????? "/bin/bash"???????? 5 seconds ago?????? Up 3 seconds??????????????????????????? lvm

其中掛載目錄的對應(yīng)關(guān)系為“宿主機對應(yīng)存在的目錄:容器對應(yīng)存在的目錄”,這要求宿主機的掛載目錄已經(jīng)并且必須存在,容器中的目錄會相應(yīng)的進行創(chuàng)建

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,268評論 2 375

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