docker三要素

  • 仓库
  • 镜像
  • 容器

仓库

仓库用来存放docker的镜像,类似于github存放代码医养

镜像

镜像是一个模板,封装了应用程序和配置依赖的可交付的运行环境,这个打包好的运行环境就是镜像文件,只有通过这个镜像文件才能生成docker容器,镜像文件可以看作是容器的模板,docker根据镜像文件生成容器的实例,同一个镜像文件可以生成多个同时运行的容器实例。image文件生成的容器实例,本身也是一个文件,称为镜像文件

容器

docker通过运行镜像文件生成的实例交作容器,每个容器之间相互隔离

docker在centos上的安装

centos7以前的版本(docker对centos有最低版本限制,不是所有版本的centos都能够安装)

  1. yum install -y epel-release
  2. yum install -y docker-io
  3. service docker start
  4. docker version

如果第四步出现了版本信息则代表安装成功。

centos7以后的版本

CentOS7 系统CentOS-Extras 库中已带 Docker,可以直接安装:
yum install docker

docker常用命令

docker常用命令

  • docker version
  • docker info
  • docker --help

docker镜像命令

  • docker images 列出本机的镜像 其中repository代表镜像源,tag代表镜像的标签,可以通过repository:tag来唯一确定一个镜像。

    option参数

    -a 代表列出本地的所有镜像

    -q 代表只显示镜像id

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

    --no-trunc 显示镜像的完整信息,此时id比较长,因为id没有被截取

  • docker search 查找镜像,从官方库查找,search后面跟镜像名称,例如 docker search tomcat

    option参数

    --filter 过滤参数比如想要查找星星大于30的则使用 docker search --filter=stars=30 tomcat

    --no-trunc 显示查找结果时不要截断描述部分(description)

  • docker pull 获取镜像 后面跟着[镜像名称:tag名称] 如docker pull tomcat 等价于 tomcat pull tomcat:latest 即如果不指定tag则默认最新的

  • docker rmi 删除镜像 如 docker rmi hello-world,可以删除多个镜像,镜像名称用空格隔开 docker rmi -f hello-world:latest tomcat:latest

    option参数

    -f 强制删除,适用于运行过 直接删除删不掉的情况

    批量删除,可以先查询出要删除的然后获取到id批量删除:docker rmi -f $(docker images -q) 这种先通过查询id然后再引用id删除

  • docker run [OPTIONS] IMAGE [COMMAND] [ARGS...] 启动容器

    option参数

    -i 要与容器进行交互式访问 此命令要配合 -t 一起使用 可以简写为 -it 如果不指定则无法和容器进行交互,典型问题就是敲了命令没反应

    -t 启动容器后开启终端 此命令要配合-i一起使用 可以简写为 -it

    -p [主机端口]:[容器端口] 将容器的端口映射到主机端口上来,例如 docker run -it -p 8888:8080 tomcat则将docker里面运行的tomcat的端口映射到主机的8888端口上来,通过docker ps可以查看到具体的端口映射情况

    -P 随机分配端口

    -d 以守护进程的方式启动容器,此时不会进入到容器系统 通过 docker ps 也看不到容器,但是容器是在后台运行着的

    --name [name名称] 启动容器时指定容器的名称,这样以后可以通过 docker start 容器名称来重新启动容器,注意只有第一次运行的时候用run,后面都可以用docker start 容器id或者容器名称 来启动容器

  • 结束容器 可以使用 exit(直接终止容器) 或者 ctrl+p+q快捷键(退出终端但是不终止容器的运行)

  • docker ps 查询正在运行的容器

    option参数

    -q 代表只显示镜像id

    -a 列出所有的历史容器,包括已经关闭的容器

    -n [数字] 列出所有历史容器的前XX个,例如列出前5个 docker ps -n 5

  • docker start [容器编号或者容器名称] 启动容器(镜像没有运行过时需要用run,运行过一次之后就可以用docker start命令来启动容器了)例如docker start 00adfefads01

  • docker restart [容器编号或者容器名称] 重启容器 例如docker restart 00adfefads01

  • docker stop [容器编号或者容器名称] 停止容器,通过正常的方式停止,相当于正常关闭 例如docker stop 00adfefads01

  • docker kill [容器编号或者容器名称] 强制停止容器 例如docker kill 00adfefads01

  • docker rm [容器编号] 删除已经停止的容器 例如docker rm 00adfefads01

    option参数

    -f 强制删除,容器正在运行时也可以删除(内部先kill再删除)例如docker rm -f 00adfefads01

    一次性删除多个容器 docker rm -f $(docker ps -q -a) 或者 docker ps -q -a|xargs docker rm

  • docker logs [容器编号或者容器名称] 查看容器的日志

    option参数

    -t 显示每一条日期的时间

    -f 不停的追加显示最新的日志

    -tail n n代表条数:查看最新的n条日志

  • docker top [容器编号或者容器名称] 查看容器内部运行的进程,如果容器运行的是tomcat那么可以查看到tomcat的进程,类似于linux的top命令

  • docker inspect [容器编号或者容器名称] 查看当前正在运行的容器的内部细节

  • docker attach [容器编号或者容器名称] 重新进入容器(通过ctrl+p+q退出的或者后台运行的容器)

  • docker exec [options] [容器编号或者容器名称] COMMAND [args...] 在宿主机上对容器执行命令,可以不进入容器中就能执行命令,例如启动centos并通过ctrl+p+q退出 然后执行docker exec -t 043fdc418430 ls -l /tmp 命令即可列出容器内/tmp目录内的文件信息。例如:通过docker exec -t 043fdc418430 /bin/bash 可以在外面启动容器中的终端(一个新的进程)

    option参数

    -i 要与容器进行交互式访问 此命令要配合 -t 一起使用 可以简写为 -it 如果不指定则无法和容器进行交互,典型问题就是敲了命令没反应

    -t 启动容器后开启终端 此命令要配合-i一起使用 可以简写为 -it

    docker attach和docker exec的区别:attach直接进入容器启动命令的终端,不会启动新的进程。exec是在容器中打开新的终端并且可以启动新的进程

  • docker cp [容貌编号或者容器名称]:[容器内路径] [主机路径] 将容器内的数据文件复制到主机当中,例如 docker cp 3c2a4af21ffa:/usr/a.log /root将容器中的/usr/a.log文件复制到主机的/root下面

  • docker commit -m="描述信息" -a="作者信息" [容器编号] [新镜像名称]:[标签名] 修改运行的容器之后提交生成一个新的镜像

    实例 1.从docker hub上下载一个tomcat并运行 docker run -it -p 8888:8080 tomcat

    2.故意删除上一步镜像所产生的容器中tomcat的文档 docs文件夹 docker exec -it [容器标号] /bin/bash , ls -l找到webapps文件夹 ,cd webapps , rm -rf docs删除docs文件夹,此时访问localhost:8888/docs则显示404

    3.执行提交操作 docker commit -m="注释" -a="作者" [容器编号] [新镜像名称]:[标签名]

    4.此时如果再运行原来的镜像和新的镜像 两者各自独立互不相关。

