docker是什么?为什么会出现?
容器虚拟化技术;轻量级的虚拟机(但不是虚拟机)
开发:提交代码 ——> 运维:部署
在这中间,因为环境和配置,出现问题 ——> 把代码/配置/系统/数据...自底至上一起打包成镜像
一次封装构建,到处运行
 
docker:用于将应用以轻量级容器的形式pack、ship、run
虚拟机的启动是分钟级的:资源占用多,冗余步骤多,启动慢
而docker有更少的抽象层,启动是秒级的:docker(linux容器)不是模拟一个完整的操作系统,而是对进程进行隔离,只需要软件工作所需的库资源和设置。没有自己的内核,也不虚拟硬件,每个容器相互隔离(有自己的文件系统)
 

一次开发、随处运行:开发自运维
 
docker 的三大特征:镜像image、容器container、仓库repository
镜像是模板,容器就是镜像的一个实例
 
容器可以被启动、开始、停止、删除,每个容器都是相互隔离的。容器的定义和镜像几乎一模一样,唯一区别在于容器的最上面那一层是可读可写的。
仓库:集中存放镜像文件的地方。仓库和仓库注册服务器registry是有区别的,registry上往往存放了多个repository。
 
Docker 常用命令
1. 帮助命令
docker version
docker info
dockder --help
 
 
2. 镜像命令
docker images  查看所有镜像
  -a 列出本地所有镜像(包含中间镜像层)
  -q 只显示镜像id
  -qa
  --digests 显示镜像摘要信息
  --no-trunc 显示完整镜像信息(不要截取)
 
docker search [OPTIONS] 镜像名字  去docker hub上查找镜像
  --no-trunc 显示完整镜像描述
  -s 列出收藏数不小于指定值的镜像
  --automated 只列出automated build类型的镜像
 
docker pull [OPTIONS] 镜像名字:TAG  拉取镜像
 
docker rmi [OPTIONS] 镜像名字  删除镜像
  docker rmi -f 镜像ID  删除单个
  docker rmi -f 镜像名1:TAG 镜像名2:TAG  删除多个
  docker rmi -f $(docker images -qa)  删除全部
 

 
3. 容器命令
有镜像才能创建容器
 
docker run [OPTIONS] 镜像 [COMMAND] [ARG...]  新建并启动容器
  

  启动交互式容器:docker run -it 镜像

docker ps [OPTIONS]  列出当前所有正在运行的容器
  
 
exit / ctrl+P+Q 容器停止退出/容器不停止退出  两种退出容器的方式
 
docker start 容器名或id  启动容器
 
docker restart 容器名或id  重启容器
 
docker stop 容器名或id  停止容器
 
docker kill 容器名或id  强制停止容器
 
docker rm 容器名或id  删除已停止容器
  一次性删除多个容器:docker rm -f $(docker ps -qa)  docker ps -qa | xargs docker rm
 
docker run -d 容器名  启动守护式容器
  
  最佳解决方案是将你要运行的程序以前台进程的形式运行
 
docker logs 容器id  查看容器日志
  -f 跟随最新日志打印
  -t  加入时间戳
  --tail  数字,显示最后多少条
 
docker top 容器id  查看容器内的进程
 
docker inspect 容器id  查看容器内部细节(json串)
 
进入正在运行的容器并以命令行交互:
docker exec -it 容器id bashshell  在容器中打开新的终端,并且可以启动新的进程
docker attach 容器id  直接进入容器启动命令的终端,不会启动新的进程(重新进入)
 
docker cp 容器id:容器内路径 目的主机路径  从容器内拷贝文件到主机上
 
 
4.Docker 镜像
镜像:轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件(包括代码、运行时、库、环境变量和配置文件)
 
UnionFS联合文件系统:分层、轻量级并且高性能的文件系统。对文件系统的修改作为一次提交来一层一层的叠加。
  
 

为什么docker镜像很小?

5.Docker 镜像commit 操作补充
docker commit 容器id 命名空间/要创建的目标镜像名:[标签名]  提交容器副本使之成为一个新的镜像
  -m='提交的描述信息'
  -a='作者'

 
6.Docker 容器数据卷
把docker容器运行产生的数据持久化
容器之间继承+共享数据
 
数据卷添加
直接命令添加
  命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    主机下面的目录会自动创建
  查看数据卷是否挂载成功:docker inspect 容器id 查看数据绑定
  容器和宿主机之间数据是否共享?—— 共享
  容器停止退出后,主机修改数据,容器再次启动后数据是否同步?—— 是
  命令(带权限,类似于写保护):docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
 
DockerFile添加
  1.根目录下新建mydocker文件夹并进入
    cd /
    mkdir mydocker
  2.可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷
    VOLUME["/dataVolumeContainer", "/dataVolumeContainer2", "/dataVolumeContainer3"]
    因为迁移性的原因,不能指定主机目录
  3.File构建
    FROM ubuntu
    VOLUME ["/dataVolumeContainer1","/dataVolumeCintainer2"]
    CMD echo "finished --success"
    CMD /bin/bash
  4.build 后生成新镜像 wcj/ubuntu
    docker build -f /mydocker/Dockerfile -t wcj/ubuntu .
  5.run容器
    docker run -it wcj/ubuntu
  通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址呢? ——主机对应默认地址。
    docker inspect 容器id  查看一下

 
7.数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
活动硬盘上挂活动硬盘,实现数据的传递
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止(只要还有一个容器挂载,数据卷就是一直在容器间互通的)
 
