Docker简介

Docker是容器虚拟化技术的实现。将运作应用所需要的系统环境,由下而上打包成镜像,以达到应用跨平台间的无缝接轨运作。

Docker和传统虚拟化方式的不同之处

1)传统虚拟机技术是虚拟出一套硬件,并在其上运行一个操作系统,在该系统上再运行所需应用进程。而容器没有进行硬件虚拟,容器内没有自己的内核,容器内的应用进程直接运行于宿主的内核。因此容器要比传统虚拟机更为轻便。

2)每个容器之间互相隔离,每个容器有自己的文件系统,容器之间不会相互影响。

优点

占用资源少,启动快。

三个概念

1)仓库:repository,集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是不同的。仓库注册服务器上存放着多个仓库,每个仓库中存储多个镜像,每个镜像有不同的标签(tag)。

2)镜像:iamge,只读的模板,用来创建Docker容器。

3)容器:container,用镜像创建的运行实例。

Docker常用命令

镜像命令

1)service docker start:启动Docker后台服务

2)docker images [OPTIONS] :列出本地主机上的镜像

OPTIONS说明

-a :列出本地所有的镜像(含中间映像层)

-q :只显示镜像ID。

--digests :显示镜像的摘要信息

3)docker search 镜像名字:查找镜像

4)docker pull 镜像名字[:TAG]:下载某个版本镜像

5)docker rmi 镜像ID1 [镜像ID2...]:删除镜像

组合命令:一次性删除多个命令 docker rm -f $(docker ps -a -q)

6)docker save 镜像名1:版本号 镜像名2:版本号 -o ./压缩包名.tar  :打包镜像

容器命令

1)docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:新建并启动容器

OPTIONS说明

--name="容器新名字": 为容器指定一个名称

-d: 后台运行容器,并返回容器ID,也即启动守护式容器

-i:以交互模式运行容器,通常与 -t 同时使用

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

-P: 随机端口映射

-p: 指定端口映射,有以下四种格式

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

2)docker ps [OPTIONS]:列出当前所有正在运行的容器

OPTIONS说明

-a :列出当前所有正在运行的容器+历史上运行过的

-l :显示最近创建的容器。

-n:显示最近n个创建的容器。

-q :静默模式,只显示容器编号。

3)docker start 容器ID或者容器名:启动容器

4)docker restart 容器ID或者容器名:重启容器

5)docker stop 容器ID或者容器名:停止容器

6)docker kill 容器ID或者容器名:强制停止容器

7)docker rm 容器ID:删除已停止的容器

8)docker logs -f -t --tail 数字 容器ID:查看容器日志

-t 是加入时间戳

-f 跟随最新的日志打印

--tail 数字 显示最后多少条

9)docker top 容器ID:查看容器内运行的进程

10)docker inspect 容器ID:查看容器内部细节

11)docker exec -it 容器ID /bin/bash:进入正在运行的容器并以命令行交互

12)docker cp  容器ID:容器内路径 目的主机路径:从容器内拷贝文件到主机上

13)docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] :提交容器副本生成新的镜像

Docker镜像原理

镜像是一种轻量级、可执行的独立软件包,打包了软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

镜像是由一层一层的文件系统(UnionFS)组成。

为什么Docker镜像要采用这种分层结构

共享资源,复用中间层。不用镜像可以使用相同的镜像层来构建。宿主机只需在磁盘上保存一份基础的镜像层,内存中也只需加载一份镜像层,就可以为所有使用到该镜像层的容器服务了。

镜像的每一层都可以被共享。

Docker容器数据卷

作用:持久化数据,将关键的数据保存在宿主机,以避免容器关闭后,数据跟着消失。

数据卷添加方式

1)直接命令添加

a) 命令: docker run -it -v /宿主机绝对路径目录:/容器内目录的绝对路径  镜像名

b) 使用命令:docker inspect 容器ID  查看容器数据卷是否挂载成功

c)注意:如果docker挂载主机目录Docker访问出现cannot open directory .: Permission denied。解决办法:在挂载目录后多加一个--privileged=true参数即可。

2)Dockerfile添加

a)格式:VOLUME["/containerName1","/containerName2"]

b)注意:编写Dockerfile时,不能指定宿主机目录,而会在运行Dockerfile时,自动生成宿主机的挂载目录。


©著作权归作者所有:来自51CTO博客作者mb5fcdf38f75bdc的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【干货分享】Kubernetes容器网络之CNI漫谈
  2. 【我的Linux,我做主!】Docker容器技术基础入门
  3. docker基本操作
  4. CSS进阶知识flex弹性布局容器与项目
  5. LayoutInflater(布局服务)
  6. Android学习笔记(13):帧布局FrameLayout
  7. Android对View的onMeasure方法理解
  8. android:taskAffinity使用详解
  9. 如何在Android5.1系统上实现RecyclerView高度自适应

随机推荐

  1. 维护Java应用程序的多种形式的用户指南
  2. IE8:Div悬停仅在设置背景颜色时有效,非常奇
  3. golang写服务端程序,作为文件上传与下载的
  4. JSP 或HTML 如何通过button按钮转到想去
  5. 两个堆叠的元素与他们旁边的元素成比例增
  6. 如何将标记中的值传递给PHP变量?
  7. HTML语言中img标签的alt属性和title属性
  8. 使用 html5 svg 绘制图形
  9. XSL:包括根本不工作
  10. 在不可见的webbrowser对象中模拟按键C#