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. windows/linux下如何更换Python的pip源

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:xlixiaohui PS:如有需要Python学习资料的小伙伴可以 ...

  2. C - Dr. Evil Underscores CodeForces - 1285D 二进制

    题目大意:n个数,任意整数x对这n个数取异或值,然后使最大值最小. 思路:数据范围最大为pow(2,30);所以考虑二进制的话,最多有30位.对于某一位d,然后考虑数组v中每一个元素的d为是0还是1, ...

  3. 使用redis-dump与redis-load方式迁移redis数据库

    实际生产场景中,有可能会因为迁移机房或者更换物理机等原因需要在生产环境迁移redis数据.本文就来为大家介绍一下迁移redis数据的方法. 迁移redis数据一般有如下3种方式: 1.第三方工具red ...

  4. [YII2] 文件上传类

    //测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...

  5. Golang交付至Kubernetes

    目录 0.前言 1.Go服务构建 1.1.制作Go服务镜像底包 1.2.制作slave基础镜像底包 1.2.1.Golang镜像 1.2.2.Docker镜像 2.创建golang流水线 3.流水线构 ...

  6. 转载-linux内核长什么样

    来源:Linux中国 今天,我来为大家解读一幅来自 TurnOff.us 的漫画 "InSide The Linux Kernel" . TurnOff.us是一个极客漫画网站,作 ...

  7. Java 多线程 -- volatile 山寨版的synchronized

    在 多线程中,每个线程会把数据从主内存中拷贝到自己的工作内存中,当线程完成计算后,再把工作内存的数据更新到主内存中,或者当主内存主数据有更新是,线程会去主内存取最新数据.但是,当线程特别忙时,就不会去 ...

  8. WebApi参数检查验证FluentValidation的使用方法

    右键打开NuGet程序包管理,进入浏览,搜索 FluentValidation,点击下载 在Model文件夹添加一个Person类进行校验 校验前,using需要引入相应的命名空间方可使用,Abstr ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第七周作业

    <Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作 ...