先启动一个父容器dc01,在dataVolumeContainer2新增内容
  docker run -it name dc01 wcj/ubuntu
  touch /dataVolumeCintainer2/dc01_add.txt
 
dc02/dc03继承自dc01,分别新增内容
  docker run it --name dc02 --volumes-from dc01 wcj/ubuntu
  touch /dataVolumeCintainer2/dc02_add.txt
  docker run it --name dc03 --volumes-from dc01 wcj/ubuntu
  touch /dataVolumeCintainer2/dc03_add.txt
 
回到dc01,能看到dc02和dc03添加的内容
删除dc01,dc02修改后dc03可否访问? ——可以
删除dc02后dc03可否访问?——可以
新建dc04继承dc03后再删除dc03?——还是可以访问

 
 
8.Dockerfile 解析
Dockerfile 是用来构建 docker 镜像的的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤:Dockerfile  docker build  docker run
  

  

Dockerfile 保留字指令
  

 
FROM
MAINTAINER
RUN
EXPOSE
WORKDIR
ENV
ADD  (复制+解压/处理)
COPY  (就只是复制)
  COPY src dest
  COPY ["src","dest"]
VOLUME
CMD  (dockerfile中的多个CMD只有最后一个会生效,而且会被docker run之后手动加的参数覆盖)
ENTRYPOINT  (追加,不被覆盖。docker run 之后的参数会被当作参数传递给ENTRYPOINT,形成新的命令组合)
ONBUILD  (作为父镜像时,之后的内容被触发)
 
 

镜像的生成方法:
1. Dockerfile
2.从容器中创建一个新的镜像
docker commit [OPTIONS] 容器id 镜像名:TAG
  -m"说明文字"
  -a"作者"

  

Docker 核心技术的更多相关文章

  1. Docker 核心技术与实现原理

    提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了.作为在生产环境中广泛应用的产品,Docker 有 ...

  2. Docker核心技术

    Docker核心技术 1.cgroup 即controller group,其重要概念是子系统,首先挂载子系统,然后才有control group.例如cpu子系统,挂载至系统之后,创建一个cgrou ...

  3. 深入浅出Docker(一):Docker核心技术预览

    Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种在安全.可 ...

  4. 后端技术杂谈10:Docker 核心技术与实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. docker核心技术(2)

    鸟瞰容器生态系统 一谈到容器,大家都会想到 Docker. Docker 现在几乎是容器的代名词.确实,是 Docker 将容器技术发扬光大.同时,大家也需要知道围绕 Docker 还有一个生态系统. ...

  6. 【转】Docker 核心技术与实现原理

    转自:https://draveness.me/docker 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段 ...

  7. Docker 核心技术之Docker Compose

    Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...

  8. Docker 核心技术之Dockerfile

    Dockerfile 简介 什么是Dockerfile Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件 利用docker build命令依次执行在Dockerfile中定义 ...

  9. Docker 核心技术之仓库

    Docker 仓库简介 什么是Docker仓库 Docker仓库就是存放docker镜像并有docker pull方法下载的云环境 Docker仓库分为公有仓库和私有仓库. 公有仓库指Docker H ...

  10. Docker 核心技术之数据管理

    Docker 数据卷简介 为什么用数据卷 宿主机无法直接访问容器中的文件 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失 容器之间也无法直接访问互相的文件 为解决这些问题,docker加入 ...

随机推荐

  1. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  2. 卸载 python 3.7.3 再安装 遇到 error 0x80070001

    这件事告诉我,千万不要手贱,闲的发慌蛋疼 手贱把用得好好的python 3.7.3 卸载后怎么装也装不回去, 告诉我遇到了 error 0x80070001 最终还是靠强大的谷歌找到了办法,幸好没有重 ...

  3. java集合框架使用原理分析

    集合是我们日常编程中可能用的很多的技术之一 使用频率极高 可能平时就会知道怎么去用 但是集合之间的关系与不同之处都不是很清楚 对它们的底层原理更甚 所以写词文章 让自己有一个更深的认识 集合是一个庞大 ...

  4. 20190127-Orleans与SF小伙伴的部分问答

    Orleans 怎么部署到服务器? 方式1:Orleans 服务端寄宿在Web应用中,将Web应用部署到服务器 方式2:通过SF/K8s部署到服务器 不同服务器上的谷仓和谷如何调配? 由Orleans ...

  5. 算法导论--最小生成树(Kruskal和Prim算法)

    转载出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶 ...

  6. 【分治】黑白棋子的移动-C++

    题目描述 有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也 ...

  7. Excel公式中问题-记住不要忽略空格!

    总结一下之前犯得愚蠢的小问题: 程序:每日报表:从DB下载数据填充到excel,包括3个sheet,sheet1:总结<模板,公式填充,数据源为sheet2,sheet3>;sheet2: ...

  8. md文档的书写《二》

    对<md文档的书写一>的补充和部分归总 我使用的是Typora,快捷键可能有些片面,没有特殊说明,下文所有快捷键都是Typora编辑器下支持的快捷键,望知晓. 关于标题的书写补充 除了 ( ...

  9. 基站搭建与IMSI捕获

     写在前面 : 实验目的是为了教学交流,坚决抵制违法行为. 一.实验目的 搭建基于OpenBTS的基站,手机接入该基站,进行短信.语音等测试. 二.所用仪器 USRP B210 1台,天线2根,PC机 ...

  10. 172. 阶乘后的零 Java解法

    https://leetcode-cn.com/problems/factorial-trailing-zeroes/ 172. 阶乘后的零 这题要完成其实要知道一个很巧妙的思想,就是阶乘里面,后面的 ...