Skip to content

Commit 3bdf1f0

Browse files
committed
add docker
1 parent 032a2aa commit 3bdf1f0

File tree

1 file changed

+330
-0
lines changed

1 file changed

+330
-0
lines changed

docker.rst

Lines changed: 330 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,330 @@
1+
Docker 快速入门
2+
===============
3+
4+
基本概念
5+
--------
6+
7+
Docker 是基于 Linux kernel 的虚拟化工具,仅需要极低的系统资源使用就提供了
8+
强大的虚拟化、资源隔离能力。使用 Docker,用户只需要几分钟即可以将应用程序
9+
“Docker 化”,并且由于其易于复制分享的优点,能够保证开发与部署环境的一致性。
10+
11+
Docker 的基本结构包括:
12+
13+
1. Docker 客户端和服务器(C/S)
14+
#. Image
15+
#. Registry
16+
#. Container
17+
18+
在本地安装 Docker 之后,即完成了 Docker C/S 的安装。用户使用 Docker 客户端向
19+
Docker 的守护进程发送命令操作 Container。
20+
21+
Image(镜像)类似于应用的源代码,你可以通过修改源代码(Image)来构建出不同的 Container。
22+
Registry()类似于源码的托管服务器,默认的 Registry 是 Docker 公司提供的 Docker Hub,
23+
你可以将 Docker Hub 类比于 GitHub。
24+
25+
Container 是 Docker 最重要的概念,它通过操作相应的镜像提供一个执行环境。
26+
27+
使用 Docker,可以快速构建很分享应用程序部署服务器、开发环境、CI 环境或者一个应用服务。
28+
29+
30+
首先声明,这里的系统环境设置为 Ubuntu 14.04,Mac OS 和 Windows
31+
系统请在虚拟机里安装 Ubuntu, 其它 Linux 发行版 和 Ubuntu
32+
不会有太大区别,请自行修改命令。
33+
34+
使用 Ubuntu(我自己安装的是 Xubuntu) 的好处:
35+
36+
- 相比 Boot2docker 来说更加强大,比如我可以通过安装 zsh +
37+
zsh-docker-completetion 提供 docker 自动补全功能。
38+
- 获得最新最强大的官方支持,Docker 官方推荐使用 Ubuntu,对 Ubuntu
39+
下的问题也能够最及时解决, 甚至某些工具不提供 Mac OS 或者 Windows
40+
兼容方案。
41+
- 相对于其它 Linux 发行版用户更多,使用更简单。
42+
- 推荐在虚拟机中安装 Xubuntu,和 Ubuntu 相比,Xubuntu
43+
更轻量,在虚拟机中性能更好; 在虚拟机中安装 Xubuntu
44+
便于对开发环境的迁移以及内部共享。
45+
46+
Docker 命令
47+
-----------
48+
49+
Docker 可以通过命令来构建镜像,也可以根据 Dockerfile 配置来构建。 docker
50+
命令与 Dockerfile 的对应关系如下:
51+
52+
Dockerfile
53+
----------
54+
55+
命令
56+
~~~~
57+
58+
WORKDIR
59+
^^^^^^^
60+
61+
ENV
62+
^^^
63+
64+
USER
65+
^^^^
66+
67+
VOLUME
68+
^^^^^^
69+
70+
ADD
71+
^^^
72+
73+
向镜像中添加特定文件,可以是主机中或者 web 文件。以 WordPress 的
74+
Dockerfile 为例:
75+
76+
.. code:: dokcerfile
77+
78+
ADD http://wordpress.org/latest.zip /var/www/wordpress.zip
79+
80+
ONBUILD
81+
^^^^^^^
82+
83+
RUN
84+
^^^
85+
86+
CMD
87+
^^^
88+
89+
ENTRYPOINT
90+
^^^^^^^^^^
91+
92+
CentOS
93+
~~~~~~
94+
95+
MongoDB
96+
^^^^^^^
97+
98+
参考:\ `CentOS/CentOS-Dockerfiles <https://github.com/CentOS/CentOS-Dockerfiles/blob/master/mongodb/centos7/Dockerfile>`__
99+
100+
.. code:: dockerfile
101+
102+
FROM centos:latest
103+
MAINTAINER Kane Blueriver <[email protected]>
104+
105+
RUN yum -y update; yum clean all
106+
RUN yum -y install epel-release; yum clean all
107+
RUN yum -y install mongodb-server; yum clean all
108+
109+
RUN mkdir -p /data/
110+
111+
# 设置挂载点
112+
VOLUME ["/data/mongo"]
113+
114+
# Define working directory.
115+
WORKDIR /data
116+
117+
CMD ["mongod"]
118+
119+
EXPOSE 27017
120+
ENTRYPOINT ["/usr/bin/mongod"]
121+
122+
Redis
123+
^^^^^
124+
125+
参考:\ `CentOS/CentOS-Dockerfiles <https://github.com/CentOS/CentOS-Dockerfiles/blob/master/redis/centos7/Dockerfile>`__
126+
127+
.. code:: dockerfile
128+
129+
FROM centos:latest
130+
MAINTAINER Kane Blueriver <[email protected]>
131+
132+
RUN yum -y update; yum clean all
133+
RUN yum -y install epel-release; yum clean all
134+
RUN yum -y install redis; yum clean all
135+
136+
# 设置挂载点
137+
VOLUME ["/data/redis"]
138+
139+
# Define working directory.
140+
WORKDIR /data
141+
142+
EXPOSE 6379
143+
144+
CMD ["redis-server"]
145+
146+
Memcached
147+
^^^^^^^^^
148+
149+
参考:\ `CentOS/CentOS-Dockerfiles <https://github.com/CentOS/CentOS-Dockerfiles/blob/master/memcached/centos7/Dockerfile>`__
150+
151+
.. code:: dockerfile
152+
153+
FROM centos:latest
154+
MAINTAINER Kane Blueriver <[email protected]>
155+
RUN yum -y update; yum clean all
156+
RUN yum -y install epel-release; yum clean all
157+
RUN yum -y install memcached; yum clean all
158+
159+
VOLUME ["/data/mc"]
160+
161+
WORKDIR /data
162+
163+
CMD ["memcached"]
164+
165+
EXPOSE 11211
166+
167+
CMD ["memcached", "-u", "daemon"]
168+
169+
Ubuntu
170+
~~~~~~
171+
172+
参考\ `dockerfile/mongodb <https://registry.hub.docker.com/u/dockerfile/mongodb/dockerfile/>`__
173+
174+
.. code:: dockerfile
175+
176+
FROM dockerfile/ubuntu
177+
178+
# 从官网安装 MongoDB
179+
RUN \
180+
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && \
181+
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' > /etc/apt/sources.list.d/mongodb.list && \
182+
apt-get update && \
183+
apt-get install -y mongodb-org && \
184+
rm -rf /var/lib/apt/lists/*
185+
186+
# 设置挂载点
187+
VOLUME ["/data/db"]
188+
189+
# Define working directory.
190+
WORKDIR /data
191+
192+
CMD ["mongod"]
193+
194+
# 27017: process
195+
# 28017: http
196+
EXPOSE 27017
197+
EXPOSE 28017
198+
199+
分享
200+
----
201+
202+
构建好自己的镜像后可以将其 push 到 Registry 上进行分享,默认的 Registry
203+
由 Docker Hub 提供, 如果镜像中存在隐私内容也可以使用 Docker
204+
公司的源代码搭建内部的共享服务器。
205+
206+
登录
207+
~~~~
208+
209+
Push
210+
~~~~
211+
212+
自动构建
213+
~~~~~~~~
214+
215+
搭建自己的 Docker Registry
216+
~~~~~~~~~~~~~~~~~~~~~~~~~~
217+
218+
使用 Docker 进行 web 开发
219+
-------------------------
220+
221+
多个容器互联
222+
~~~~~~~~~~~~
223+
224+
持续集成
225+
~~~~~~~~
226+
227+
Drone Shippable
228+
229+
230+
快速编配
231+
--------
232+
233+
Docker 公司还提供了快速编配工具 compose(原 Fig)用于加速 Docker
234+
环境的构建。
235+
236+
安装:
237+
238+
.. code-block:: shell
239+
240+
pip install docker-compose
241+
242+
下面以一个标准的 Python WSGI 应用为例,介绍 compose 的使用方法。
243+
244+
WSGI 应用
245+
~~~~~~~~~
246+
247+
首先你需要一个 WSGI 应用,这里以一个简单的 Flask 应用为例:
248+
249+
.. code-block:: python
250+
251+
from flask import Flask
252+
from redis import Redis
253+
import os
254+
app = Flask(__name__)
255+
redis = Redis(host='redis', port=6379)
256+
257+
@app.route('/')
258+
def hello():
259+
redis.incr('hits')
260+
return 'Hello World! I have been seen %s times.' % redis.get('hits')
261+
262+
if __name__ == "__main__":
263+
app.run(host="0.0.0.0", debug=True)
264+
265+
标准的 Python 应用还需要提供一个 requirements.txt 记录其依赖——flask 和 redis:
266+
267+
.. code-block:: txt
268+
269+
flask
270+
redis
271+
272+
Dockerfile
273+
~~~~~~~~~~
274+
275+
定制一个 Flask 应用的运行环境:
276+
277+
.. code-block:: dockerfile
278+
279+
FROM python:2.7
280+
ADD . /code
281+
WORKDIR /code
282+
RUN pip install -r requirements.txt
283+
284+
定义服务
285+
~~~~~~~~
286+
287+
定义 ``docker-compose.yml`` 配置文件,装配应用运行环境所需组件(Container、Volume 等):
288+
289+
.. code-block:: yaml
290+
291+
web:
292+
build: .
293+
command: python app.py
294+
ports:
295+
- "5000:5000"
296+
volumes:
297+
- .:/code
298+
links:
299+
- redis
300+
redis:
301+
image: redis
302+
303+
上面的配置文件定义了 2 个服务:
304+
305+
- web:根据本地 Dockerfile 构建出的 Image,提供一个 WSGI 应用的运行环境,将 Docker 中的 5000 端口
306+
映射到主机的 5000 端口,并将本目录挂载到 Container 的 /code 目录。并且链接到 redis 服务。
307+
- redis:基于 Docker Hub 的 redis 公开镜像构建的 Container。
308+
309+
构建以及运行
310+
~~~~~~~~~~~~
311+
312+
构建:
313+
314+
.. code-block:: shell
315+
316+
docker-compose up
317+
318+
运行:
319+
320+
.. code-block:: shell
321+
322+
docker-compose run web env
323+
324+
停止:
325+
326+
.. code-block:: shell
327+
328+
docker-compose stop
329+
330+

0 commit comments

Comments
 (0)