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以后的版本

  1. CentOS7 系统CentOS-Extras 库中已带 Docker,可以直接安装:
  1. 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命令查看容器的详细信息 里面能够看到绑定的信息和是否可写的信息:

    1. "Mounts": [
    2. {
    3. "Type": "bind",
    4. "Source": "/docker/volumhost",//宿主机路径
    5. "Destination": "/volumcontainer",//容器内路径
    6. "Mode": "rw",//读写都可以
    7. "RW": true,
    8. "Propagation": "rprivate"
    9. }
    10. ],

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

通过dockerfile添加数据卷卷

Dockerfile内容:

  1. ```
  2. FROM centos
  3. VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
  4. CMD echo "finished---------------success1"
  5. CMD /bin/bash
  6. ```
  7. 上面的命令解释:利用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可以看到数据请绑定的宿主机路径。

  1. "Mounts": [
  2. {
  3. "Name": "52e480a497c7ea056fdfcb05e9896b4bc0c0aa29a9f2ff349a4a7d17e15b1d75",
  4. "Source": "/var/lib/docker/volumes/52e480a497c7ea056fdfcb05e9896b4bc0c0aa29a9f2ff349a4a7d17e15b1d75/_data",
  5. "Destination": "/dataVolumeContainer1",
  6. "Driver": "local",
  7. "Mode": "",
  8. "RW": true,
  9. "Propagation": ""
  10. },
  11. {
  12. "Name": "80e882554d9e4a6f2a242c5fb7253f4a074d3d426c33bf190d79d42c77c71162",
  13. "Source": "/var/lib/docker/volumes/80e882554d9e4a6f2a242c5fb7253f4a074d3d426c33bf190d79d42c77c71162/_data",
  14. "Destination": "/dataVolumeContainer2",
  15. "Driver": "local",
  16. "Mode": "",
  17. "RW": true,
  18. "Propagation": ""
  19. }
  20. ]

数据卷容器

某个容器中挂在了数据卷,其他容器运行时可以通过--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. 中阶d03.2 JDBC联合properties使用,通过读取本地配置文件为代码传递参数

    * 使用properties读取本地配置文件为代码传递参数 * url.用户名.密码.驱动地址等配置可以在配置文件中使用 main package zj_1_JDBC.properties; impo ...

  2. mappedBy和JoinColumn,onetomany。

    无论是onetomany,还是manytoone.都要设置级联关系(cascade),否则不会储存关联的数据. @Entity public class Clazzss { @Id @Generate ...

  3. fork()系统调用的理解

    系统调用fork()用于创建一个新进程.我们可以通过下面的代码来理解,最好是能自己敲一遍运行验证. ​#include<stdio.h> #include<stdlib.h> ...

  4. Levenshtein算法-比较两个字符串之间的相似度

    package com.sinoup.util;/** * Created by Administrator on 2020-4-18. */ /** * @Title: * @ProjectName ...

  5. AJ学IOS 之控制器view显示中view的父子关系及controller的父子关系_解决屏幕旋转不能传递事件问题

    AJ分享,必须精品 一:效果 二:项目代码 这个Demo用的几个控制器分别画了不通的xib,随便拖拽了几个空间,主要是几个按钮的切换,主要代码展示下: // // NYViewController.m ...

  6. FreeRTOS操作系统工程建立和操作系统的概念

    一.建立工程步骤如下: 二.详细步骤流程如下: 1.新建工程文件夹,然后在里面建立如下几个文件: 2.使用keil5建立工程: a.建立工程: b.添加内核文件: 3.建立文件分组: 4.创建main ...

  7. svg如何设置中心点进行缩放

    中心点设置:x = x+width/2   y=y+height/2缩放开始前后需要变换对应的位置,直接举例:<rect x="110" y="100"  ...

  8. 分屏神器PoweToys

    win+~调用设置分屏界面,shift+软件拖到分屏位置

  9. V - Largest Rectangle in a Histogram HDU - 1506

    两种思路: 1 单调栈:维护一个单调非递减栈,当栈为空或者当前元素大于等于栈顶元素时就入栈,当前元素小于栈顶元素时就出栈,出栈的同时计算当前值,当前值所包含的区间范围为从当前栈顶元素到当前元素i的距离 ...

  10. Linux服务器压力测试总结(CPU、Memory、IO等)

    测试工具:sysbench.memtester.htop 1.htop安装使用 yum install ncurses-devel # 安装依赖包 tar zxvf htop-2.2.0.tar.gz ...