概述

起源

2013 年由 DotCloud 公司开源出来的容器管理工具

DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向

技术原理

开始时是基于 LXC 容器技术

  • cgroup: 将任意进程进行分组化管理,同时还可以控制进程的资源占用(CPU, 内存等等)情况
  • namespace: 让每个进程组有独立的 PID, IPC 和网络空间

详细信息可以参照:http://www.cnblogs.com/wang_yb/p/3923040.html

解决的痛点

  • 打包部署
  • 运行环境标准化
  • 更加高效的利用物理机

docker 基本命令

容器的一个标准的生命周期包括: 创建,启动,停止,终止和移除

  • docker pull busybox # 远程下载 images
  • docker run -it –rm –name busybox busybox # 创建容器,名称为 busybox
  • docker stop/kill busybox # 停止/强行停止 容器
  • docker start/restart busybox # 启动/重新启动 容器
  • docker rm busybox # 移除容器

常用命令

  • docker exec 可以运行 容器中的命令
  • docker cp 可以在主机和容器之间复制文件
  • docker inspect 查看容器的详细信息,也可以查看镜像详细信息
  • docker stats 容器的资源占用信息
  • docker events 返回 docker 主机上发生的所有 docker 事件流
  • docker logs 监控容器的日志
  • docker top 查看容器内运行的进程

docker 使用示例(busybox)

docker 容器是完全隔离的运行环境,但实际使用中,难免需要和外部或者 docker 容器进行交互。

比较常用的交互主要有 环境变量,磁盘,网络

环境变量

docker run -it --rm -e MY_NAME=wangyubin busybox env

外部的环境变量可以在容器启动的时候注入到容器中

磁盘

容器会共享镜像中的内容,容器自己的状态才会保存在磁盘上。

docker volume ls # 查看所有容器占用的磁盘名称
docker volume inspect VOL_NAME # 查看具体的磁盘信息

容器中的文件,不会改变 image

在一个容器中创建文件(test.txt)

$ docker run -it --rm busybox
/ # touch test.txt
/ # ls
bin etc proc sys tmp var
dev home root test.txt usr

重新启动的容器中是不包含这个文件的

$ docker run -it --rm busybox
/ # ls
bin dev etc home proc root sys tmp usr var

容器挂载外部的文件系统

如果希望容器之间共享文件,或者将文件放在容器之外来管理,可采用如下方式 容器启动时挂载外部文件夹

docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox
cd share-dir
touch test.txt

另一个容器也挂载这个文件夹

docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox
/ # ls share-dir
test.txt

网络

容器中的服务默认只有当前容器可以访问,容器的宿主和其他容器都是无法访问的。

通过暴露端口,让宿主可以访问容器内服务

通过 nc 命令模拟一个服务

$ docker run -it -p 1234:1234 --rm busybox
/ # nc -l -p 1234

在宿主机上可以通过 docker ps 命令看到暴露的端口

docker ps

nc localhost 1234   # 连接上本地的 1234 端口,就可以和 docker 容器互发消息

容器创建在同一网络上

创建容器运行的网络,然后将 2 个容器启动到同一个网络上

$ docker network create test
a85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48 $ docker network ls
NETWORK ID NAME DRIVER SCOPE
a85b5589234b test bridge local
... ...

启动第一个 docker,name 为 test01,并在容器中用 nc 命令模拟一个服务

$ docker run -it --rm --name test01 --network test busybox
/ # nc -l -p 1234

启动第二个 docker,name 为 test02,和 test01 在同一个网络上

$ docker run -it --rm --name test02 --network test busybox
/ # nc test01 1234
hello

由于在同一个网络上,可以通过 test01 这个名称直接连接另一个容器

启动第三个 docker,name 为 test03,使用默认的网络

$ docker run -it --rm --name test03 busybox
/ # nc test01 1234
nc: bad address 'test01'

由于 test03 和 test01 不在一个网络上,所以无法互通

docker 基础的更多相关文章

  1. Docker - Docker基础命令及使用

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...

  2. 【云计算】Docker云平台—Docker基础

    Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...

  3. Docker基础技术:Linux Namespace(下)

    在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...

  4. Docker 基础技术:Linux Namespace(下)

    导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...

  5. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  6. Docker 基础 : 镜像

    目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...

  7. Docker 基础技术之 Linux cgroups 详解

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...

  8. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

  9. 中标麒麟龙芯平台--docker基础镜像制作

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...

  10. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...

随机推荐

  1. Python实现 Typora数学公式 转 有道云笔记Markdown数学公式

    话不多说上代码,可以按照自己的需求把匿名函数改成普通函数,改不来的可以加我微信我帮你改. 块状数学公式转换 import re test_str = r''' $D={\{\vec{x_1},\vec ...

  2. AspNetCoreMvc使用MongoDB,快来get一下吧。

    看这篇文章之前请耐心看完MongoDb入门,如果还是坚持不看,那我也没有办法. MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. ...

  3. SignalR学习笔记(五) 横向扩展之SQL Server

    当一个Web应用程序达到一台服务器能力限制,即请求处理数量限制之后,有2种解决方案:纵向扩展和横向扩展. 纵向扩展即用更强的服务器(或虚拟机),或为当前的服务器添加更多的内存,CPU等 横向扩展即添加 ...

  4. Lucene 06 - 使用Lucene的Query API查询数据

    目录 1 Query对象的创建(方式一): 使用子类对象 1.1 常用的Query子类对象 1.2 常用的Query子类对象使用 1.2.1 使用TermQuery 1.2.2 使用NumericRa ...

  5. 前端笔记之HTML5&CSS3(中)选择器&伪类伪元素&CSS3效果&渐变背景&过渡

    一.CSS3选择器 CSS3是CSS的第三代版本,新增了很多功能,例如:强大的选择器.盒模型.圆角.渐变.动画.2D/3D转换.文字特效等. CSS3和HTML5没有任何关系!HTML5骨架中,可以用 ...

  6. Spring Boot分布式系统实践【1】-架构设计

    前言 [第一次尝试去写一个系列,肯定会有想不到的地方,欢迎大家留言指正] 本系列将介绍如果从零构建一套分布式系统.同时也是对自己过去工作的一个梳理过程. 本文先整理出构建系统的主要技术选型,以及技术框 ...

  7. MongoDB的安全写入GetLastError

    这次聊聊业务中经常出现的重试现象,可能很多运维都被开发莫名其妙的艾特然后让查一查业务中出现失败的情况,很不巧刚接手MongoDB的运维就碰到了一个案例. 前段时间与业务开发讨论过某业务服务的超时重试问 ...

  8. Android Nine-patch(.9.png)小结

    最近在项目开发过程中,因为界面布局美化的需要开始接触到.9.png,无论是Goolge官方文档还是网上其他资料, 都给出了很多关于.9.png的基本介绍,.9.png基础文章推荐以下几篇: Googl ...

  9. 如何使用在三星840 SSD硬件加密下使用Bitlocker

    我的笔记本存放到比较重要的资料,需要加密,想到我的三星EVO 850 SSD支持三种加密模式,于是想使用全盘加密模式.但是找了半天没找到一点合适的中文资料,于是怒而翻译一下加密全盘加密的Bitlock ...

  10. java应用程序的运行机制

    计算机高级语言类型主要有 编译型 和 解释型 两种,java是两种类型的结合. 机制:利用编译器(javac)将源文件(后缀名.java)编译成字节码文件(后缀名.class),最后利用虚拟机(jvm ...