Docker容器
這一part主要來記錄一下我們對docker容器的操作。容器是 Docker 又一核心概念。
簡單的說,容器是獨立執行的一個或一組應用,以及它們的執行態環境。
新建並啟動容器
啟動容器有兩種方式,一種是基於映象新建一個容器並啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。
我們的命令主要為 docker run。例如,下面的命令輸出一個 “Hello World”,之後終止容器。這跟在本地直接執行 /bin/echo ‘hello world’ 幾乎感覺不出任何區別。
$ docker run ubuntu:16.04 /bin/echo 'Hello world'
Hello world
下面的命令則啟動一個 bash 終端,允許使用者進行互動:
$ docker run -it ubuntu:16.04 /bin/bash
root@af8bae53bdd3:/#
其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上, -i 則讓容器的標準輸入保持開啟。當利用 docker run 來建立容器時,Docker 在後臺執行的標準操作包括:
1.檢查本地是否存在指定的映象,不存在就從公有倉庫下載
2.利用映象建立並啟動一個容器
3.分配一個檔案系統,並在只讀的映象層外面掛載一層可讀寫層
4.從宿主主機配置的網橋介面中橋接一個虛擬介面到容器中去
5.從地址池配置一個 ip 地址給容器
6.執行使用者指定的應用程式
7.執行完畢後容器被終止
啟動已終止容器
可以利用 docker container start [container ID or NAMES] 命令,直接將一個已經終止的容器啟動執行。容器的核心為所執行的應用程式,所需要的資源都是應用程式執行所必需的。除此之外,並沒有其它的資源。可以在偽終端中利用 ps 或 top 來檢視程式資訊。
在守護態下執行
更多的時候,需要讓 Docker 在後臺執行而不是直接把執行命令的結果輸出在當前宿主機下。此時,可以通過新增 -d 引數來實現。
如果不使用 -d 引數執行容器:
$ docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
hello world
hello world
hello world
hello world
容器會把輸出的結果 (STDOUT) 列印到宿主機上面,如果使用了 -d 引數執行容器:
$ docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a
此時容器會在後臺執行並不會把輸出的結果 (STDOUT) 列印到宿主機上面(輸出結果可以用 docker logs 檢視)。使用 -d 引數啟動後會返回一個唯一的 id,也可以通過 docker container ls 命令來檢視容器資訊。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77b2dc01fe0f ubuntu:16.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright
要獲取容器的輸出資訊,可以通過 docker container logs 命令。
$ docker container logs [container ID or NAMES]
hello world
hello world
hello world
. . .
終止容器
可以使用 docker container stop [container ID or NAMES] 來終止一個執行中的容器。
終止狀態的容器可以用 docker container ls -a 命令看到。例如:
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba267838cc1b ubuntu:14.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
docker container restart [container ID or NAMES] ,這個命令會將一個執行態的容器終止,然後再重新啟動它。
進入容器
在使用 -d 引數時,容器啟動後會進入後臺。某些時候需要進入容器進行操作,包括使用 docker attach 命令或 docker exec 命令。但是我們一般推薦使用docker exec命令,因為docker attach 從 stdin 中 exit之後,會導致容器停止。
所以我們一般使用docker exec命令,如果從這個 stdin 中 exit,不會導致容器的停止。
docker exec -it 69d1fd bash
刪除容器
$ docker container rm trusting_newton
trusting_newton
如果要刪除一個執行中的容器,可以新增 -f 引數。Docker 會傳送 SIGKILL 訊號給容器。
相關文章
- docker 容器互通Docker
- Docker 容器操作Docker
- 操作Docker容器Docker
- Docker容器操作Docker
- 容器引擎-DockerDocker
- Docker 容器基本操作[Docker 系列-2]Docker
- Docker 入門:容器Docker
- Docker 容器學習Docker
- Docker重要容器命令Docker
- docker容器儲存Docker
- Docker容器的搭建Docker
- 容器Docker詳解Docker
- Docker的容器管理Docker
- 進入Docker容器Docker
- docker建立lnmp容器DockerLNMP
- Docker 容器管理:rancherDocker
- Docker 容器十誡Docker
- 初識Docker容器Docker
- 3、docker容器操作Docker
- 5、docker容器清理Docker
- docker進入容器Docker
- 【Docker】第三篇 Docker容器管理Docker
- Docker容器技術與Docker介紹Docker
- docker學習5:Docker 容器連線Docker
- docker學習3:Docker容器使用Docker
- Docker 容器編排利器 Docker ComposeDocker
- Docker容器與虛擬化技術:OpenEuler 部署 docker容器應用Docker
- docker容器安裝vimDocker
- Docker 容器日誌分析Docker
- Docker--容器技術Docker
- docker容器技術原理Docker
- Docker-容器使用Docker
- docker容器dockerfile詳解Docker
- .NET Core容器化(Docker)Docker
- Docker批量容器編排Docker
- Docker 容器 100 問Docker
- 應用容器引擎-DockerDocker
- .NET Core容器化@DockerDocker