Docker 基础概念和操作

Docker engine

下图展示了 docker engine 的结构,主要包含四部分:image、container、network、data volumes。具体可以参考:Docker architecture

Docker engine

Docker 包括以下几个基本概念

  • 镜像(Image)

    镜像包含操作系统完成的 root 文件系统,因为 Docker 在设计时就采用 Union FS 技术,将其设计为分层存储的架构,所以严格的来讲镜像非一个ISO 的打包文件,镜像只是一个虚拟的概念。实际是由一组文件系统组成。
    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完成就不在发生改变。

  • 容器(Container)

    容器实质上是镜像的运行实例进程,但与直接的宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间、甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里。虽然这种隔离特性和虚拟机很类似,但结构上是不同的。

    容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消失。因此任何保存于容器存储层的信息系都会随容器删除而丢失。

    按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层。

    容器中包含以下内容:

    • 数据卷 (Data Volumes)
    • 网络 (Network)
    • 系统资源 (System)
  • 仓库(Repository)

    镜像构建完成之后,可以很容易的当前宿主上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

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

    我们可以把镜像上传到共有仓库上,也可以上传到私有的仓库。docker同时提供私有的仓库的搭建。你可以很方便的大家一个私有仓库出来。

  • Dockerfile

    提供一套 docker image 的编排机制,可以通过 dockerfile 来配置 image 构建的过程,通过 dockerfile 可以很方便的移植和分享镜像。大家都可以很放心的使用镜像文件,不用担心镜像的构建过程有什么不透明的地方。

  • Docker compose

    我们会在后面的章节单独讲到。

常用操作命令

当 docker 容器中指定的应用终结时,容器也自动终止。

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一种是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

容器操作类命令

docker run
创建并启动容器
    
-c 指定 cpu 的核心数量
-m 指定最大内存
-e --env 设置环境变量
--network
--ip 设置 ip
    
-d 设置后台运行,并返回容器 id
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

-P Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
-p 指定容器和宿主的端口映射,也可以多次使用 -p 来指定多个端口映射

    - 映射所有接口地址
    hostPort:containerPort 将本地指定端口映射到容器指定端口,会默认绑定本地所有接口上的所有地址
    
    - 映射到指定地址的指定端口
    ip:hostPort:containerPort 指定映射使用一个特定的地址,比如:localhost 或 127.0.0.1
    
    - 映射到指定地址的任意端口
    ip::containerPort 绑定 localhost 的任意端口到容器的5000端口,本地主机会自动分配一个端口
    
    还可以指定端口协议(tcp|udp)
    hostPort:containerPort/udp

-v 指定卷映射到宿主的目录路径
--device
    
--rm 退出时删除容器
--restart 
--link 参数的格式为 --link name:alias,其中 name 是要连接的容器的名称,alias 是这个连接的别名。
    
--name 指定 container 名称
--hostname
docker exec
在容器中执行命令

-d 设置后台运行,并打印容器 id
-e 设置环境变量
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-u
docker start
启动一个停止的容器

docker stop
停止指定容器

docker restart
重启镜像
docker ps   
列出当前运行中的所有容器
    
-a 列出所有的包含未运行的
-s 显示文件大小
-q 返回容器 id
docker rm
删除指定镜像
    
-f 强制删除正在运行的容器
-v 删除容器和对应的卷
    
docker rm $(docker ps -a -q)
docker logs
查看当前容器运行日志信息

docker stats
列出所有容器系统资源使用情况(CPU、内存、IO)
    
docker port
查看当前映射的端口配置,也可以查看到绑定的地址。
    
docker inspect 容器
返回 容器当前的实例信息,包含状态、主机配置信息(资源、网络、挂载)
    
docker export
如果要导出本地某个容器,可以使用 docker export 命令,这样讲导出容器快照到本地文件
    
docker import
可以使用 docker import 从容器快照文件中再导入为镜像

镜像操作类命令

docker create
创建一个镜像

docker pull
从仓库获取一个 dockerfile,然后构建出一个本地镜像

docker diff
对比当前容器的差异
    
docker commit
将容器的存储层保存下来成为镜像

- a 作者
- c 添加变更列表
- m 提交内容描述
- p 在提交的时候暂停运行容器
    
docker commit -a "ytWman <ytwman@gmail.com>" -m "updated default page" webserver nginx:v2
    
docker build
通过 Dockerfile 构建镜像
    
docker images
列出当前所有镜像
    
docker search
搜索镜像
    
docker rmi
删除本地镜像
    
docker history 镜像
查看镜像的变更记录,查看提交的内容

查看状态类

docker info
查看 docker 信息

docker version
查看 docker 当前版本

定制镜像(Dockerfile)

如果我们使用 docker commit 来创建镜像,那我们的镜像构建过程都是黑箱操作,没人知道执行过什么命令,怎么生成的镜像,而且制作人可能过一段时间后也无法记清楚具体执行了什么操作。而且镜像每次构建后的会更加臃肿。

我们可以使用 Dockerfile 来一步步配置每个镜像环境,然后通过 docker build 命令来构建一个新的镜像。

Dockerfile 主要是用来移植或分享使用的。

仓库

仓库是几种存放镜像的地方,实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有很多个仓库,而每个仓库下面有多个镜像。

  • Docker Hub
  • 私有仓库

网络配置

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

可以使用 docker ps 或 docker logs 命令来查看应用的信息。

参考文档

https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容