日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 精通之常用命令

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 精通之常用命令 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 MB

docker 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)行格式化話展示

PlaceholderDescription
.IDImage ID
.RepositoryImage repository
.TagImage tag
.DigestImage digest
.CreatedSinceElapsed time since the image was created
.CreatedAtTime when the image was created
.SizeImage disk size

$?docker images -q

這個(gè)其實(shí)跟 docker images --format "{{.ID}}" 效果是一樣的,是只展示ID

總結(jié)

以上是生活随笔為你收集整理的Docker 精通之常用命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。