Docker第一篇:概括

本页所涉及到的内容部分来自《循序渐进学Docker》, 也会加入笔者自己的一些见解。

一、Docker简要概括

1.1 认识Docker

ps:

1.整个docker生态圈类似于Android,有自己的官方镜像库,用户也可以上传自己的image到官方的镜像库。

2.docker有类似于github的的版本控制功能,运行环境可以在多个版本中快速切换,自由选择使用版本提供对外服务。

图片

summary:

Docker 用来管理软件部署的应用,Docker 把应用打包成一个image,image带有版本控制的功能,应用的每次修改就对应这镜像的一个版本,制作好的镜像可以发布到镜像仓库,分享给别人;也可以直接从镜像仓库下载别人制作好的应用,直接运行。

1.2 Docker 的结构和特性

1.2.1 Docker的组成划分

  1. 组成
  • 从软件的视角来看:Docker是使用Golang写的开源程序,采用C/S架构,包含了Docker Server和Docker Client。

  • 从生态的视角来看:其有Docker仓库和Doker自身的应用程序组成。关系类似于Appstore和iOS操作系统

  • Docker 仓库: https://hub.docker.com/

  • Docker 自身的应用程序指的就是我们安装在linux操作系统上的单机版的程序。

  1. Docker 的C/S架构解释:
  • Docker Daemon作为Server端,在宿主机上以后台守护进程的形式运行。Docker Client使用比较灵活,在本机上以bin命令的形式发送指令,也可以在远端通过api发送指令。Docker 的Server端接受指令并把指令分解为一系列的任务去执行。
  1. 工作流程

图片

1.2.2 Docker的存在形式

在Docker的官方仓库中,每个软件都有自己要依赖的操作系统,内核,三方库等。为了统一这些软件的安装部署,不至于使得用户每下载一个包就要下载其他所有的依赖,Docker引入了 分层 的概念。比一个应用拆分成多层,比如操作系统是第一层, 依赖的库和三方软件是第二层,应用的软件包和配置为第三层,如果两个软件有相同的底层,那么就可以实现共享这些层。

图片

这又带来一个问题,如果应用A的配置文件修改了,那就会导致应用B的配置也被修改,为了解决这个问题,Docker规定了层次是有优先级的。就类似Python中的继承机制,实现上层覆盖下层。这也是Docker的写时 拷贝策略 。

图片

在Docker的官方仓库中,只需要它有完整的文件系统和程序包,下载到宿主机上提供对外的服务时,可能会修改文件,这是产生一个空白层进行写时拷贝。Docker把这两种装态做了区分,分别叫做镜像和容器。

图片

在仓库中的应用都是以镜像的形式存在的。把镜像从Docker仓库中下拉到本机,在一个容器类的虚拟机中以这个镜像为模板启动应用,这个虚拟机就叫容器。

tips: 镜像和容器是Docker中最核心的两个概念

1.2.3 Docker版本控制

上面有提到Docker是使用分层的策略,而版本控制也是基于分层的策略实现的。每次镜像的更新,都会新增一层,所以可以实现类似于git一样的机制。

二、docker 运行服务

2.1 docker 启动命令

启动命令如下:

  1. 构建镜像
    docker built -d "镜像名" .
  2. 生成并运行容器 8000 是index.py中暴露的端口, 如果使用gunicorn启动需要映射gunicorn配置的端口
    docker run -d -p 4000:8000 "镜像名"

2.2 Dockerfile 文件

Dockerfile 是用来构建images的文件
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

# Use an official Python runtime as a parent image
FROM python:3.7

# 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 -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 8000

# Define environment variable
ENV NAME World

# Run app.py when the container launches
#CMD ["python", "index.py"]
CMD ["gunicorn", "-c", "gunicorn_conf.py", "index:app"]

dockerfile命令详解


未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值