docker深入学习一

docker是一个客户服务器结构的应用程序,其结构如下所示

其组成部分包括

  • container容器:是image的运行实例,一般container之间以及container与主机之间是相互隔离的,相当于一台轻量级的虚拟机
  • iamge镜像:是一个只读模板,是静态的,image通常是给予另一个image创建的
  • docker CLI 客户端:通过调用RESTAPI控制docker daemon
  • RESTAPI:是与docker daemon交互的API
  • docker daemon守护进程 :docker daemon是一个始终运行的守护进程
  • network
  • datavolumes

dockerfile

dockerfile是一个包含生成image所需命令的文本文件,使用docker build可以自动生成image。

Dockerfile文件是以FROM开头的,也就是说必须引用一个base image如下所示

# 使用python的运行环境作为parent image
FROM python:2.7-slim

# 设置工作路径
WORKDIR /app

# 将当前目录的内容复制到相应路径下
COPY . /app

# 下载requirements.txt中要求的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 暴露容器的80端口
EXPOSE 80

# 定义环境变量
ENV NAME World

#当docker开始运行时执行文件
CMD ["python", "app.py"]

docker build后面可以接本地地址PATH也可以使用远程地址URL,如

$ docker build .

实际 执行build指定的是daemon而不是CLI(CLI相当输入命令行的shell),也就是说输入docker build后,cli会将命令连同上下文环境一起发送给daemon, docker build后面接的PATH或者URL就是上下文环境。
注意:不要将\目录作为上下文环境,因为docker会将上下文环境下的所有文件和文件夹递归发送给daemon。 推荐的做法是新建一个空目录作为上下文环境

类似于github的.gitignore文件,docker也可以使用.dockerignore来忽略指定文件和目录

docker build后面的PATH并不代表的dockerfile所在的路径,但默认情况下docker会在PATH中寻找Dockerfile,如果要指定dockerfile ,可以使用参数-f,如

docker build -f /path/dockerfile   .

使用参数-t可以可以指定生成image的仓库名称和标签,如

docker  build  -t yezh01/getstart .
#  在仓库名称后面可以添加不同标签,同时build命令后面可以接多个 -t 参数
docker  build  -t yezh01/getstart:v1.1  -t yezh01/getstart:latest .

image

image是根据Dockerfile生成的由多个只读层组成的。对于下面的dockerfile,每条命令生成一个只读层

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

其一共生成四个层次:

  • FROM 根据ubuntu:18.04生成一个层次
  • copy将运行docker命令的目录下的文件复制到容器中的app文件中
  • run 使用make命令生成应用程序
  • cmd 在容器中运行指定命令

container

container是根据image生成的运行实例,与image相比,container在image层次的基础上增加了一层读写层。所有对container的操作,例如增加、删除、修改文件等操作都会写入读写层。

posted @ 2019-08-06 18:43  菜鸟当家  阅读(654)  评论(0编辑  收藏  举报