想试试Docker?六分钟入门学习

723 阅读2分钟

开发时,我们总是会碰到这样一些问题:

  • 在多台服务器重复安装同一个环境
  • 开发时项目在本地正常运行,一放到服务器上就挂了
  • 测试人员提的bug,在自己的电脑上并没有出现,怀疑是环境问题和测试员左右争辩
  • 测试数据不隔离,因数据问题产生错误
  • 管理环境配置文件麻烦

为了解决以上问题,我们希望可以这样:

  • 通过简单的几条命令,就能配置好运行环境
  • 服务之间可以自由组合,自定义特殊环境需求
  • 理直气壮的接受测试员抛过来的bug

幸运的是,docker实现了我们的愿望。 docker甚至在部分情况下,搭建环境就和安装app一样简单,只需要一条命令行就可以让服务跑起来。

例如要搭建一个nginx文件服务:

docker run -v build:/etc/nginx/html -p 80:80 nginx

不仅过程极其简单,多次重复尝试,运行的结果也能保持一致。

一个简单的网站

docker官方提供了一个新手示例

项目目录结构
|-- templates // 页面模版
  |-- index.html
|-- Dockerfile // docker镜像配置文件
|-- app.py // python服务入口文件
|-- requirements.txt // python依赖文件

自定义一个应用,是通过配置Dockerfile来实现的:

# 依赖的镜像
FROM alpine:3.5

# 安装 python 和 pip
RUN apk add --update py2-pip

# 更新 pip
RUN pip install --upgrade pip

# 安装应用需要的python依赖包
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt

# 复制应用运行需要用到的文件
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/

# 容器需要暴露给外部的接口
EXPOSE 5000

# 运行应用
CMD ["python", "/usr/src/app/app.py"]

在项目根路径执行构建镜像命令:

docker build -t app:1.0 .

成功后,就可以使用生成的镜像运行应用了:

docker run -p 80:5000 app:1.0

当我们开始完整尝试用docker部署项目时,会遇到各种需要google的问题:

  • 多个服务的容器之间是如何联系的?
  • Dockerfilevolume为什么无法实现run命令 -v的效果?
  • CMDENTRYPOINT 有什么区别?
  • 构建镜像时,项目编译速度异常的慢怎么办?等等