docker容器数据卷

卷用于保存容器所产生的数据,能够持久化,容器停止运行之后可以重新从卷中加载数据,卷由docker挂载到容器当中,卷不属于UFS系统,容器被删除时不会删除其挂载的数据卷。

PS:容器数据卷就相当于把容器内和主机上的文件夹做了映射,双方任何一个修改都能反映进去,容器停止之后再重新启动依然能够看到最新的数据

1.卷可以在容器之间共享或者重用数据

2.卷中的更改可以直接生效

3.数据卷中的更改不会包含在镜像的更新之中

4.数据卷的生命周期一直持续到没有容器使用它为止。

  • docker run -it -v [本机绝对路径]:[容器内绝对路径] [镜像名] 挂载容器卷,如果两端的路径不存在则会自动创建,挂载完毕之后 宿主机路径里面的内容发生变更会同步到容器中,容器里面发生的变化也会同步到宿主机当中。

    PS 如果在容器里面没有操作数据卷的权限则需要在启动时加上一个参数:--privileged=true,例如:docker run --privileged=true -it -v /docker/volumhost:/volumcontainer:rw centos

    此时可以通过docker inspect命令查看容器的详细信息 里面能够看到绑定的信息和是否可写的信息:

    "Mounts": [
    {
    "Type": "bind",
    "Source": "/docker/volumhost",//宿主机路径
    "Destination": "/volumcontainer",//容器内路径
    "Mode": "rw",//读写都可以
    "RW": true,
    "Propagation": "rprivate"
    }
    ],

    如果只想让容器内部的数据卷处于只读状态则可以在运行时增加:ro参数:docker run --privileged=true -it -v /docker/volumhost:/volumcontainer:ro centos。 :rw代表可读可写,:ro代表只读

通过dockerfile添加数据卷卷

Dockerfile内容:

