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. 大数据及hadoop简要概念

    大数据 大数据简要概念 指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合.需要新处理模式,才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 大数据作 ...

  2. [题解]P1449 后缀表达式(栈)

    题目链接:P1449 后缀表达式 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优 ...

  3. linux CVE-2019-13272 本地特权漏洞

    漏洞描述 在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来 ...

  4. python 工具链 包管理工具 pip

    Installation mac下可以采用 brew,easy_install(python自带)等方式安装. centos下可以采用yum,easy_install等方式安装. 但是上面两种方式在系 ...

  5. [nodejs] 同步/异步创建多层目录

    背景 有时项目里需要同时创建多层目录的功能,但低版本的nodejs并没有提供快捷的api 尽管在v10.12.0版本 mkdir() 第二个参数支持recursive 参数,为true时能递归创建,但 ...

  6. tensorflow1.0 队列FIFOQueue管理实现异步读取训练

    import tensorflow as tf #模拟异步子线程 存入样本, 主线程 读取样本 # 1. 定义一个队列,1000 Q = tf.FIFOQueue(1000,tf.float32) # ...

  7. 【认证与授权】2、基于session的认证方式

    这一篇将通过一个简单的web项目实现基于Session的认证授权方式,也是以往传统项目的做法. 先来复习一下流程 用户认证通过以后,在服务端生成用户相关的数据保存在当前会话(Session)中,发给客 ...

  8. Scrapy中的crawlspider

    crawlspider 能自动的获取url并提交请求 命令:scrapy genspider -t crawl spidername 'example.cn' 所导入的模块 # -*- coding: ...

  9. 如何优雅的维护 K8S Worker 节点

    前言 正常维护工作节点的流程 当我们要进行 K8S 节点维护时往往需要执行 kubectl drain, 等待节点上的 Pod 被驱逐后再进行维护动作. 命令行如下: kubectl drain NO ...

  10. 备忘录模式 (c++实现)

    模式定义 备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 模式动机 备忘录模式比较适用于功能比较复 ...