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的操作,例如增加、删除、修改文件等操作都会写入读写层。

docker深入学习一的更多相关文章

  1. 在Windows环境中开始Docker的学习和体验

    研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...

  2. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

  3. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  4. docker深入学习

    docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...

  5. 服务器搭建远程docker深度学习环境

    服务器搭建远程docker深度学习环境 本文大部分内容参考知乎文章 Docker+PyCharm快速搭建机器学习开发环境 搭建过程中出现ssh连接问题可以查看最后的注意事项 Docker Docker ...

  6. Docker命令学习

    今天更换腾讯云系统的时候发现了多了个CoreOS,据说是专门运行docker的轻量系统,顺便学习一下docker命令. 1. docker version 显示 Docker 版本信息. 2. doc ...

  7. 有关docker的学习链接

    本文是自己搜索的比较好的网上资源,便于有兴趣者查阅. 英文官网 https://docs.docker.com/engine/getstarted/ 中文入门手册 http://www.docker. ...

  8. Docker个人学习总结

    最近一段时间学习了下Docker,关于Docker的安装,运用什么的在这里我不会过多的说明,我只说我对于Docker的一些理解,附加我用于记录的少量代码. 刚开始学习Docker的时候,找资料在网上看 ...

  9. Docker技术学习

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1598249 貌似Doc ...

  10. Docker入门学习

    Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...

随机推荐

  1. Redis存储Hash

    结构: 1.存取操作: (1)单个存取: (2)一次存储多个,单个取出: 一次取出多个·: (3)取出全部的键和值: 2.删除: (1)删除单个键值对: (2)删除所有键值对: 3.增加数值: 4.减 ...

  2. SpringBoot中Example的动态条件查询

    一.无匹配器的情况: Person person = new Person(); person.setName("test"); Role role = new Role(); r ...

  3. GoCN每日新闻(2019-10-03)

    GoCN每日新闻(2019-10-03) 国庆专辑:GopherChina祝大家国庆节快乐 GoCN每日新闻(2019-10-03) 1. 垃圾回收器如何监控你的应用程序 https://medium ...

  4. GIT 安装和升级

    git 安装: http://git-scm.com/download/mac git 升级: $ git clone git://git.kernel.org/pub/scm/git/git.git

  5. Java获取当天、当前月、当前年(今年)的开始和结束时间戳

    最近在做统计相关的功能的时候涉及到了获取当天的开始和结束的时间戳.当月和当年的开始结束时间戳,特此记录,以作备忘. 相关代码 package com.lingyejun.authenticator; ...

  6. SpringBoot定时任务@Scheduled

    SpringBoot定时任务主要由两个注解完成. @Scheduled加在方法上面. @EnableScheduling加在类上面.可以是Application类,也可以是@Component类,还可 ...

  7. Mybatis(下)

    Mybatis(下) 一.MaBatis核心配置文件 Mybatis 中文文档 Mybatis 中文文档 1. properties 定义属性及读取属性文件,取的时候用 $(name) ,name 为 ...

  8. 安装docker (centos7.6)

    Docker 更新yum包 sudo yum update 卸载旧版本sudo yum remove docker docker-common docker-selinux docker-engine ...

  9. uniapp - 关于ios调试

    [ios调试] 1.一台windows电脑.一根apple数据线(一旦连接以后,apple设备就会自动识别itunes软件,如果没有安装会提示) 2.安装itunes (爱思助手) 3.官方教程:ht ...

  10. 【转】ANDROIDROM制作(一)——ROM结构介绍、精简和内置、一般刷机过程

    作为对Rom制作的一个总结,本节主要介绍以下内容:  1.Rom介绍  2.Rom文件结构  3.app的精简与内置  4.Recovery简介  5.radio包简介  6.一般刷机过程.刷机过程中 ...