docker

1.docker

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中

2.docker 三个概念

  • 镜像:
    • 一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器
    • 类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。
    • 镜像是一种轻量级、可执行的独立软件包,
      用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
    • docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
      • UnionFS(联合文件系统):
      • Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加
        同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
        Union 文件系统是 Docker 镜像的基础。
        镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
      • 好处:共享资源
    • docker镜像都是只读的
    • 当容器启动的时候,一个新的可写成被加载到镜像的顶部,这一层通常称为容器层。容器层之下的层都叫镜像层
  • 容器
    • 类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。
    • 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例
    • 容器是镜像创建的实例。可以创建,启动,停止,删除容器。
    • 各个容器之间是相互隔离的,互不影响
    • 注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
  • 仓库
    • 类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方

3.安装

4.配置aliyun镜像加速

  • 1.注册登录阿里云,获取镜像加速地址
  • 2.vim /etc/docker/daemon.json
  • 3.添加:
    {
    "registry-mirrors": ["https://自己的镜像加速地址.mirror.aliyuncs.com"]
    }
  • 4.systemctl daemon-reload //重新载入配置
  • 5.systemctl restart docker //重启

5.工作流程(client server dameon)

  • Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,
  • 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

    为啥比VM快:

  • 1.docker有着比虚拟机更少的抽象层
    • 由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • 2.docker利用的是宿主机的内核,而不需要Guest OS
    • 当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,
      当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。
      而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

6.docker基本命令:

1.帮助命令:

  • docker version //版本
  • docker info //docker 个人信息
  • docker help //帮助命令

    2.容器命令:

    • docker run [options] xxx [command] [args] //运行
    • options:
      • -i:以交互模式运行容器
      • -t:为容器重新分配一个伪输入终端
      • -p 暴露端口:服务的端口
      • -P 随机分配暴露端口
    • docker ps [options] //查看容器
      • -a:列出当前所有正在运行的容器+历史上运行过的
      • -l:显示最近创建的容器
      • -q:静默模式,只显示容器编号
      • --no-trunc :不截断输出
    • docker stop 容器ID //停止
    • docker exit //容器退出,退出
    • ctrl+P+Q //容器不停止退出
    • docker start 容器ID //启动容器
    • docker restart 容器ID //重启
    • docker logs [options] 容器ID //查看日志
    • options:
      • -f:跟随最新的日志打印
      • -t: 加入时间戳
      • --tail: 数字 显示最后多少条
    • docker inspect 容器ID //查看容器细节,json格式
    • docker attach 容器ID //重新进入容器
    • docker exec -it 容器ID /bin/bash
    • docker cp 容器ID:路径 目标主机路径 //拷贝出docker文件

      3.镜像命令:

    • docker images //列出本地的镜像
    • 参数
      • -a: 列出本地所有镜像,包含中间层
      • -q: 只显示当前镜像的ID
      • --digests:显示摘要
      • --no-trunc:显示完整的镜像信息
    • docker serach XXX //查找镜像
    • 参数:
      • -s: 列出stars不小于指定数目的镜像
    • docker pull XXX:tag //从dockerhub拉取镜像
    • docker rmi imagesid //删除镜像
    • 参数:
      • -f:强制删除
      • docker rmi -f $(docker images -qa) //删除全部
    • docker commit -a "author" -m "del tomcat's docs" e675f76220c4(容器ID) miss201/tomcat:1.0(新的镜像名称)//提交容器的副本生成新镜像

7.容器数据卷:

  • 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性
  • 完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
  • 作用:
    • 1.持久化
    • 2.数据共享
  • 命令:
    #冒号之间不要有空格
    docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
    # 如果有:ro,表示容器内不能修改数据
    # 主机和容器之间就可以进行数据共享了

8.DockerFile 添加

  • 用来构建Docker镜像的构建文件,是由一系列的命令和参数构成的脚本
  • dockerFile保留字:
    FROM:基础镜像,当前新镜像是基于哪个镜像
    MAINTAINER:镜像的维护者的姓名和邮箱
    RUN:容器构建是需要运行的命令
    EXPOSE:当前容器对外暴露出的端口
    WORKDIR:指定当前容器,默认终端登录进来的工作目录
    ENV:用来在构建镜像过程中的设置环境变量
    CMD:指定启动一个容器时候,要运行的指令
    ENTRYPOINT:指定启动一个容器时候,要运行的指令(命令不会被覆盖)
    ONBUILD:子类构建的时候,触发父类的ONBUILD
    ADD:复制并解压缩目标文件到容器内指定目录
    COPY:复制目标文件到容器内指定目录
  • 步骤:构建File-> docker build -> docker run
    • 1.File构建,vi dockerFile,添加如下:
      # volume test
      FROM centos
      VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
      CMD echo "finished,--------success1"
      CMD /bin/bash
    • 2.用DockerFile 构建镜像:
      #生成新镜像
      #注意最后一个.有空格
      docker build -f /docker/DockerFile -t miss201/centos .

9.数据卷容器

  • 概念:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
  • 命令:
    docker run -it --name doc01 miss201/centos
    # 利用--volumes-from 参数,实现挂载,从而实现数据共享
    docker run -it --name doc02 --valumes-from doc01 miss201/centos

10.其它:

  • docker-compose 配置问题:

    # the following setting starts chaincode containers on the same
    # bridge network as the peers
    # https://docs.docker.com/compose/networking/
    - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default
    
    #命名方式是以当前的文件夹目录加上 _default: myapp_default ,在这个文件夹下的所有容器启动文件都会在这个网络里面。
    #要注意一点:要保持配置文件的版本号一致:yaml 文件里的版本号 version:2,
    #如果没有配置版本号,默认的是 version:2,CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE 的生成规则就不是文件夹加上 "_default",
    #如果这时候单独去启动某个文件,就会出现启动的容器不在同一个网络里面,从而出现连接超时的问题。
本作品采用《CC 协议》,转载必须注明作者和本文链接
不卑不亢,不慌不忙,这才是生活的模样。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!