```
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished---------------success1"
CMD /bin/bash
```
上面的命令解释:利用centos镜像,并添加2个数据卷/dataVolumeContainer1和/dataVolumeContainer2 然后输出一句话,然后执行/bin/bash命令。

执行以下命令构建这个镜像:docker build -f /xxx/Dockerfile -t test/centos .注意最后有个点"."

然后 通过 docker images可以查看到镜像。

运行镜像:docker run -it test/centos 进入容器后可以看到2个容器卷文件夹都建立好了,通过这种方式创建的数据卷并没有指定宿主机的文件夹,docker会默认给数据卷绑定宿主机的某个文件夹,通过docker inspect 容器id可以看到数据请绑定的宿主机路径。

"Mounts": [
{
"Name": "52e480a497c7ea056fdfcb05e9896b4bc0c0aa29a9f2ff349a4a7d17e15b1d75",
"Source": "/var/lib/docker/volumes/52e480a497c7ea056fdfcb05e9896b4bc0c0aa29a9f2ff349a4a7d17e15b1d75/_data",
"Destination": "/dataVolumeContainer1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Name": "80e882554d9e4a6f2a242c5fb7253f4a074d3d426c33bf190d79d42c77c71162",
"Source": "/var/lib/docker/volumes/80e882554d9e4a6f2a242c5fb7253f4a074d3d426c33bf190d79d42c77c71162/_data",
"Destination": "/dataVolumeContainer2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]

数据卷容器

某个容器中挂在了数据卷,其他容器运行时可以通过--volumes-from=容器ID或名称 来挂载这个容器的数据卷来实现数据卷的共享,数据卷共享之后不会因为数据卷容器关闭而停止共享数据。就相当于一个硬盘5个机器在用,关掉某个机器其他机器一样可以读写数据,数据依然存在。

Dockerfile详解

docker学习笔记一篇就通系列(持续更新)的更多相关文章

  1. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  2. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  3. Docker学习笔记二(linux下安装Docker)

    Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,在虚拟机上安装了,l ...

  4. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  5. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  6. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  7. PHP学习笔记 - 进阶篇(11)

    PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...

  8. PHP学习笔记 - 进阶篇(10)

    PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...

  9. PHP学习笔记 - 进阶篇(9)

    PHP学习笔记 - 进阶篇(9) 图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新 ...

随机推荐

  1. 列表推导式和seed()的理解

    Table of Contents generated with DocToc 列表推导式和seed()的理解 对seed()的理解 列表推导式 第一种用法 第二种用法 列表推导式和seed()的理解 ...

  2. OpenWrite 编辑器如何配置七牛云图床

    感谢用户 mutiantong.cn 的创作分享,原文链接:https://www.jianshu.com/p/29f33ca6e491 1. 配置七牛云 1.1 通过七牛云链接购买七牛云对象存储, ...

  3. 001-iOS开发前奏-C语言笔记

    001-iOS开发前奏-C语言笔记 学习目标 1.[了解]操作系统 2.[了解]应用软件 3.[了解]操作系统的分类和市场占有份额 4.[了解]iOS操作系统 5.[了解]应用软件开发的分类 6.[了 ...

  4. stand up meeting 12/18/2015 ~12/20/2015(weekend)

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云    完成主页面设计和非功能性PDF reader UI设计实现 ...

  5. 漫谈LiteOS-Huawei_IoT_Link_SDK_OTA 开发指导

    1概述 在应用升级过程中,无线下载更新(OTA)是一种常用,且方便的升级方式.Liteos采用的OTA升级方案基于LwM2M协议,实现了固件升级(FOTA)和软件升级(SOTA)两种升级方案.用户可根 ...

  6. Python 类学习的一些Tips

    这里不详细介绍类,只总结一些小萌新在学习python 类时会有的一些疑点. 类的私有性 在python中,属性和方法的访问权限只有两种,公开的,和私有的.在给属性命名时用两个“__”下划线作为开头,就 ...

  7. 吃瓜的正确姿势,Python绘制罗志祥词云图

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 这篇文章中向大家介绍了Python绘制词云的方法,不难看出绘制词云可以说是一 ...

  8. linq详细案例

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  9. 白话理解https

    为什么需要加密? 因为http的内容是明文传输的,传输过程有可能被劫持或被篡改(中间人攻击),如何解决? 当然是加密.最简单的方式就是对称加密(快). 对称机密 就是一个密钥,可以理解为一把钥匙,我们 ...

  10. 模拟HTTP请求调用controller

    原文参考本人的简书:https://www.jianshu.com/p/0221edbe1598 MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller调用,这样 ...