From d6ff5ab0e59dd1a8d412a4ce508cd28d117b65be Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Mon, 19 Mar 2018 15:17:25 +0800 Subject: [PATCH] :memo: Writing docs. --- docs/docker/README.md | 4 +- docs/docker/containers-and-vm.png | Bin 0 -> 47867 bytes docs/docker/docker-quickstart.md | 229 ++++++++++++++++++++++++++++++ 3 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 docs/docker/containers-and-vm.png create mode 100644 docs/docker/docker-quickstart.md diff --git a/docs/docker/README.md b/docs/docker/README.md index 92ab673..0bb971f 100644 --- a/docs/docker/README.md +++ b/docs/docker/README.md @@ -3,8 +3,8 @@ ## 知识大纲 * 简介(introduction) -* 快速上手(quickstart) -* 入门篇(basics) +* [Docker 快速指南](docker-quickstart.md) +* 基础篇(basics) * 环境(environment) * [Docker 安装](basics/installation.md) * 配置(configuration) diff --git a/docs/docker/containers-and-vm.png b/docs/docker/containers-and-vm.png new file mode 100644 index 0000000000000000000000000000000000000000..38a10e3ebe53bac1979bc737ca0f8503d01ac0dd GIT binary patch literal 47867 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 Q0{EvSuPRq2^EU8*0a&>|+yDRo literal 0 HcmV?d00001 diff --git a/docs/docker/docker-quickstart.md b/docs/docker/docker-quickstart.md new file mode 100644 index 0000000..9617476 --- /dev/null +++ b/docs/docker/docker-quickstart.md @@ -0,0 +1,229 @@ +# Docker 快速指南 + +## Orientation + +### 概念 + +Docker 是一个让开发者或系统管理员使用容器来**开发**、**部署**和**运行**应用的平台。 + +容器化即使用 linux 容器来部署应用。 + +#### Docker 的优点 + +* 灵活的:即使是最复杂的应用也可以容器化。 +* 轻量级:容器利用和共享主机内核。 +* 可交换:你可以随意部署更新和升级。 +* 可移植:你可以本地构建,部署到云端,并在任何地方运行。 +* 可扩展:你可以添加并自动分配容器拷贝。 +* 可堆叠:你可以随意垂直堆叠服务。 + +#### 容器和镜像 + +镜像是一个可执行的包,这个包中含有运行一个应用所需要的一切:代码、运行环境、库、环境变量、配置文件。 + +容器是一个镜像的实例。镜像和容器的关系就好像面向对象语言中类和对象的关系。 + +### 容器和虚拟机 + +一个容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量化。 + +相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序虚拟访问主机资源。一般来说,虚拟机提供的环境比大多数应用程序需要的资源更多。 + +![containers-and-vm.png](containers-and-vm.png) + +## Containers + +在以往的开发中,运行一个应用,首先需要准备好它的运行环境。 + +使用 Docker,可以将应用的运行环境(如 JDK、Maven等)打包为一个可移植的镜像。然后,运行应用的同时,运行基础运行环境镜像。 + +这种可移植的镜像定义在一个叫做 `Dockerfile` 的文件。 + +### Dockerfile + +Dockerfile定义了容器内环境中发生的事情。访问网络接口和磁盘驱动器等资源是在此环境中虚拟化的,与系统的其余部分隔离,因此您需要将端口映射到外部世界,并明确要将哪些文件“复制”到那个环境。但是,在完成这些之后,您可以预期,在此Dockerfile中定义的应用程序构建在运行时的行为完全相同。 + +### 创建并运行一个镜像 + +(1)创建一个目录 + +```sh +mkdir -p /home/zp/dockerdemo +cd /home/zp/dockerdemo +``` + +(2)定义一个 Dockerfile + +```docker +# Use an official Python runtime as a parent image +FROM python:2.7-slim + +# Set the working directory to /app +WORKDIR /app + +# Copy the current directory contents into the container at /app +ADD . /app + +# Install any needed packages specified in requirements.txt +RUN pip install --trusted-host pypi.python.org -r requirements.txt + +# Make port 80 available to the world outside this container +EXPOSE 80 + +# Define environment variable +ENV NAME World + +# Run app.py when the container launches +CMD ["python", "app.py"] +``` + +> 代理服务器在启动并运行后可以阻止与您的网络应用程序的连接。如果您位于代理服务器的后面,请使用 `ENV` 命令为您的代理服务器指定主机和端口,将以下行添加到 Dockerfile 中: +> +> ```docker +> # Set proxy server, replace host:port with values for your servers +> ENV http_proxy host:port +> ENV https_proxy host:port +> ``` + +(3)创建一个 app + +这里以创建一个 python 应用为例。 + +在 Dockerfile 同目录下新建 `requirements.txt` 文件和 `app.py` 文件。 + +创建一个 `requirements.txt` 文件 + +``` +Flask +Redis +``` + +创建一个 `app.py` 文件 + +```py +from flask import Flask +from redis import Redis, RedisError +import os +import socket + +# Connect to Redis +redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2) + +app = Flask(__name__) + +@app.route("/") +def hello(): + try: + visits = redis.incr("counter") + except RedisError: + visits = "cannot connect to Redis, counter disabled" + + html = "

