1
0
mirror of /repos/baseimage-docker.git synced 2025-12-31 08:11:29 +01:00

Merge pull request #220 from OhCoder/revised-chinese-readme

Revised chinese readme
This commit is contained in:
Hongli Lai 2015-05-26 16:32:18 +02:00
commit 2761d369d3

View File

@ -14,8 +14,6 @@ Baseimage-docker项目可以直接从Docker的[registry](https://index.docker.io
<a name="what-are-the-problems-with-the-stock-ubuntu-base-image"></a> <a name="what-are-the-problems-with-the-stock-ubuntu-base-image"></a>
### 原生的Ubuntu基础镜像有什么问题呢 ### 原生的Ubuntu基础镜像有什么问题呢
Baseimage-docker可以直接从Docker的[registry](https://registry.hub.docker.com/u/phusion/baseimage/)获取!
原生Ubuntu不是为了在Docker内运行而设计的。它的初始化系统Upstart假定运行的环境要么是真实的硬件要么是虚拟的硬件而不是在Docker容器内。但是在一个Docker的容器内并不需要一个完整的系统你需要的只是一个很小的系统。但是如果你不是非常熟悉Unix的系统模型想要在Docker容器内裁减出最小的系统会碰到很多难以正确解决的陌生的技术坑。这些坑会引起很多莫名其妙的问题。 原生Ubuntu不是为了在Docker内运行而设计的。它的初始化系统Upstart假定运行的环境要么是真实的硬件要么是虚拟的硬件而不是在Docker容器内。但是在一个Docker的容器内并不需要一个完整的系统你需要的只是一个很小的系统。但是如果你不是非常熟悉Unix的系统模型想要在Docker容器内裁减出最小的系统会碰到很多难以正确解决的陌生的技术坑。这些坑会引起很多莫名其妙的问题。
Baseimage-docker让这一切完美。在"内容"部分描述了所有这些修改。 Baseimage-docker让这一切完美。在"内容"部分描述了所有这些修改。
@ -28,7 +26,7 @@ Baseimage-docker让这一切完美。在"内容"部分描述了所有这些修
* 配置一个Docker友好的基础系统并不是一个简单的任务。如前所述过程中会碰到很多坑。当你搞定这些坑之后只不过是又重新发明了一个baseimage-docker而已。使用baseimage-docker可以免去你这方面需要做的努力。 * 配置一个Docker友好的基础系统并不是一个简单的任务。如前所述过程中会碰到很多坑。当你搞定这些坑之后只不过是又重新发明了一个baseimage-docker而已。使用baseimage-docker可以免去你这方面需要做的努力。
* 减少需要正确编写Dockerfile文件的时间。你不用再担心基础系统可以专注于你自己的技术栈和你的项目。 * 减少需要正确编写Dockerfile文件的时间。你不用再担心基础系统可以专注于你自己的技术栈和你的项目。
* 减少需要运行`docker build`的时间让你更快的迭代Dockerfile。 * 减少需要运行`docker build`的时间让你更快的迭代Dockerfile。
* 减少了重新部署的时的下载时间。Docker只需要下载一次基础镜像:在第一次部署的时候。在之后的部署中,只需要下载你最近对基础镜像进行修改的部分。 * 减少了重新部署的时的下载时间。Docker只需要在第一次部署的时候下载一次基础镜像。在随后的部署中,只需要改变你下载之后对基础镜像进行修改的部分。
----------------------------------------- -----------------------------------------
@ -43,59 +41,57 @@ Baseimage-docker让这一切完美。在"内容"部分描述了所有这些修
**目录** **目录**
* [镜像里面包含什么?](#whats_inside) * [镜像里面什么?](#whats_inside)
* [概述](#whats_inside_overview) * [概述](#whats_inside_overview)
* [等等,我认为docker在一个容器中只能允许一个进程?](#docker_single_process) * [等等,我认为Docker在一个容器中只能允许运行一个进程?](#docker_single_process)
* [细细看看baseimage-docker](#inspecting) * [Baseimage-docker更侧重于“胖容器”还是“把容器当作虚拟机”](#fat_containers)
* [用baseimage-docker作为基础镜像](#using) * [查看baseimage-docker](#inspecting)
* [使用baseimage-docker作为基础镜像](#using)
* [开始](#getting_started) * [开始](#getting_started)
* [增加后台进行](#adding_additional_daemons) * [增加额外的后台进程](#adding_additional_daemons)
* [在启动容器过程中允许脚本](#running_startup_scripts) * [容器启动时运行脚本](#running_startup_scripts)
* [环境变量](#environment_variables) * [环境变量](#environment_variables)
* [集中定义自己的环境变量](#envvar_central_definition) * [集中定义自己的环境变量](#envvar_central_definition)
* [保存环境变量](#envvar_dumps) * [保存环境变量](#envvar_dumps)
* [修改环境变量](#modifying_envvars) * [修改环境变量](#modifying_envvars)
* [安全性](#envvar_security) * [安全性](#envvar_security)
* [解决docker没有办法修改/etc/hosts的问题](#workaroud_modifying_etc_hosts)
* [禁用ssh](#disabling_ssh)
* [容器管理](#container_administration) * [容器管理](#container_administration)
* [在一个新容器中运行单条命令](#oneshot) * [在一个新容器中运行单条命令](#oneshot)
* [在正在运行的的容器中运行命令](#run_inside_existing_container) * [在正在运行的的容器中运行一条命令](#run_inside_existing_container)
* [通过nsenter登录容器](#login_nsenter) * [通过`docer exec`登录容器](#login_docker_exec)
* [用法](#nsenter_usage) * [用法](#nsenter_usage)
* [`docker-bash`工具](#docker_bash) * [使用SSH登录容器](#login_ssh)
* [使用ssh登录容器](#login_ssh) * [启用SSH](#enabling_ssh)
* [在容器中使用不安全的key](#using_the_insecure_key_for_one_container_only) * [关于SSH的key](#ssh_keys)
* [支持长久不变的不安全的key](#enabling_the_insecure_key_permanently) * [只对一个容器使用不安全key](#using_insecure_key_for_one_container_only)
* [永久开启不安全key](#enabling_the_insecure_key_permanently)
* [使用你自己的key](#using_your_own_key) * [使用你自己的key](#using_your_own_key)
* [`docker-ssh`工具](#docker_ssh) * [`docker-ssh`工具](#docker_ssh)
* [构建自己的镜像](#building) * [构建自己的镜像](#building)
* [总结](#conclusion) * [总结](#conclusion)
----------------------------------------- -----------------------------------------
<a name="whats_inside"></a> <a name="whats_inside"></a>
## 镜像里面包含什么? ## 镜像里面有什么?
<a name="whats_inside_overview"></a> <a name="whats_inside_overview"></a>
### 概述 ### 概述
*想看一个完整的基础镜像?这里有一个包含Ruby,Python Node.js and Meteor的.可以看看[passenger-docker](https://github.com/phusion/passenger-docker).* *想看一个里面包含RubyPythonNode.js以及Meteor的完整基础镜像可以看一下[passenger-docker](https://github.com/phusion/passenger-docker)。*
| 模块 | 包含什么 / 备注 | | 模块 | 为什么包含这些?以及备注 |
| ---------------- | ------------------- | | ---------------- | ------------------- |
| Ubuntu 14.04 LTS | 基础系统. | | Ubuntu 14.04 LTS | 基础系统。 |
| 一个**正确**的初始化进程 | 根据Unix进程模型,[初始化进程](https://en.wikipedia.org/wiki/Init) -- PID 1 -- 继承了所有[孤立的子进行],并且必须[监控他们](https://en.wikipedia.org/wiki/Wait_(system_call)).大多数Docker容器没有一个正确的初始化进程,结果是他们的容器就出现了大量的[僵尸进程](https://en.wikipedia.org/wiki/Zombie_process).<br><br>此外,`docker stop`发送终止信号给初始化进程,然后停止所有的服务进程.不幸的是,由于他们主机关闭了容器,大多初始系统没有正确运行.<br><br>Baseimage-docker包含了一个初始进程`/sbin/my_init`,来正确的执行这些任务. | | 一个**正确**的初始化进程 | *主要文章:[Docker和PID 1 僵尸进程回收问题](http://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/)*<br/><br/>根据Unix进程模型[初始化进程](https://en.wikipedia.org/wiki/Init) -- PID 1 -- 继承了所有[孤立的子进程](https://en.wikipedia.org/wiki/Orphan_process),并且必须[进行回收](https://en.wikipedia.org/wiki/Wait_(system_call))。大多数Docker容器没有一个初始化进程可以正确的完成此操作随着时间的推移会导致他们的容器出现了大量的[僵尸进程](https://en.wikipedia.org/wiki/Zombie_process)。<br/><br/>而且,`docker stop`发送SIGTERM信号给初始化进程照理说此信号应该可以停止所有服务。不幸的是由于它们对硬件进行了关闭操作导致Docker内的大多数初始化系统没有正确执行。这会导致进程强行被SIGKILL信号关闭从而丧失了一个正确取消初始化设置的机会。这会导致文件损坏。<br/><br/>Baseimage-docker配有一个名为`/sbin/my_init`的初始化进程来同时正确的完成这些任务。 |
| 修复了APT 与docker不兼容的问题 | See https://github.com/dotcloud/docker/issues/1024. | | 修复了APT与Docker不兼容的问题 | 详情参见https://github.com/dotcloud/docker/issues/1024 。 |
| 修复某些Docker bugs | [Learn more.](#workaroud_modifying_etc_hosts) | | syslog-ng | 对于很多服务包括kernel自身都需要一个syslog后台进程以便可以正确的将log输出到/var/log/syslog中。如果没有运行syslog后台进程很多重要的信息就会默默的丢失了。<br/><br/>只对本地进行监听。所有syslog信息会被转发给“docker logs”。 |
| syslog-ng | 必须要有一个监控很多服务的系统日志进程,包括内核本身,以便可以正确的输出日志到/var/log/syslog.如果没有后台日志进程,那么很多重要的信息就会丢失了.<br><br>只监听本地服务. | | logrotate | 定期转存和压缩日志。 |
| logrotate | logrotate 程序是一个日志文件管理工具,可以定期转存和压缩日志. | | SSH服务 | 允许你很容易的登录到容器中进行[查询或管理](#login_ssh)操作。<br/><br/>_SSH**默认是禁用**的这也是baseimage-docker为此目的提供的唯一方法。其它方法需要通过[docker exec](#login_docker_exec)。由于`docker exec`同时带来了几个需要注意的问题SSH同时也提供了一个可替换的方法。_<br/><br/>密码和challenge-response认证方式默认是禁用的。只有key认证通过之后才能够开启。 |
| SSH server | 允许你可以很容易的登录到你的容器中进行[管理](#login_ssh).<br><br>_baseimage-docker提供了一个SSH的方法.还有其他方法,比如通过[nsenter](#login_nsenter).SSH提供了一个方法,因为nsenter还有很多的问题._<br><br>通过密码和challenge-response的方式,默认是禁用的.只有通过key认证的方式是允许的.<br><br>如果你想禁用SSH访问的方式,禁用也是很容易的.可以阅读下面的说明. | | cron | 为了保证cron任务能够工作必须运行cron后台进程。 |
| cron | 定时任务进程保证定时任务的运行. | | [runit](http://smarden.org/runit/) | 替换Ubuntu的Upstart。用于服务监控和管理。比SysV init更容易使用同时当这些服务崩溃之后支持后台进程自动重启。比Upstart更易使用更加的轻量级。 |
| [runit](http://smarden.org/runit/) | 替代Ubuntu的Upstart. 用于监控服务和管理.比SysV init更容易使用,同时支持当有服务挂掉之后,重启这些服务.比Upstart更易使用,也更加的轻量级. | | `setuser` | 使用其它账户运行命令的工具。比`su`更容易使用,比使用`sudo`有那么一点优势,跟`chpst`不同,这个工具需要正确的设置`$HOME`。像`/sbin/setuser`这样。 |
| `setuser` |使用另一个用户运行命令的工具,比`su`更容易使用,减少使用`sudo`的安全性,不像使用`chpst`,需要正确的设置`$HOME`.`/sbin/setuser`这样使用就可以了. | Baseimage-docker非常的轻量级仅仅占用6MB内存。
Baseimage-docker is very lightweight: it only consumes 6 MB of memory.
Baseimage-docker是非常轻量级的:仅仅小号6MB内存.
<a name="docker_single_process"></a> <a name="docker_single_process"></a>
### 等等,我认为Docker在一个容器中就运行一个进程吗? ### 等等,我认为Docker在一个容器中就运行一个进程吗?