DOCKER 常用命令

啟動docker

docker run

查看版本

docker version

查看本地鏡像

docker images
直接列出鏡像結(jié)果,并且只包含鏡像ID和倉庫名:
image ls 就是 images
docker image ls --format "{{.ID}}: {{.Repository}}"
以表格等距顯示,并且有標題行,和默認一樣,不過自己定義列:
不要打錯單詞了
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

下載鏡像

docker pull <$images>
例如: docker pull busybox

docker pull [選項] [Docker Registry 地址[:端口號]/] 倉庫名[:標簽]
具體的選項可以通過 docker pull --help 命令看到,這里我們說一下鏡像名稱的格式。

  • Docker 鏡像倉庫地址:地址的格式一般是 <域名/IP>[:端口號]。默認地址是 Docker Hub。
  • 倉庫名:如之前所說,這里的倉庫名是兩段式名稱,即 <用戶名>/<軟件名>。對于 Docker Hub,如果不給出用戶名,則默認為 library,也就是官方鏡像。

比如: docker pull ubuntu:16.04

進入shell命令

docker run -i -t $IMAGE /bin/bash
$IMAGE是鏡像的名字,不能是容器的名字或者ID
-t:在新容器內(nèi)指定一個偽終端或終端。
-i:允許你對容器內(nèi)的標準輸入 (STDIN) 進行交互。

docker run -it --rm ubuntu bash

  • -it:這是兩個參數(shù),一個是 -i:交互式操作,一個是 -t 終端。我們這里打算進入 bash 執(zhí)行一些命令并查看返回結(jié)果,因此我們需要交互式終端。
  • --rm:這個參數(shù)是說容器退出后隨之將其刪除。默認情況下,為了排障需求,退出的容器并不會立即刪除,除非手動 docker rm。我們這里只是隨便執(zhí)行個命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費空間。
  • ubuntu::這是指用 ubuntu 鏡像為基礎來啟動容器。
  • bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 bash。

列出所有的容器

docker ps -a[-l]
如果只是docker ps則是列出當前運行的容器

列出容器的配置

docker inspect IMAGE_ID
IMAGE_ID可以通過docker ps -l命令查看到。

給容器重命名

docker run --name=container01-i -t ubuntu /bin/bash
ubutun是指的鏡像,container01指的是重命名的名字
重命名后,使用docker ps -l列出所有容器時,在最后一列的NAMES中顯示出來

重新啟動停止的命令

docker start [-i] NAMES
NAMES是容器的名字,或者是容器的ID
每次使用鏡像啟動時都會創(chuàng)建一個容器,使用該命令時就相當于使用之前創(chuàng)建過的容器不會再次創(chuàng)建了。
如果需要打開交互終端,需要使用 -i ,但不需要加上 -t
注意的是,可能不會自動顯示命令終端,所以還需要敲擊回車鍵。

刪除停止的容器

docker rm NAMES
只能用來刪除停止的容器,正在運行的容器不可刪除
NAMES可以是名字,也可以是ID

守護式容器進入方式

首先創(chuàng)建一個容器
docker run -i -t ubuntu /bin/bash
然后使用ctrl + pctrl + q的組合鍵,即按住ctrl鍵然后按P和Q,而不是直接使用exit命令來退出了
使用docker ps可以看到上面的容器還是運行著的
重新進入運行中的容器
docker attach NAMES
NAMES可以是容器的NAMES或者ID

啟動守護式容器(重要方式)

docker run -d 鏡像名
使用這種方式可以替代上面那段中提到的方式。
糾正:如果只是使用docker run -d 鏡像名命令無法創(chuàng)建守護式容器,還是需要使用
docker run -it -d ubuntu /bin/bash才行,加上 <strong>-d</strong>
使用docker ps可以看到剛啟動的容器在后臺運行

查看容器日志

docker logs [-f] [-t] [--tail] 容器名
    -f --follows=true | false 默認為false
    -t --timestamp=true | false 默認為false
    --tail="all"

-f: 一直跟蹤日志的變化并返回結(jié)果
-t: 在返回的結(jié)果上加上時間戳
--tail: 在結(jié)尾上返回多少數(shù)量的日志,默認為all,返回所有的日志
例如使用該命令
docker run --name dc01 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
--name表示將該容器命名為dc01
在該容器中,一直打印hello world
(1) docker logs dc01 會將所有日志打印出來,每一行只會顯示 hello world,不會自動更新
(2) docker logs -t dc01 在(1)的基礎上,在每一行前面加上時間戳
(3) docker logs -tf dc01 在(2)的基礎上,會隔一秒自動多打印一句 hello world,自動更新
(4) docker logs -tf --tail 10 dc01 會從底部開始,取出10條log,并且會自動更新log,如果--tail的值為0,就只會打印最新的日志

查看容器內(nèi)的進程

docker top 容器名

在運行中的容器中啟動新的進程

docker exec [-d] [-i] [-t] 容器名 [COMMAND][ARGS]
之前的dc01容器沒有停止,在后臺運行
執(zhí)行這條命令
docker exec -i -t dc01 /bin/bash,使用ctrl+ p 和 ctr + q 讓容器稱為守護式容器
然后通過docker top dc01可以看到容器中多了一個進程

停止守護式容器

