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. spark 大杂烩

    累加器 val dataRdd = sc.makeRDD(List(1, 2, 3, 4), 2) var sum = 0 //累加器可以收集driver和各个excuter中累加的结果 //如果此处 ...

  2. 小程序wepy2 模拟vant PasswordInput, NumberKeyboard 密码输入框控件

    vant weapp小程序端控件目前是没有PasswordInput,NumberKeyboard的.实现效果: 数字键盘组件代码(keyboard.wpy): <template> &l ...

  3. SIM900A 通过RS232串口进行短信的发送。

    一.基本数据 1.SIM900A模块支持RS232串口和LVTTL串口.保留了232口,在学习或者开发时可以监听51低端单片机和模块指令执行情况,能更快的找出原因,节省开发和学习的时间. 2.此模块供 ...

  4. MySQL中information_schema 数据库 是干什么的

    MySQL中information_schema是什么 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库. information_sc ...

  5. CountDownLatch 计算器(具有回调功能)

    final CountDownLatch cdl = new CountDownLatch(1); new Thread(new Runnable() { @Override public void ...

  6. Web 如何搭建自己的个人网站

    如何搭建自己的个人技术博客网站 学习目标 1.[了解]搭建网站需要的web构件和网站运行原理 2.[掌握]如何搭建个人博客网站 学习前言 大家都是学习开发的,相信都接触过百度,新浪,淘宝,京东...等 ...

  7. Docker+Cmd+Cli+Git之前端工程化纪要(二)自定义类package.json文件管理模块包

    全新升级后的FE工作流为:使用FE命令包进行项目的初始化,其中包括项目初始化.拉取脚手架.私库拉取模块包或后期扩展的CI/CD等与本公司工作流相关的操作. 出现的问题如下: 脚手架工具的包依赖信息存放 ...

  8. 多线程高并发编程(4) -- ReentrantReadWriteLock读写锁源码分析

    背景: ReentrantReadWriteLock把锁进行了细化,分为了写锁和读锁,即独占锁和共享锁.独占锁即当前所有线程只有一个可以成功获取到锁对资源进行修改操作,共享锁是可以一起对资源信息进行查 ...

  9. 转载:URL链接中的不同用处

    ,井号:表示网页中的一个位置,被称之为锚点,常用于某个网页间不同位置的跳转,简单的说就是在一个网页中,URL 不变的情况下,通过添加"#buy"的字符在 URL 最后可以跳转到当前 ...

  10. Android应用架构分析

    一.res目录: 1.属性:Android必需: 2.作用:存放Android项目的各种资源文件.这些资源会自动生成R.java. 2.1.layout:存放界面布局文件. 2.2.strings.x ...