Docker 精通之常用命令
Docker 精通系列
- Docker 精通之入門
- Docker 精通之微服務(wù)
- Docker 精通之常用命令
- Docker 精通之 Dockerfile
配置文件路徑
/etc/sysconfig/docker?
docker鏡像及容器目錄
主目錄:/var/lib/docker
容器存放目錄:/var/lib/docker/containers/
鏡像存放目錄:/var/lib/docker/image
幫助信息
docker --help
docker command --help????# 比如?docker image --help
docker info ???????????????????????# 顯示docker的安裝信息,及運(yùn)行狀態(tài)
docker version??????????????????# 版本版本信息
docker container 相關(guān)
$ docker container ls? ? ? ? ? ?
列出本機(jī)正在運(yùn)行的容器
$ docker container ls --all? ?
列出本機(jī)所有容器,包括終止運(yùn)行的容器
$ docker container kill [containID]? ? ?
終止容器
$ docker container rm [containerID] ?
刪除終止運(yùn)行的容器,參數(shù)如下:
- -v:刪除容器掛載的數(shù)據(jù)卷,默認(rèn)情況下刪除容器不會(huì)刪除數(shù)據(jù)卷,要?jiǎng)h除一個(gè)數(shù)據(jù)卷,必須在刪除最后一個(gè)掛載該數(shù)據(jù)卷的容器時(shí)使用 -v 參數(shù)
- -f:如果容器正在運(yùn)行,則強(qiáng)行終止并刪除
$ docker [container] run -p 8000:3000 koa-demo?
運(yùn)行容器,詳細(xì)參數(shù)如下:
- -p 8000:3000? ? ?# 容器的 3000 端口映射到本機(jī)的 8000 端口。
- -d? ? ? ? ? ? ? ? ? ? ? ?# 容器啟動(dòng)后,在后臺(tái)運(yùn)行
- -it? ? ? ? ? ? ? ? ? ? ? ?#?容器的 Shell 映射到當(dāng)前的 Shell,然后你在本機(jī)窗口輸入的命令,就會(huì)傳入容器。-t分配一個(gè)偽終端并綁定在容器的標(biāo)準(zhǔn)輸入上,-i讓容器的標(biāo)準(zhǔn)輸入保持打開
- koa-demo:0.0.1 # image 文件的名字(如果有標(biāo)簽,還需要提供標(biāo)簽,默認(rèn)是 latest 標(biāo)簽)。
- /bin/bash? ? ? ? ? ? # 容器啟動(dòng)以后,內(nèi)部第一個(gè)執(zhí)行的命令。這里是啟動(dòng) Bash,保證用戶可以使用 Shell。
- --name flp? ? ? ? ? # 容器的名字flp
- --rm? ? ? ? ? ? ? ? ? ? # 容器終止運(yùn)行后自動(dòng)刪除容器文件。
- --volume "$PWD/":/var/www/html? # 將當(dāng)前目錄($PWD)映射到容器的/var/www/html(Apache 對(duì)外訪問的默認(rèn)目錄)。因此,當(dāng)前目錄的任何修改,都會(huì)反映到容器里面,進(jìn)而被外部訪問到,可指定多個(gè);
- --volume /var/www/html? ? ? ? ? ? ? ? # 在容器內(nèi)部創(chuàng)建一個(gè)共享數(shù)據(jù)卷,數(shù)據(jù)卷只有在未被任何容器使用時(shí)才能被刪除
- --volume-from 容器ID? ? ? ? ? ? ? ? ? ? # 掛載容器ID中的共享數(shù)據(jù)卷,實(shí)現(xiàn)在容器內(nèi)部共享數(shù)據(jù)卷
- -v? ?# 同--volume
- :ro? # 只讀,"$PWD/":/var/www/html:ro
- --env MYSQL_ROOT_PASSWORD=123456 # 向容器進(jìn)程傳入一個(gè)環(huán)境變量MYSQL_ROOT_PASSWORD,該變量會(huì)被用作 MySQL 的根密碼。
- --env MYSQL_DATABASE=wordpress? ? ? ? ? ?# 向容器進(jìn)程傳入一個(gè)環(huán)境變量MYSQL_DATABASE,容器里面的 MySQL 會(huì)根據(jù)該變量創(chuàng)建一個(gè)同名數(shù)據(jù)庫(本例是WordPress)
- --link wordpressdb:mysql ????# 表示 WordPress 容器要連到wordpressdb容器,冒號(hào)表示該容器的別名是mysql
- -p 127.0.0.2:8080:80 ??????????# 將容器的 80 端口映射到127.0.0.2的8080端口
- -P? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 隨機(jī)映射一個(gè)端口
- --cpuset-cpus=0-3? ? ? ? ? ? ? ?# 設(shè)定容器可以使用哪些主機(jī)上的cpu核心,0-3:表示0核~3核,4個(gè)核心,1,2:表示1核和2核
- --memory=104857600? ? ? ? ?# 可以使用主機(jī)內(nèi)存的上限,單位是B,這里表示100M 1024B * 1024B * 100
使用docker run命令來啟動(dòng)容器,docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括
- 1.檢查本地是否存在指定的鏡像,不存在則從公有倉庫下載
- 2.使用鏡像創(chuàng)建并啟動(dòng)容器
- 3.分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀可寫層
- 4.從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口道容器中去
- 5.從地址池分配一個(gè)ip地址給容器
- 6.執(zhí)行用戶指定的應(yīng)用程序
- 7.執(zhí)行完畢之后容器被終止
$ docker container start [containerID]
前面的docker container run命令是新建容器,每運(yùn)行一次,就會(huì)新建一個(gè)容器。如果希望重復(fù)使用容器,就要使用docker container start命令,它用來啟動(dòng)已經(jīng)生成、已經(jīng)停止運(yùn)行的容器文件。
$ bash container stop [containerID]
前面的docker container kill命令終止容器運(yùn)行,相當(dāng)于向容器里面的主進(jìn)程發(fā)出 SIGKILL 信號(hào)。而docker container stop命令也是用來終止容器運(yùn)行,相當(dāng)于向容器里面的主進(jìn)程發(fā)出 SIGTERM 信號(hào),然后過一段時(shí)間再發(fā)出 SIGKILL 信號(hào)。這兩個(gè)信號(hào)的差別是,應(yīng)用程序收到 SIGTERM 信號(hào)以后,可以自行進(jìn)行收尾清理工作,但也可以不理會(huì)這個(gè)信號(hào)。如果收到 SIGKILL 信號(hào),就會(huì)強(qiáng)行立即終止,那些正在進(jìn)行中的操作會(huì)全部丟失。
$ docker container logs [containerID]?
命令用來查看 docker 容器的輸出,即容器里面 Shell 的標(biāo)準(zhǔn)輸出。如果docker run命令運(yùn)行容器的時(shí)候,沒有使用-it參數(shù),就要用這個(gè)命令查看輸出。
- -f:實(shí)時(shí)輸出
$ docker container exec -it [containerID] /bin/bash?
用于進(jìn)入一個(gè)正在運(yùn)行的 docker 容器。如果docker run命令運(yùn)行容器的時(shí)候,沒有使用-it參數(shù),就要用這個(gè)命令進(jìn)入容器。一旦進(jìn)入了容器,就可以在容器的 Shell 執(zhí)行命令了。也可以把 /bin/bash 換成命令,作用是在容器里執(zhí)行命令,并輸出結(jié)果
$ docker container cp [containID]:[/path/to/file] [/path/to/file]
# docker container cp命令用于從正在運(yùn)行的 Docker 容器里面,將文件拷貝到本機(jī)。也可以將兩個(gè)參數(shù)換下位置,就是將本機(jī)文件拷貝到docker
$ docker attach 容器ID? ?
連接到啟動(dòng)的容器
docker 命令
- docker search -s 100 centos ??#搜索鏡像centos,-s :搜索星標(biāo)至少為100的鏡像
- docker inspect 鏡像ID? ? ? ? ? ? ?#查看鏡像內(nèi)邊信息
- docker restart 容器ID? ? ? ? ? ? ? #重啟鏡像
- docker?pull?image_name? ? ? ? ?#下載鏡像
- docker?ps? ? ? ?#列出當(dāng)前所有正在運(yùn)行的container??
- ?-a? ?#列出所有的container??
- ?-l? ? #列出最近一次啟動(dòng)的container????
- docker rm?容器ID #刪除container
- -f:如果容器正在運(yùn)行,則強(qiáng)行終止并刪除
- -v:刪除容器掛載的數(shù)據(jù)卷,默認(rèn)情況下刪除容器不會(huì)刪除數(shù)據(jù)卷,要?jiǎng)h除一個(gè)數(shù)據(jù)卷,必須在刪除最后一個(gè)掛載該數(shù)據(jù)卷的容器時(shí)使用 -v 參數(shù)
- docker rm `docker ps -a -q` #刪除所有容器
- docker kill `docker ps -q`
- docker rmi `docker images -q -a`
- docker wait 容器ID #阻塞對(duì)容器的其他調(diào)用方法,直到容器停止后退出
- docker top 容器ID? #查看容器中運(yùn)行的進(jìn)程
- docker diff?容器ID? #查看容器中的變化
- docker inspect?容器ID #查看容器詳細(xì)信息(輸出為Json)
- -f:查找特定信息,如docker inspect?-f?'{{ .NetworkSettings.IPAddress }}'
- docker port?容器ID?5000 #查看容器的5000端口對(duì)應(yīng)本地機(jī)器的IP和端口號(hào)
容器,鏡像導(dǎo)入導(dǎo)出
docker export 容器ID > container.tar #導(dǎo)出容器migrate.tar,相當(dāng)于快照 docker import container.tar - test/ubuntu #導(dǎo)入鏡像,鏡像名字為test/ubuntu,load不可以指定名字 cat container.tar| docker import - test/ubuntu #導(dǎo)入鏡像,鏡像名字為test/ubuntu,load不可以指定名字docker save -o image.tar 鏡像ID ?#將一個(gè)鏡像導(dǎo)出為文件,會(huì)保存鏡像的所有記錄 docker load --input image.tar??? #導(dǎo)入image.tar到本地鏡像,import可以指定名字 docker load < image.tar ???? ????#導(dǎo)入image.tar到本地鏡像,import可以指定名字將 container 持久化為一個(gè) image
$ docker?commit?容器ID?新鏡像名?
- -a,?--author=""? ? ? # 作者?
- -m,?--message=""?# 注釋
- -p? ? ? ? ? ? ? ? ? ? ? ? ? # 在commit是,暫停容器執(zhí)行
發(fā)布 image 到倉庫
發(fā)布 image 需要有對(duì)應(yīng)的tag?
# 1、首先是登錄docker hub [root@docker-test1 ~]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username (wangshibo): you_name Password: Login Succeeded[root@docker-test1 ~]# docker push wangshibo/myubuntu:v1 The push refers to a repository [docker.io/wangshibo/myubuntu] An image does not exist locally with the tag: docker.io/wangshibo/myubuntu# 2、這里需要將ubuntu:v1鏡像改名,在名稱前加上自己的docker hub的Docker ID,即wangshibo [root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB wangshibo/myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB# 3、再次進(jìn)行推送(注意:下面的v1的tag標(biāo)簽可以不打,默認(rèn)是latest)。推送操作時(shí)間稍微會(huì)有一點(diǎn)長,耐心等待~ [root@docker-test1 ~]# docker push myubuntu:v1 The push refers to a repository [docker.io/myubuntu] b5948ba9486d: Pushed 8d7ea83e3c62: Mounted from library/ubuntu ... a30b835850bf: Mounted from library/ubuntu v1: digest: sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d size: 1564# 4、最后登錄自己的Docker Hub,即https://hub.docker.com/,登錄后,在Repositories里面就可以看到自己在上面推送的鏡像myubuntu:v1了,這是個(gè)對(duì)外的鏡像,可以在網(wǎng)絡(luò)上下載。在Docker hub上可以看到這個(gè)鏡像的下載命令(注意下載時(shí)跟上tag標(biāo)簽,如果是latest的默認(rèn)tag可以不跟) 也可以直接在Docker hub上刪除這個(gè)鏡像(Repositories-鏡像-Settings-delete)# 5、在本機(jī)刪除這個(gè)鏡像 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB# 注意上面有兩個(gè)6ce4aedd12cd的鏡像ID,此時(shí)直接使用這個(gè)鏡像ID是刪除不掉的 [root@docker-test1 ~]# docker rmi 6ce4aedd12cd Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories# 應(yīng)該先刪除docker tag改名前的鏡像,使用鏡像名稱刪除。(一般在docker tag鏡像改名后,最好刪除改名前的鏡像) [root@docker-test1 ~]# docker rmi myubuntu:v1 Untagged: myubuntu:v1 Untagged: wangshibo/myubuntu@sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d[root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB# 這個(gè)時(shí)候就可以刪除鏡像ID刪除了 [root@docker-test1 ~]# docker rmi 6ce4aedd12cd Untagged: wangshibo/myubuntu:v1 Deleted: sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d Deleted: sha256:0ddeb6a16badd042914c2e72b9ef0331550c1cdcc4bdc6650a90cd9f57f1501b [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MBdocker image 相關(guān)
$ docker image ls -a //??docker image ls --all
列出本機(jī)的所有 image 文件。
$ docker image rm [imageName]
刪除 image 文件
$ docker image tag [imageName] [username]/[repository]:[tag]
打標(biāo)簽。$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1? ? ?#?koa-demos:0.0.1 是 image 的 name,。ruanyf/koa-demos(新的名字):0.0.1(tag)
$ docker image build -t [username]/[repository]:[tag] .?
也可以不標(biāo)注用戶名,重新構(gòu)建一下 image 文件。
$ docker image push [username]/[repository]:[tag]
發(fā)布 image 文件。
$ docker image pull library/hello-world
將 image 文件從倉庫抓取到本地。library/hello-world是 image 文件在倉庫里面的位置,其中l(wèi)ibrary是 image 文件所在的組,hello-world是 image 文件的名字。由于 Docker 官方提供的 image 文件,都放在library組里面,所以它的是默認(rèn)組,可以省略。因此,上面的命令可以寫成這樣。$ docker image pull hello-world
$ docker image build -t koa-demo:0.0.1 .
創(chuàng)建image 文件,會(huì)用到dockerfile文件,參考?Docker 精通之 Dockerfile
- ????.???????#注意最后有一個(gè) "."代表本地路徑
- ????-t?????#指定image名字
- ????: ????#冒號(hào)后面可以添加標(biāo)簽
docker images 相關(guān)
$ docker images -a
展示本地的所有鏡像,默認(rèn)隱藏中間的鏡像
$ docker images --digests
展示鏡像的摘要
$ docker images -f xxxx
查看對(duì)應(yīng)的過濾條件,這個(gè)過濾標(biāo)簽的格式是 “key=value”,如果有多個(gè)條件,則使用這種 --filter "key1=value" --filter "key2=value"。比如:過濾沒有打標(biāo)簽的鏡像docker images -f "dangling=true",當(dāng)前支持的過濾配置的key為:
- dangling:顯示標(biāo)記為空的鏡像,值只有true和false
- label:這個(gè)是根據(jù)標(biāo)簽進(jìn)行過濾,其中l(wèi)able的值,是docker在編譯的時(shí)候配置的或者在Dockerfile中配置的
- before:這個(gè)是根據(jù)時(shí)間來進(jìn)行過濾,其中before的value表示某個(gè)鏡像構(gòu)建時(shí)間之前的鏡像列表
- since:跟before正好相反,表示的是在某個(gè)鏡像構(gòu)建之后構(gòu)建的鏡像
- reference:這個(gè)是添加正則進(jìn)行匹配
$?docker rmi $(docker images -f "dangling=true" -q)
表示清理當(dāng)前repo:tag為<none>的鏡像。在對(duì)應(yīng)的鏡像repo:tag構(gòu)建新的鏡像的時(shí)候,舊的鏡像就會(huì)從repo:tag中移走,進(jìn)而成為<none>,這個(gè)時(shí)候,我們就可以對(duì)這些進(jìn)行清理
$ docker images --format
這個(gè)是進(jìn)行對(duì)展示的進(jìn)行格式化話展示
| .ID | Image ID |
| .Repository | Image repository |
| .Tag | Image tag |
| .Digest | Image digest |
| .CreatedSince | Elapsed time since the image was created |
| .CreatedAt | Time when the image was created |
| .Size | Image disk size |
$?docker images -q
這個(gè)其實(shí)跟 docker images --format "{{.ID}}" 效果是一樣的,是只展示ID
總結(jié)
以上是生活随笔為你收集整理的Docker 精通之常用命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ic封装大全
- 下一篇: 网络安全学习笔记--《暗战强人:黑客攻防