docker stop 容器名
docker kill 容器名
stop命令是發(fā)送一條命令給容器,等待容器的停止
kill命令直接停止容器

查看端口映射

docker post 容器名

查看鏡像詳細信息

docker inspect 鏡像名

刪除鏡像

docker rmi [OPTIONS] 鏡像名 [IMAGE...]
如果使用docker rmi ubuntu:14.04刪除鏡像的話,可能只是刪除對應標簽,可以使用
docker rmi 鏡像ID來刪除鏡像

搜索鏡像

docker search [OPTIONS] TERM
    --automated=false # 只會顯示自動化構(gòu)建的鏡像
    --no-trunc=false # 如果為True,將會顯示完整的信息
    -s, --stars=0 # 限定最小星級

一次最多返回25個結(jié)果。
例如,docker search ubuntu -s 3

拉取鏡像

docker pull [OPTIONS] NAME[:TAG]
    -a, --all-tags=false # 是否下載所有搜索到的版本

設置使用國內(nèi)的鏡像加速網(wǎng)站

http://624869e7.m.daocloud.io
修改文件vim /etc/default/docker,加入語句

DOCKER_OPTS = "--registry-mirror=http://624869e7.m.daocloud.io"

重啟docker

sudo service docker restart

推送鏡像

docker push 鏡像名

刪除所有的image

docker rmi -f $(docker images -qa)

后臺程序機制

docker run -d centos
問題,使用上面的命令后, 會發(fā)現(xiàn)啟動后的容器已經(jīng)退出了。
這個問題很需要,需要說明一下:Docker容器后臺運行,就必須要有一個前臺進程。
容器運行的命令如果不是那些一直掛起的命令,例如top,tail等,是會自動退出的。
這是docker的機制問題,比如web容器,已nginx為例,正常情況下,配置啟動服務只需要響應的service即可,例如service nginx start。但是這樣做的話,nginx為后臺模式運行,就導致docker前臺沒有運行的應用,這樣的容器后臺啟動后悔立即自殺,因為他覺得無事可做。
最佳的解決方案是,將要運行的程序以前臺進程的形式運行。

進入正在運行的容器并以命令行交互

  • docker exec -it 容器ID /bin/bash
  • docker attach 容器ID
    這兩個命令的不同,attach是直接進入容器,不會啟動新的進程;exec打開新的終端,并可以啟動新的進程。
    例如,使用exec可以執(zhí)行這種命令:
    docker exec -t mycentos ls -l /tmp
    會在mycentos容器內(nèi)部使用ls -l /tmp命令,并將結(jié)果返回到docker上,而不需要到容器內(nèi)部去執(zhí)行命令了。

docker啟動容器幾個重要的命令

  • docker run --name=mycentos centos會創(chuàng)建一個叫mycentos的centos容器,該命令只會創(chuàng)建容器不會運行
  • docker run -d --name=mycentos2 centos會創(chuàng)建一個在后臺運行的容器,但由于docker機制(見上面解釋),會立即殺死,所以當使用docker ps查看時,也沒有在后臺運行
  • docker run -it --name=mycentos3docker run -it --name=mycentos4 /bin/bash都創(chuàng)建一個容器后,會打開容器的shell界面,可以使用ctrl + pctrl + q將容器放到后臺進程去
  • docker run --name=mycentos5 /bin/bashdocker run --name=mycentos centos命令效果一樣,后面的/bin/bash不生效
進入運行中的容器
  • docker start mycentos3不會進入shell界面
  • docker start -i mycentos3會進入容器的shell界面
  • docker attach mycentos3會進入容器的shell界面
  • docker exec -it mycentos3 /bin/bash可以進入容器的shell界面,會創(chuàng)建一個新的進程(即打開一個新的shell終端)
  • docker exec -it mycentos3不會進入
啟動已創(chuàng)建但未運行的容器

docker start mycentos,需要注意一個很讓人困惑的問題,mycentos從來沒有啟動過后者進入后臺進程過,無法使用該命令啟動;但mycentos3已經(jīng)啟動過但使用exit退出后(或者使用stop,kill命令殺死容器進程),都是可以使用該命令正常啟動的,很困惑的一個問題,待解。

從docker容器復制文件到linux系統(tǒng)

docker cp 容器名(容器ID):/tmp/yum.log(文件具體路徑) /home/flynngod(目的路徑)

從宿主機復制文件到docker容器

docker cp cp.txt(系統(tǒng)文件路徑) 容器名(容器ID):/tmp(容器文件路徑)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • docker常用命令詳解 - CSDN博客 本文只記錄docker命令在大部分情境下的使用,如果想了解每一個選項的...
    Meathill大魔王閱讀 885評論 1 2
  • Docker常用命令使用 docker ps列出容器使用語法:docker ps [options]options...
    StrongZhao閱讀 750評論 0 0
  • 本文只記錄docker命令在大部分情境下的使用,如果想了解每一個選項的細節(jié),請參考官方文檔,這里只作為自己以后的備...
    Joncc閱讀 319評論 0 0
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,850評論 15 147
  • 沙盤小組中出現(xiàn)了這樣的頭像,那就把她了解清楚。 貝斯特女神,即埃及貓神,象征著月亮的溫暖和女性魅力力量。她的膜拜最...
    花兒心理閱讀 2,463評論 0 0

友情鏈接更多精彩內(nèi)容