Docker實踐之04-操做容器

目錄

一.查看容器列表

可使用命令docker container ls查看容器信息,默認狀況下只能查看到當前處於啓動狀態的容器。若是須要查看全部容器信息,須要使用-a參數,如:docker container ls -a
還可使用命令docker inspect能夠查看指定容器的詳細信息:docker inspect <container id>nginx

二.啓動容器

啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另一個是將在終止狀態(Exited)的容器從新啓動。web

1.基於鏡像新建並啓動容器docker

命令:docker run
例如:shell

$ docker run -it ubuntu:16.04 /bin/bash
Unable to find image 'ubuntu:16.04' locally
16.04: Pulling from library/ubuntu
7e6591854262: Pulling fs layer 
089d60cb4e0a: Pulling fs layer 
9c461696bc09: Download complete 
45085432511a: Waiting 
16.04: Pulling from library/ubuntu
7e6591854262: Pull complete 
089d60cb4e0a: Pull complete 
9c461696bc09: Pull complete 
45085432511a: Pull complete 
Digest: sha256:6aa6090ee9c1a525cbad1bb6c2ec9278914db754a3a3c5dc9e7d8daa5ee40dce
Status: Downloaded newer image for ubuntu:16.04
root@c421520d8484:/#

上述操做從一個標籤爲16.04的ubuntu鏡像新建並啓動了一個容器實例,同時在容器中啓動了一個bash終端。ubuntu

當利用docker run來建立容器時,Docker在後臺運行的標準操做包括:tomcat

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

2.啓動已終止容器bash

能夠利用docker container start命令,直接將一個已經終止的容器啓動運行。tcp

命令:docker container start
例如:spa

$ docker start c421520d8484
c421520d8484

上述操做啓動了一個id爲c421520d8484的已經中止的容器。3d

三.終止容器

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

$ docker stop c421520d8484
c421520d8484

此外,當Docker容器中指定的應用終結時,容器也自動終止。例如對於只啓動了一個終端的容器,用戶經過exit命令或Ctrl+D來退出終端時,所建立的容器馬上終止。

四.重啓容器

使用docker container restart命令會將一個運行態的容器終止,而後再從新啓動它。

五.後臺運行容器

更多的時候,須要讓Docker在後臺運行而不是直接把執行命令的結果輸出在當前宿主機下。此時,能夠經過添加-d參數來實現。

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

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

須要區分容器"在後臺運行"和"長久運行"這2個概念的區別:

  • 後臺運行: Docker容器自己只是一個進程,那麼這個進程在前臺運行和在後臺運行與其餘進程沒有區別,經過"-d"參數控制;
  • 長久運行: 長久運行是指Docker容器中運行的程序是否爲長期運行的,如:Tomcat、Nginx這樣的服務進程都是長久運行的,而bash、echo這樣的程序就是執行一次就結束的,不是長久運行的。可是須要注意的是:在Docker中運行的程序(不論長久運行與否)都是在前臺運行的。

六.獲取容器輸出信息

要獲取容器的輸出信息,能夠經過docker container logs命令。
如:

$ docker container logs c421520d8484

或者

$ docker container logs -f c421520d8484

七.進入容器

在使用-d參數時,容器啓動後會進入後臺。某些時候須要進入容器進行操做,須要使用docker attach命令或docker exec命令,推薦使用docker exec命令。
緣由:使用attach命令進入容器,退出時會致使容器終止;而使用exec命令進入容器,退出時不會致使容器終止。

# 使用attach命令進入容器,退出時會致使容器終止
$ docker attach <container id>

# 使用exec命令進入容器,退出時不會致使容器終止
$ docker exec -it <container id> bash

八.導出和導入容器

1.可使用docker export命令導出容器快照到本地文件,格式: docker export [選項] CONTAINER

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
a386ed46adbe        ubuntu:16.04        "/bin/bash"              8 minutes ago       Up 8 minutes                             tender_joliot
d4ba59c159a3        nginx:v3            "nginx -g 'daemon of…"   5 hours ago         Up 5 hours          0.0.0.0:82->80/tcp   web3
afb890786e0d        nginx:v2            "nginx -g 'daemon of…"   6 hours ago         Up 6 hours          0.0.0.0:81->80/tcp   web2
7849b575df3d        nginx               "nginx -g 'daemon of…"   6 hours ago         Up 6 hours          0.0.0.0:80->80/tcp   webserver

# 導出容器快照爲本地文件
$ docker export a386ed46adbe > ubuntu.tar

2.可使用docker import從容器快照文件中再導入爲鏡像,格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
sha256:e1d815eee91a11506af4239bde3305e5bcca9f5b9ce0c8eddd7d4e2f2bf80f17
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/ubuntu         v1.0                e1d815eee91a        28 seconds ago      85.9MB
nginx               v3                  f8411fc0b25c        5 hours ago         109MB
nginx               v2                  87e23809f4d8        6 hours ago         109MB
nginx               latest              ae513a47849c        2 days ago          109MB
ubuntu              16.04               0b1edfbffd27        5 days ago          113MB
tomcat              latest              33e02377a00f        3 weeks ago         554MB
hello-world         latest              e38bc07ac18e        3 weeks ago         1.85kB

此外,也能夠經過指定URL或者某個目錄來導入,如:

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

注:
用戶既可使用docker load來導入鏡像存儲文件到本地鏡像庫,也可使用docker import來導入一個容器快照到本地鏡像庫。
這二者的區別在於容器快照文件將丟棄全部的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時能夠從新指定標籤等元數據信息。

九.刪除容器

1.可使用docker container rm來刪除一個處於終止狀態的容器,如:

$ docker container rm 25af9f20d6a2

2.若是要刪除一個運行中的容器,能夠添加-f參數。Docker會發送SIGKILL信號給容器。

$ docker container rm -f d4ba59c159a3

3.使用命令docker container prune清理掉全部處於終止狀態的容器。

$ docker container prune 
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
04c3079ec43a68e80dbf602935d17c75062e36ede0fadad1e8022d37b93bb97d
a48335a0bbf1afd1d6ae81bf6028852a0e57f2c48fdfa86b0ede343195ec97d6
3a9ff5d11acddddccfc4f23447eb4a731d3ae22b605f48ac7f3c4bfba789cb72
c8b00c9a2beb30934c6747bb32ae5d610eb00e630c6ef993de18cc54b646b35c
97b7f9d496edc2087001b47b6959a39c772c10ed72fedcb6bea0e22404a11e0d
73a8fd203031a15ae1db17cd8e816dc0859535f93010f4848961e76ba7471252
ae723bca424cd694cc9f8a1ebd7f958dd7b674c55922a9e84fe36f9e2c6e8b49
ffb07022d5f8f993fa42b33ae6ea7b5ae199f68ea41c6c0739be367cea376beb

Total reclaimed space: 76.96kB
相關文章
相關標籤/搜索