mirror of
https://github.com/yeasy/docker_practice.git
synced 2024-11-16 11:33:40 +00:00
translate container into traditional chinese
This commit is contained in:
parent
54ad70f9fd
commit
b16ff0610b
@ -1,6 +1,6 @@
|
||||
# Docker 容器
|
||||
容器是 Docker 又一核心概念。
|
||||
|
||||
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
|
||||
簡單的說,容器是獨立運行的一個或一組應用,以及它們的運行態環境。對應的,虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。
|
||||
|
||||
本章将具体介绍如何来管理一个容器,包括创建、启动和停止等。
|
||||
本章將具體介紹如何來管理一個容器,包括創建、啟動和停止等。
|
||||
|
@ -1,20 +1,20 @@
|
||||
##守护态运行
|
||||
##守護態運行
|
||||
|
||||
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 `-d` 参数来实现。
|
||||
更多的時候,需要讓 Docker 容器在後臺以守護態(Daemonized)形式運行。此時,可以通過添加 `-d` 參數來實現。
|
||||
|
||||
例如下面的命令会在后台运行容器。
|
||||
例如下面的命令會在後臺運行容器。
|
||||
```
|
||||
$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147
|
||||
```
|
||||
|
||||
容器启动后会返回一个唯一的 id,也可以通过 `docker ps` 命令来查看容器信息。
|
||||
容器啟動後會返回一個唯一的 id,也可以通過 `docker ps` 命令來查看容器信息。
|
||||
```
|
||||
$ sudo docker ps
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage
|
||||
```
|
||||
要获取容器的输出信息,可以通过 `docker logs` 命令。
|
||||
要獲取容器的輸出信息,可以通過 `docker logs` 命令。
|
||||
```
|
||||
$ sudo docker logs insane_babbage
|
||||
hello world
|
||||
|
@ -1,8 +1,8 @@
|
||||
## 进入容器
|
||||
在使用 `-d` 参数时,容器启动后会进入后台。
|
||||
某些时候需要进入容器进行操作,有很多种方法,包括使用 `docker attach` 命令或 `nsenter` 工具等。
|
||||
## 進入容器
|
||||
在使用 `-d` 參數時,容器啟動後會進入後臺。
|
||||
某些時候需要進入容器進行操作,有很多種方法,包括使用 `docker attach` 命令或 `nsenter` 工具等。
|
||||
### attach 命令
|
||||
`docker attach` 是Docker自带的命令。下面示例如何使用该命令。
|
||||
`docker attach` 是Docker自帶的命令。下面示例如何使用該命令。
|
||||
```
|
||||
$ sudo docker run -idt ubuntu
|
||||
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
|
||||
@ -12,12 +12,12 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||
$sudo docker attach nostalgic_hypatia
|
||||
root@243c32535da7:/#
|
||||
```
|
||||
但是使用 `attach` 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
|
||||
但是使用 `attach` 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作了。
|
||||
|
||||
### nsenter 命令
|
||||
#### 安装
|
||||
`nsenter` 工具在 util-linux 包2.23版本后包含。
|
||||
如果系统中 util-linux 包没有该命令,可以按照下面的方法从源码安装。
|
||||
#### 安裝
|
||||
`nsenter` 工具在 util-linux 包2.23版本後包含。
|
||||
如果系統中 util-linux 包沒有該命令,可以按照下面的方法從源碼安裝。
|
||||
```
|
||||
$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
|
||||
$ ./configure --without-ncurses
|
||||
@ -25,23 +25,23 @@ $ make nsenter && sudo cp nsenter /usr/local/bin
|
||||
```
|
||||
|
||||
#### 使用
|
||||
`nsenter` 可以访问另一个进程的名字空间。nsenter 要正常工作需要有 root 权限。
|
||||
很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安装最新版本的 util-linux(2.24)版,请按照以下步骤:
|
||||
`nsenter` 可以訪問另一個進程的名字空間。nsenter 要正常工作需要有 root 權限。
|
||||
很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安裝最新版本的 util-linux(2.24)版,請按照以下步驟:
|
||||
```
|
||||
$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
|
||||
$ cd util-linux-2.24
|
||||
$ ./configure --without-ncurses && make nsenter
|
||||
$ sudo cp nsenter /usr/local/bin
|
||||
```
|
||||
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。
|
||||
為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。
|
||||
```
|
||||
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
|
||||
```
|
||||
通过这个 PID,就可以连接到这个容器:
|
||||
通過這個 PID,就可以連接到這個容器:
|
||||
```
|
||||
$ nsenter --target $PID --mount --uts --ipc --net --pid
|
||||
```
|
||||
下面给出一个完整的例子。
|
||||
下面給出一個完整的例子。
|
||||
```
|
||||
$ sudo docker run -idt ubuntu
|
||||
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
|
||||
@ -53,13 +53,13 @@ $ PID=$(docker-pid 243c32535da7)
|
||||
$ sudo nsenter --target 10981 --mount --uts --ipc --net --pid
|
||||
root@243c32535da7:/#
|
||||
```
|
||||
更简单的,建议大家下载
|
||||
[.bashrc_docker](https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker),并将内容放到 .bashrc 中。
|
||||
更簡單的,建議大家下載
|
||||
[.bashrc_docker](https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker),並將內容放到 .bashrc 中。
|
||||
```
|
||||
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
|
||||
$ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
|
||||
```
|
||||
这个文件中定义了很多方便使用 Docker 的命令,例如 `docker-pid` 可以获取某个容器的 PID;而 `docker-enter` 可以进入容器或直接在容器内执行命令。
|
||||
這個文件中定義了很多方便使用 Docker 的命令,例如 `docker-pid` 可以獲取某個容器的 PID;而 `docker-enter` 可以進入容器或直接在容器內執行命令。
|
||||
```
|
||||
$ echo $(docker-pid <container>)
|
||||
$ docker-enter <container> ls
|
||||
|
@ -1,28 +1,28 @@
|
||||
##导出和导入容器
|
||||
##導出和導入容器
|
||||
|
||||
###导出容器
|
||||
如果要导出本地某个容器,可以使用 `docker export` 命令。
|
||||
###導出容器
|
||||
如果要導出本地某個容器,可以使用 `docker export` 命令。
|
||||
```
|
||||
$ sudo docker ps -a
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test
|
||||
$ sudo docker export 7691a814370e > ubuntu.tar
|
||||
```
|
||||
这样将导出容器快照到本地文件。
|
||||
這樣將導出容器快照到本地文件。
|
||||
|
||||
###导入容器快照
|
||||
可以使用 `docker import` 从容器快照文件中再导入为镜像,例如
|
||||
###導入容器快照
|
||||
可以使用 `docker import` 從容器快照文件中再導入為鏡像,例如
|
||||
```
|
||||
$ cat ubuntu.tar | sudo docker import - test/buntu:v1.0
|
||||
$ sudo docker images
|
||||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||||
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
|
||||
```
|
||||
此外,也可以通过指定 URL 或者某个目录来导入,例如
|
||||
此外,也可以通過指定 URL 或者某個目錄來導入,例如
|
||||
```
|
||||
$sudo docker import http://example.com/exampleimage.tgz example/imagerepo
|
||||
```
|
||||
|
||||
*注:用户既可以使用 `docker load` 来导入镜像存储文件到本地镜像库,也可以使用 `docker import` 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
|
||||
*註:用戶既可以使用 `docker load` 來導入鏡像存儲文件到本地鏡像庫,也可以使用 `docker import` 來導入一個容器快照到本地鏡像庫。這兩者的區別在於容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。
|
||||
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
##删除容器
|
||||
可以使用 `docker rm` 来删除一个处于终止状态的容器。
|
||||
##刪除容器
|
||||
可以使用 `docker rm` 來刪除一個處於終止狀態的容器。
|
||||
例如
|
||||
```
|
||||
$sudo docker rm trusting_newton
|
||||
trusting_newton
|
||||
```
|
||||
如果要删除一个运行中的容器,可以添加 `-f` 参数。Docker 会发送 `SIGKILL` 信号给容器。
|
||||
如果要刪除一個運行中的容器,可以添加 `-f` 參數。Docker 會發送 `SIGKILL` 信號給容器。
|
||||
|
||||
|
@ -1,26 +1,26 @@
|
||||
##启动容器
|
||||
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
|
||||
##啟動容器
|
||||
啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。
|
||||
|
||||
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
|
||||
因為 Docker 的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創建容器。
|
||||
|
||||
###新建并启动
|
||||
所需要的命令主要为 `docker run`。
|
||||
###新建並啟動
|
||||
所需要的命令主要為 `docker run`。
|
||||
|
||||
例如,下面的命令输出一个 “Hello World”,之后终止容器。
|
||||
例如,下面的命令輸出一個 “Hello World”,之後終止容器。
|
||||
```
|
||||
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
|
||||
Hello world
|
||||
```
|
||||
这跟在本地直接执行 `/bin/echo 'hello world'` 几乎感觉不出任何区别。
|
||||
這跟在本地直接執行 `/bin/echo 'hello world'` 幾乎感覺不出任何區別。
|
||||
|
||||
下面的命令则启动一个 bash 终端,允许用户进行交互。
|
||||
下面的命令則啟動一個 bash 終端,允許用戶進行交互。
|
||||
```
|
||||
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
|
||||
root@af8bae53bdd3:/#
|
||||
```
|
||||
其中,`-t` 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, `-i` 则让容器的标准输入保持打开。
|
||||
其中,`-t` 選項讓Docker分配一個偽終端(pseudo-tty)並綁定到容器的標準輸入上, `-i` 則讓容器的標準輸入保持打開。
|
||||
|
||||
在交互模式下,用户可以通过所创建的终端来输入命令,例如
|
||||
在交互模式下,用戶可以通過所創建的終端來輸入命令,例如
|
||||
```
|
||||
root@af8bae53bdd3:/# pwd
|
||||
/
|
||||
@ -28,24 +28,24 @@ root@af8bae53bdd3:/# ls
|
||||
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
|
||||
```
|
||||
|
||||
当利用 `docker run` 来创建容器时,Docker 在后台运行的标准操作包括:
|
||||
當利用 `docker run` 來創建容器時,Docker 在後臺運行的標準操作包括:
|
||||
|
||||
* 检查本地是否存在指定的镜像,不存在就从公有仓库下载
|
||||
* 利用镜像创建并启动一个容器
|
||||
* 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
|
||||
* 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
|
||||
* 从地址池配置一个 ip 地址给容器
|
||||
* 执行用户指定的应用程序
|
||||
* 执行完毕后容器被终止
|
||||
* 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
|
||||
* 利用鏡像創建並啟動一個容器
|
||||
* 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
|
||||
* 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
|
||||
* 從地址池配置一個 ip 地址給容器
|
||||
* 執行用戶指定的應用程序
|
||||
* 執行完畢後容器被終止
|
||||
|
||||
###启动已终止容器
|
||||
可以利用 `docker start` 命令,直接将一个已经终止的容器启动运行。
|
||||
###啟動已終止容器
|
||||
可以利用 `docker start` 命令,直接將一個已經終止的容器啟動運行。
|
||||
|
||||
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 `ps` 或 `top` 来查看进程信息。
|
||||
容器的核心為所執行的應用程序,所需要的資源都是應用程序運行所必需的。除此之外,並沒有其它的資源。可以在偽終端中利用 `ps` 或 `top` 來查看進程信息。
|
||||
```
|
||||
root@ba267838cc1b:/# ps
|
||||
PID TTY TIME CMD
|
||||
1 ? 00:00:00 bash
|
||||
11 ? 00:00:00 ps
|
||||
```
|
||||
可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。
|
||||
可見,容器中僅運行了指定的 bash 應用。這種特點使得 Docker 對資源的利用率極高,是貨真價實的輕量級虛擬化。
|
||||
|
@ -1,10 +1,10 @@
|
||||
##终止容器
|
||||
可以使用 `docker stop` 来终止一个运行中的容器。
|
||||
##終止容器
|
||||
可以使用 `docker stop` 來終止一個運行中的容器。
|
||||
|
||||
此外,当Docker容器中指定的应用终结时,容器也自动终止。
|
||||
例如对于上一章节中只启动了一个终端的容器,用户通过 `exit` 命令或 `Ctrl+d` 来退出终端时,所创建的容器立刻终止。
|
||||
此外,當Docker容器中指定的應用終結時,容器也自動終止。
|
||||
例如對於上一章節中只啟動了一個終端的容器,用戶通過 `exit` 命令或 `Ctrl+d` 來退出終端時,所創建的容器立刻終止。
|
||||
|
||||
终止状态的容器可以用 `docker ps -a` 命令看到。例如
|
||||
終止狀態的容器可以用 `docker ps -a` 命令看到。例如
|
||||
```
|
||||
sudo docker ps -a
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
@ -12,6 +12,6 @@ ba267838cc1b ubuntu:14.04 "/bin/bash" 30 minutes a
|
||||
98e5efa7d997 training/webapp:latest "python app.py" About an hour ago Exited (0) 34 minutes ago backstabbing_pike
|
||||
```
|
||||
|
||||
处于终止状态的容器,可以通过 `docker start` 命令来重新启动。
|
||||
處於終止狀態的容器,可以通過 `docker start` 命令來重新啟動。
|
||||
|
||||
此外,`docker restart` 命令会将一个运行态的容器终止,然后再重新启动它。
|
||||
此外,`docker restart` 命令會將一個運行態的容器終止,然後再重新啟動它。
|
||||
|
Loading…
Reference in New Issue
Block a user