docker 基础
概述
起源
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 基础的更多相关文章
- Docker - Docker基础命令及使用
Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...
- 【云计算】Docker云平台—Docker基础
Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...
- Docker基础技术:Linux Namespace(下)
在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...
- Docker 基础技术:Linux Namespace(下)
导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- Docker 基础 : 镜像
目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...
- Docker 基础技术之 Linux cgroups 详解
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...
- docker 基础知识分享ppt
给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx
- 中标麒麟龙芯平台--docker基础镜像制作
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
随机推荐
- Xamarin.Android 集成百度地图SDK
前言:趁着周六闲得没事干,赶紧搞一搞Xamarin,最近也是怪无聊的,枯燥的生活不如打几行代码带劲:好了我们进入正题 我这篇文章时参考一位大佬的博客进行改变的,当然他写的需要一定的经验才可以看得懂,我 ...
- qt之图像处理
毕业2年了,一直使用的qt做桌面程序,很少接触图像算法类的东西,最近由于项目的原因,不得不了解下图像处理,不过也是一些简单的图像处理,仅此作为记录,并希望能帮助初学qt图像处理的朋友. 首先我推荐一篇 ...
- java基础(十四)-----详解匿名内部类——Java高级开发必须懂的
在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.匿名内部类使用的形参为何要为final. 使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: n ...
- C语言中你可能不熟悉的头文件(stdlib.h)
C语言中你可能不熟悉的头文件<cstdlib>(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- 四则运算4(Android版)
队员:王楗 http://home.cnblogs.com/u/wangjianly/ 结组照:
- javascript深入理解js闭包(转载)
此篇文章来源于http://www.jb51.net/article/24101.htm 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全 ...
- Hive 导入 parquet 格式数据
Hive 导入 parquet 数据步骤如下: 查看 parquet 文件的格式 构造建表语句 倒入数据 一.查看 parquet 内容和结构 下载地址 社区工具 GitHub 地址 命令 查看结构: ...
- 系列文章|OKR与敏捷(一):瀑布式目标与敏捷的冲突
OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...
- HDFS架构及原理
原文链接:HDFS架构及原理 引言 进入大数据时代,数据集的大小已经超过一台独立物理计算机的存储能力,我们需要对数据进行分区(partition)并存储到若干台单独的计算机上,也就出现了管理网络中跨多 ...