Hello {name}!

" \ + "Hostname: {hostname}
" \ + "Visits: {visits}" + return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=80) +``` + +(4)构建应用 + +创建一个 Docker 镜像,执行命令: + +```sh +docker build -t friendlyhello . +``` + +查看 Docker 镜像,执行命令: + +```sh +$ docker image ls + +REPOSITORY TAG IMAGE ID +friendlyhello latest 326387cea398 +``` + +(5)运行 app + +使用 `-p` 将您的机器的端口4000映射到容器的已发布端口80 + +```sh +docker run -d -p 4000:80 friendlyhello +``` + +然后,可以访问 http://localhost:4000 + +### 共享镜像 + +(1)注册登录 + +在 [cloud.docker.com](https://cloud.docker.com/) 注册账户,然后使用 Docker ID 登录。 + +```sh +docker login +``` + +> 注册 Docker ID ,要访问 google ,国内无法访问。要命。 + +(2)给镜像打标签 + +``` +docker tag image username/repository:tag +``` + +例: + +``` +docker tag friendlyhello john/get-started:part2 +``` + +(3)发布镜像 + +``` +docker push username/repository:tag +``` + +(4)从远程仓库拉取并运行镜像 + +``` +docker run -p 4000:80 username/repository:tag +``` + +## Services + +## Swarms + +## Stacks + +## Deploy + +## 常用命令行 + +```sh +docker # 列出所有 Docker 命令 + +docker version # 显示 docker 版本 +docker info # 显示 docker 信息 + +docker build -t friendlyhello . # 使用当前目录下的 Dockerfile 创建 Docker 镜像 +docker run -p 4000:80 friendlyhello # 运行 "friendlyname" ,并映射端口 4000 到 80 +docker run -d -p 4000:80 friendlyhello # 同样的事,但是使用分离的模式 + +docker container --help # 列出 docker container 相关命令 +docker container ls # 列出所有运行的容器 +docker container ls -a # 列出所有的容器 +docker container stop # 优雅的停止所有指定的容器 +docker container kill # 强制停止所有指定的容器 +docker container rm # 从本机中溢出指定的容器 +docker container rm $(docker container ls -a -q) # 移除所有容器 + +docker image --help # 列出 docker image 相关命令 +docker image ls -a # 列出本机中所有的镜像 +docker image rm # 从本机中溢出指定的镜像 +docker image rm $(docker image ls -a -q) # 移除本机中所有镜像 +docker login # 使用您的 Docker ID 登录以从 Docker Hub push 和 pull 图像。 +docker tag username/repository:tag # 标记 以上传到注册中心 +docker push username/repository:tag # 上传标记过的镜像到注册中心 +docker run username/repository:tag # 运行一个注册中心上的镜像 +```