docker是什么

可以简单的认为docker容器是一个虚拟机,封装就是把这个虚拟机打包,打包后能在任何系统跑,docker装上即用。也可以形象的比喻成一个集装箱,把所有货物都打包好放到箱子里,不需要再分类运输,集装箱不互相影响

好处

  1. 统一应用环境
  2. 方便迁移
  3. 占用资源少 (如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来)

docker和虚拟机比较

  1. 虚拟机是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
  2. 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟



Docker架构


基本概念

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
镜像镜像只是一个虚拟的概念,且是分层存储的,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

容器

1.镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
2.容器的本质是进程,但是和宿主执行的进程不一样,它有独立的命名空间,因此有自己的root文件系统,网络配置、进程空间
3.容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡,因此任何保存于容器存储层的信息都会随容器删除而丢失。
注: Docker 最佳实践的要求

1.容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。
2.所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高
3.数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡

仓库

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

使用镜像

获取镜像

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull ubuntu:16.04
docker run 运行容器的命令 docker run -it --rm \
ubuntu:16.04 \
bash
-it: -i:交互式操作 -t:终端 我们这里打算进入bash执行一些命令并查看返回结果,因此需要交互式终端
--rm:这个参数是说容器退出后随之将其删除
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

列出镜像

docker image ls
docker image ls -f dangling=true 虚悬镜像
docker image prune 删除虚悬镜像
docker image ls -a 中间层镜像
docker image ls ubuntu 列出部分镜像
docker image ls -f since=mongo:3.2
docker image ls -f before=mongo:3.2

删除本地镜像

docker image rm [选项] <镜像1> [<镜像2> ...]
docker image rm ID
docker image rm 镜像名
docker image rm 摘要
docker rmi 镜像名

Docker指令

Dockerfile定制镜像

FROM 指定基础镜像
RUN 执行命令
构建镜像 docker build -t nginx:v3 .

COPY 复制文件

  1. COPY <源路径>... <目标路径>
COPY package.json /usr/src/app/
  1. 相对于工作目录的相对路径(工作目录可以用 WORKDIR
  2. 各种元数据都会保留。比如读、写、执行权限、文件变更时间等

ADD

Add 比COPY多了些特性,比如 <源路径> 可以是一个 URL

CMD

  1. shell: CMD <命令>
  2. exec : CMD ["可执行文件", "参数1","参数2"]
CMD echo $HOME
CMD [ "sh", "-c", "echo $HOME" ]

ENV

ENV NODE_VERSION 7.2.0
或者ENV NODE_VERSION=7.2.0
比如使用: RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION

操作容器

启动

$ docker container run \
-d \
-p 127.0.0.2:8080:80 \
--rm \
--name mynginx \
nginx

重启

docker container start

终止

docker stop ID

进入容器

docker attach ID  /exit 会导致容器退出
docker exec -it ID /exit 不会导致容器退出

Docker Compose

安装和卸载

linux安装

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

卸载

$ sudo rm /usr/local/bin/docker-compose

使用

docker-compose up
docker-compose down
docker-compose --version

项目实践

前端眼里的docker的更多相关文章

  1. 用前端姿势玩docker【四】基于docker快速构建webpack的开发与生产环境

    目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...

  2. 用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑

    前言 首先一句话表达个人对docker的理解:与传统虚拟技术基于硬件及物理资源的虚拟化相比,Docker更加轻量化,docker为基于操作系统或内核级别的虚拟化,并且提供了从各种机制与操作以满足从开发 ...

  3. 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理

    目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...

  4. 用前端姿势玩docker【三】基于nvm的前端环境构建技巧

    前言 安装docker啥的就不说了,这里重点强调一下,docker的环境问题.本人的环境: 虚拟机centos => docker => NAT => container 因为需要不 ...

  5. 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

    一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...

  6. 用前端姿势玩docker【二】dockerfile定制镜像初体验

    前言 书接上文,关于dockerfile指令的api在此处不做赘述,在此只是记录下注意事项: '示坑以埋之'. 配置指令 FROM dockerfile必须以此开头 一个dockerfile可执行添加 ...

  7. 前端必须掌握的 docker 技能(1)

    概述 作为一个前端,我觉得必须要学会使用 docker 干下面几件事: 部署前端应用 部署 nginx 给部署的 nginx 加上 https 使用 docker compose 进行部署 给 ngi ...

  8. Docker 发布 Abp net core web 服务

    Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...

  9. Docker: 基础介绍 [一]

    一.Docker介绍 Docker是Docker.lnc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源 Do ...

随机推荐

  1. c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol

    这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的   1.strlen函数:计算目标字符串长度,    格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...

  2. 从零开始,开发一个 Web Office 套件(7):新的问题—— Click 事件的 z-index

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  3. Tableau学习Step5一表计算、详细级别表达式、动作、外接python

    Tableau学习Step5一表计算.详细级别表达式.动作.外接python 本文首发于博客冰山一树Sankey,去博客浏览效果更好. ) Tableau学习Step4一数据解释.异常值监测.参数使用 ...

  4. linux作业--第二周

    1.显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录 ls /etc/ | grep ^[^[:alpha:]][[:alpha:]].* 2.复制/etc目录下 ...

  5. Angular依赖注入:全面讲解(翻译中)

    在实际使用Angular依赖注入系统时,你需要知道的一切都在本文中.我们将以实用易懂并附带示例的形式解释它的所有高级概念. Angular最强大.最独特的功能之一就是它内置的依赖注入系统. 大多数时候 ...

  6. tp5 单文件上传接口

    路由: Route::post('upload','task/task/upload'); 控制器代码: //文件上传接口 public function upload() { $file = req ...

  7. LGP4456题解

    我就是不用矩阵快速幂! 题意:一个 \(\rm 01\) 序列为合法的当且仅当没有两个相邻的 \(1\),若 \(1\) 的个数为 \(x\),\(0\) 的个数为 \(y\),这个 \(\rm 01 ...

  8. source insight新建工程

    1.打开Source Insight.如果已经打开过项目,则选择Project->Close Project.然后点击Project->New Project: 2.在弹出界面填入项目名 ...

  9. ZYNQ 双CPU裸机运行例程

    vivado 2014.4 特殊情况:总DDR内存大于512MB,且CPU0已经占用了超过512MB,这时按以下步骤CPU1无法启动. 原因:启动入口地址限制.更改方法如下: 打开cpu1_bsp\p ...

  10. pygame坦克大战前夕

    最近想自己写pygame版的坦克大战,今晚已经完成如下功能: 1,我方坦克,可手动移动:敌方坦克,自动转方向与移动 2,坦克颜色随机,坦克形态大小可调. 3,双方坦克速度可调. 4,刷新坦克的位置随机 ...