操做 Docker 容器 | Docker 系列

前文回顧:git

有了鏡像的基礎,下面就開始建立容器吧。Docker 容器很是輕量級,隨時均可以建立和刪除,很是方便。github

建立並啓動容器

使用 docker run 命令來建立並啓動一個容器:docker

$ docker run -it centos /bin/echo 'hello world'
hello world
複製代碼

-t 參數讓 Docker 分配一個僞終端,並綁定到容器的標準輸入上,-i 參數讓容器的標準輸入持續打開。shell

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
df84684c3888        centos              "/bin/echo 'hello wo…"   10 seconds ago      Exited (0) 7 seconds ago                       admiring_noyce
複製代碼

docker ps 命令列出當前的容器,能夠看到,剛剛執行的容器輸出完信息以後就直接退出了。那有沒有辦法讓容器在後臺執行呢?答案固然是能夠的。centos

使用 -d 參數讓容器在後臺,以守護進程的方式執行,這也是在工做中最經常使用到的。bash

$ docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
fcb07a324388d58883e212ff5675ad7947a22c731f677d1a37ff7bc3d8bfa9a7
 $ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fcb07a324388        centos              "/bin/sh -c 'while t…"   6 seconds ago       Up 5 seconds                            beautiful_northcutt
複製代碼

這樣容器就在後臺運行了。微信

還有一種方式,使用 docker create 命令建立容器,而後使用 docker start 來啓動容器,兩條命令至關於 docker run 一條,這種方式不經常使用,就不作更多介紹了。post

下面聊聊 docker run 背後的故事,到底這一條命令背後,Docker 都爲咱們作了哪些操做呢?ui

  • 檢查本地是否存在指定鏡像,不存在就從公有倉庫下載;
  • 使用鏡像建立並啓動一個容器;
  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層;
  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中;
  • 從地址池配置一個 IP 地址給容器;
  • 執行用戶指定的命令或應用程序;
  • 執行完畢後容器被終止。

進入容器

當容器之後臺方式執行時,使用 docker exec 命令進入到容器中。spa

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fcb07a324388        centos              "/bin/sh -c 'while t…"   6 seconds ago       Up 5 seconds                            beautiful_northcutt
 $ docker exec -it fcb07a324388 /bin/bash
[root@fcb07a324388 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@fcb07a324388 /]#
複製代碼

進入到容器以後,就是一個 Linux 系統,Linux 支持的命令,容器也基本都支持。

這條命令仍是比較重要的,有時候咱們的應用出問題了,單純經過 logs 看不出問題的話,就須要咱們進入容器,來看看實際狀況。

想退出的話,直接 exit 命令就能夠了。

還有一個命令是 docker attach,可是它有一個缺點。當多個窗口同時 attach 到同一個容器時,全部窗口都會同步顯示,當某個窗口因命令阻塞時,其餘窗口也沒法執行操做。

因此,這個命令如今基本也不用了。

中止容器

使用 docker stop 命令來中止一個容器。

$ docker stop fcb
fcb
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
fcb07a324388        centos              "/bin/sh -c 'while t…"   23 minutes ago      Exited (137) 4 seconds ago                       beautiful_northcutt
複製代碼

若是再想啓動的話,使用 docker start

查看容器

上文已經介紹過了,使用 docker ps 命令查看當前容器。

使用 docker logs 查看容器日誌輸出。

使用 docker container inspect 命令查看容器的詳細信息。

使用 docker top 命令查看容器內進程信息,相似 Linux 下的 top 命令。

使用 docker stats 命令查看容器 CPU,內存,儲存等信息。

使用 docker container port 查看容器的端口映射狀況。

導入和導出容器

使用 docker export 命令導出一個容器到文件。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fcb07a324388        centos              "/bin/sh -c 'while t…"   34 minutes ago      Up 9 minutes                            beautiful_northcutt
$ docker export -o centos.tar fcb
$ ls
centos.tar
複製代碼

使用 docker import 命令將容器文件導入成本地鏡像。

$ docker import centos.tar test/centos
sha256:f994c062dae063ffb8c97191d951b9beaac73d99023120191dbbc9741d725578
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/centos         latest              f994c062dae0        6 seconds ago       237MB
複製代碼

在上一篇文章中介紹了一個 docker load 命令,一樣是將文件導入成本地鏡像,那兩者有什麼區別呢?

容器快照文件將丟棄全部歷史記錄和元數據信息,而鏡像存儲文件將保存完整記錄,但體積更大。

刪除容器

使用 docker rm 命令來刪除已經中止的容器,若是容器正在運行,能夠加 -f 參數進行強制刪除。

參考文檔:

書籍《Docker 技術入門與實戰》

www.dockerinfo.net/docker%e5%a…

往期精彩:

技術博客:

github.com/yongxinz/te…

同時,也歡迎關注個人微信公衆號 AlwaysBeta,更多精彩內容等你來。

相關文章
相關標籤/搜索