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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

操作 Docker 容器

發(fā)布時間:2024/9/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作 Docker 容器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

操作 Docker 容器

容器是 Docker 又一核心概念。

簡單的說,容器是獨立運行的一個或一組應用,以及它們的運行態(tài)環(huán)境。對應的,虛擬機可以理解為模擬運行的一整套操作系統(tǒng)(提供了運行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應用。

本章將具體介紹如何來管理一個容器,包括創(chuàng)建、啟動和停止等。

啟動容器

啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止狀態(tài)(stopped)的容器重新啟動。

因為 Docker 的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創(chuàng)建容器。

新建并啟動

所需要的命令主要為 docker run。

例如,下面的命令輸出一個 “Hello World”,之后終止容器。

$ docker run ubuntu:18.04 /bin/echo 'Hello world' Hello world

這跟在本地直接執(zhí)行 /bin/echo 'hello world' 幾乎感覺不出任何區(qū)別。

下面的命令則啟動一個 bash 終端,允許用戶進行交互。

$ docker run -t -i ubuntu:18.04 /bin/bash root@af8bae53bdd3:/#

其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上, -i 則讓容器的標準輸入保持打開。

在交互模式下,用戶可以通過所創(chuàng)建的終端來輸入命令,例如

root@af8bae53bdd3:/# pwd / root@af8bae53bdd3:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

當利用 docker run 來創(chuàng)建容器時,Docker 在后臺運行的標準操作包括:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像創(chuàng)建并啟動一個容器
  • 分配一個文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個 ip 地址給容器
  • 執(zhí)行用戶指定的應用程序
  • 執(zhí)行完畢后容器被終止

啟動已終止容器

可以利用 docker container start 命令,直接將一個已經(jīng)終止的容器啟動運行。

容器的核心為所執(zhí)行的應用程序,所需要的資源都是應用程序運行所必需的。除此之外,并沒有其它的資源。可以在偽終端中利用 ps 或 top 來查看進程信息。

root@ba267838cc1b:/# psPID TTY TIME CMD1 ? 00:00:00 bash11 ? 00:00:00 ps

可見,容器中僅運行了指定的 bash 應用。這種特點使得 Docker 對資源的利用率極高,是貨真價實的輕量級虛擬化。

后臺運行

更多的時候,需要讓 Docker 在后臺運行而不是直接把執(zhí)行命令的結(jié)果輸出在當前宿主機下。此時,可以通過添加 -d 參數(shù)來實現(xiàn)。

下面舉兩個例子來說明一下。

如果不使用 -d 參數(shù)運行容器。

$ docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" hello world hello world hello world hello world

容器會把輸出的結(jié)果 (STDOUT) 打印到宿主機上面

如果使用了 -d 參數(shù)運行容器。

$ docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

此時容器會在后臺運行并不會把輸出的結(jié)果 (STDOUT) 打印到宿主機上面(輸出結(jié)果可以用 docker logs 查看)。

注: 容器是否會長久運行,是和 docker run 指定的命令有關(guān),和 -d 參數(shù)無關(guān)。

使用 -d 參數(shù)啟動后會返回一個唯一的 id,也可以通過 docker container ls 命令來查看容器信息。

$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77b2dc01fe0f ubuntu:18.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright

要獲取容器的輸出信息,可以通過 docker container logs 命令。

$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77b2dc01fe0f ubuntu:18.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright

終止容器

可以使用 docker container stop 來終止一個運行中的容器。

此外,當 Docker 容器中指定的應用終結(jié)時,容器也自動終止。

例如對于上一章節(jié)中只啟動了一個終端的容器,用戶通過 exit 命令或 Ctrl+d 來退出終端時,所創(chuàng)建的容器立刻終止。

終止狀態(tài)的容器可以用 docker container ls -a 命令看到。例如

docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba267838cc1b ubuntu:18.04 "/bin/bash" 30 minutes ago Exited (0) About a minute ago trusting_newton 98e5efa7d997 training/webapp:latest "python app.py" About an hour ago Exited (0) 34 minutes ago backstabbing_pike

處于終止狀態(tài)的容器,可以通過 docker container start 命令來重新啟動。

此外,docker container restart 命令會將一個運行態(tài)的容器終止,然后再重新啟動它。

進入容器

在使用 -d 參數(shù)時,容器啟動后會進入后臺。

某些時候需要進入容器進行操作,包括使用 docker attach 命令或 docker exec 命令,推薦大家使用 docker exec 命令,原因會在下面說明。

attach 命令

下面示例如何使用 docker attach 命令。

$ docker run -dit ubuntu 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia$ docker attach 243c root@243c32535da7:/#

注意: 如果從這個 stdin 中 exit,會導致容器的停止。

exec 命令

-i -t 參數(shù)

docker exec 后邊可以跟多個參數(shù),這里主要說明 -i -t 參數(shù)。

只用 -i 參數(shù)時,由于沒有分配偽終端,界面沒有我們熟悉的 Linux 命令提示符,但命令執(zhí)行結(jié)果仍然可以返回。

當 -i -t 參數(shù)一起使用時,則可以看到我們熟悉的 Linux 命令提示符。

$ docker run -dit ubuntu 69d137adef7a8a689cbcb059e94da5489d3cddd240ff675c640c8d96e84fe1f6$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69d137adef7a ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds zealous_swirles$ docker exec -i 69d1 bash ls bin boot dev ...$ docker exec -it 69d1 bash root@69d137adef7a:/#

如果從這個 stdin 中 exit,不會導致容器的停止。這就是為什么推薦大家使用 docker exec 的原因。

更多參數(shù)說明請使用 docker exec --help 查看。

導出和導入容器

導出容器

如果要導出本地某個容器,可以使用 docker export 命令。

$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:18.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test $ docker export 7691a814370e > ubuntu.tar

這樣將導出容器快照到本地文件。

導入容器快照

可以使用 docker import 從容器快照文件中再導入為鏡像,例如

$ cat ubuntu.tar | docker import - test/ubuntu:v1.0 $ docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

此外,也可以通過指定 URL 或者某個目錄來導入,例如

$ docker import http://example.com/exampleimage.tgz example/imagerepo

注:用戶既可以使用 docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用 docker import 來導入一個容器快照到本地鏡像庫。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當時的快照狀態(tài)),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數(shù)據(jù)信息。

刪除

刪除容器

可以使用 docker container rm 來刪除一個處于終止狀態(tài)的容器。例如

$ docker container rm trusting_newton trusting_newton

如果要刪除一個運行中的容器,可以添加 -f 參數(shù)。Docker 會發(fā)送 SIGKILL 信號給容器。

清理所有處于終止狀態(tài)的容器

用 docker container ls -a 命令可以查看所有已經(jīng)創(chuàng)建的包括終止狀態(tài)的容器,如果數(shù)量太多要一個個刪除可能會很麻煩,用下面的命令可以清理掉所有處于終止狀態(tài)的容器。

$ docker container prune

總結(jié)

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

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