入门Docker

Docker简介(构建、安装、运行、任何应用在任何地点)
是什么
  解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
  Docker三要素:仓库Docker Hub存放镜像、镜像、容器
能干嘛
  有了容器,就可以将软件运行所需的资源环境打包到一个隔离的容器中
  容器内没有自己的内核,而且也没有进行硬件虚拟,因此容器要比传统虚拟机更轻便
  缩小版浓缩版Linux系统
  虚拟机的缺点:资源占用多、冗余步骤多、启动慢,
  Linux容器不是模拟一个完整操作系统,而是对进程进行隔离,
去哪下

Docker安装
  前提条件:运行在CentOS-7上,要求系统为64位,系统内核版本为3.10以上 查看版本:uname -r
  运行在CentOS-6.5或更高的版本上,要求系统为64,内核版本为2.6.32-431或更高版本
Docker架构
  Client Containers / Images Registry(阿里云、网易云)
  docker build 容器Redis 镜像含 仓库中含
  docker pull 容器Nginx Redis、Nginx Redis、Nging
  docker run 容器Rs+Nx 镜像
镜像/容器/仓库
  镜像就是一个只读的模板,镜像可以创建多个Docker容器,如:类和对象/容器好比是镜像的一个个实例
  容器可以看做简易版Linux环境(中包括root用户权限、进程空间、用户空间、网络空间)和运行在其中的应用程序;Docker版CentOS仅为170M,只用了Linux内核
  仓库分为公开库和私有库两种形式,国内公开库一般使用阿里云和网易云
  有镜像才能创建容器,这是根本
安装步骤(CentOS-6.8)
  yum install -y epel-release
  yum install -y docker-io
  安装后的配置文件:/etc/sysconfig/docker
  启动Docker后台服务:service docker start
  验证:docker version

安装步骤(CentOS-7)

  HelloWorld官方提供的测试用!
  阿里云镜像加速:配置步骤 (CentOS-6.8)
  登录阿里云淘宝号即可
  获得加速器地址链接
  配置本地Docker运行镜像:/etc/sysconfig/docker
  重新启动Docker服务:service docker restart
  Linux系统下检查配置是否生效:ps -ef|grep docker

配置步骤 (CentOS-7)
  vim /etc/docker/daemon.json
  "registry"-mirrors":["https://aa25jngu.mirror.aliyuncs.com"]
  systemctl daemon-reload
  systemctl restart docker
  网易云镜像加速:和阿里云类似

  docker run hello-world运行后会提示:Pulling from hello-world表示:本地没有改镜像,会自动下载hello-world镜像并在容器内运行。

Docker是怎么工作的?
  Docker是Client-Server结构的,Docker守护进程运行在主机上,
  通过Socket连接从客户端访问守护进程,接收命令并管理运行在主机上的容器

为什么Docker运行比vm快?
  镜像较大 镜像小
  面向硬件的 面向软件的
  虚拟机是分钟级的,Docker是秒级的不需要硬件虚拟,而不像vm需要处理cpu/内存消耗

Docker常用命令
  技术都是想通的、万变不离其宗
  命令分类:镜像命令、容器命令、帮助命令
帮助命令:
  docker version 版本
  docker info 版本描述
  docker --help 帮助命令
  (Linux:man帮助、marik创建目录、touch创建文件、pwd当前位置)
镜像命令(好几层!,分层)
  docker images 列出本地所有镜像:REPOSITORY:标识镜像的仓库源,TAG镜像的标签,IMAGEID镜像ID,CREATED镜像创建时间,SIZE:镜像大小
  -a 列出本地所有镜像的(中间层)
  -q 只显示镜像ID
  --digests
  --no-trunc、

  docker search 某个xxx镜像名称:如tomcat
  -s 30 tomcat 过滤列出超过点赞数量的
  docker pull tomcat 下载下来
  docker rmi -f hello-world:3.2 (-f:强制删除)
  docker rmi -f hello-world nginx (-f:删除多个)
容器命令
  docker run -it centos 新建并启动交互式容器
    --name mycentos0115 centos 容器别名
    -i 以交互模式运行容器
    -t 为容器分配终端, 通常和-i同时使用
    -d 后台运行容器,返回容器ID,即为守护式容器
    -P 随机端口映射
    -p 指定端口映射,有以下四种格式
      ip:hostPort:containerPort
      ip::containerPort
      hostPort:containerPort
      containerPort
  docker ps 查看已启动的容器
    -a 历史运行记录
    -l 上一次运行的
    -n 3 上3次运行的
    -q 只显示容器编号

  exit 容器退出停止
  Ctrl+P+Q 容器退出不停止

  docker start 容器ID编号, 启动容器

  docker restart 容器ID编号,重启容器

  docker stop 容器ID编号,关闭容器
  docker kill 容器ID编号,强制关闭容器

  docker rm 容器ID编号,删除容器

重点   docker run -d centos 启动容器守护进程 (有些需要运行后台或前台,Docker容器后台运行,必须有一个前台进程)

    docker run -d centos /bin/sh -c"while true;do echo hello zzyy;sleep 2;done"
    docker logs -t -f --tail 3 容器ID编号, 查看容器日志

    docker top 容器ID编号,查看容器内运行的进程

    docker inspct 容器ID编号,查看容器内部细节

    docker attach 容器ID编号,进入正在运行的容器并以命令行交互
    exec -t 容器ID编号,ls /../.. 在外边操作容器
    docker cp 容器ID编号:/tmp/yum.log /root,从容器内拷贝文件到主机上(容器中数据持久化)
Docker镜像(轻量级,可独立运行的软件包)
    UnionFS(联合文件系统)(花卷)
    Docker镜像加载原理
    docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
    在Docker镜像的最底层是bootfs,
    分层的镜像
    分层特点:资源共享(下载多次得以体现)

Docker镜像commit操作
    docker run -it -p 8888:8080 tomcat
    docker run -it iP tomcat

    docker commit提交容器副本使之成为一个新的镜像
    docker commit -a="作者" -m="提交的描述信息" 容器ID 要创建的目标镜像名:[标签名 ]
    docker commit -a="zzyy" -m="del tomcat docs" 容器iD编号 atguigu/mytomcat:1.2

Docker容器数据卷(-v 添加容器卷)
    做持久化,容器间的共享数据,类似rdb,aof
  特点:
    数据卷可在容器之间共享或重用数据
    卷中的更改可以直接生效
    数据卷中的更改不会包含在镜像的更新中
    数据卷的生命周期一直持续到没有容器使用它为止
    容器内添加
  命令:
    1.docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    docker run -it -v /myDataVolume:/dataVolumeContainer centos
    2.查看数据卷是否挂载成功
    docker inspect 容器ID编号
    3.容器和宿主机之间数据共享
    vi host.txt,同步(容器)也会创建
    4.容器停止退出后,主机修改后数据是否同步
    exit
    vi host1.txt
    是同步
5.命令(带权限)
  docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
  docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos:只允许容器读,不可写


  JavaEE Hello.java ==> Hello.class
  Docker images ==> DockerFile


DockerFile方式 添加 容器数据卷
  1.根目录下新建mydocker文件夹进入
  2.可在Dockerfile中使用"VOLUME指令"来给镜像添加一个或多个数据卷

  3.DockerFile构建
    # volume test
    FROM centos
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finished,----------success1" 打印
    CMD /bin/bash
  4.build后生成镜像
    docker build -f /mydocker/Dockerfile -t zzyy/centos .
    docker images
  5.run容器
    docker run -it zzyy/centos
    (通过DockerFile方式没有指定宿主机目录也会默认有)
    docker ps
    docker inspect 容器ID编号
    vi host1.txt
数据卷容器(容器间传递共享--volumes-from)
  容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止!

  docker run -it --name dc01 zzyy/centos(//zzyy/centos自己的新建的容器)

  docker run -it --name dc02 --volumes-from dc01 zzyy/centos

  docker run -it --name dc03 --volumes-from dc01 zzyy/centos

  docker attach dc01
  pwd
  ll
  父到子容器,子到父容器都可共享

  删除父容器子容器不受影响



DockerFile解析
  DockerFile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本。
  构建三步骤:编写DockerFile文件、Docker buile构建、docker run运行

  FROM scratch //元镜像、祖先镜像
  MAINTAINER The CentOS Project <cloud-ops@centos.org>//作者邮箱
  ADD c68-docker.tar.xz / //压缩
  LABEL name="CentOS Base Image" //说明
  vendor = "CentOS"
  license = "GPLv2"
  build-date = "2016-06-02"
  #
  CMD ["/bin/bash"]//
Dockerfile面向开发、Docker镜像为交付标准、Docker容器则涉及部署与运维,缺一不可,Docker体系基石

DockerFile体系结构(保留字指令)
  FROM 继承、当前镜像基于那个镜像
  MAINTAINER 描述
  RUN 容器构建时需要运行的命令,如要需下载的命令
  EXPOSE 容器对外暴露的端口
  WORKDIR 启动时容器时的根目录,默认是:/ 根目录(pwd)
  ENV 设置环境变量
  ADD 拷贝压缩文件
  COPY 拷贝
  VOLUME 创建容器数据卷、用于数据保存/持久化工作
  CMD 容器启动时运行的命令(可有多个、但只最后一个生效)
  ENTRYPOINT 和CMD类似、CMD在人工写了时候会被覆盖、ENTRYPOINT会追加并不覆盖
  ONBUILD 类似于触发器
  自定义镜像(案例)
  编写 from centos
  MAINTAINER 王路凯 18303051935@163.com

  ENV mypath /tmp
  Workdir $mypath

  RUN yum -y install vim
  RUN yum -y install net-tools

  Expose 80
  CMD "bin/bash"
  build
  docker build -f /mydocker/Dockerfile2 -t mycentos:1.3
  docker images
  run
  docker run -it mycentos:1.3
  -ls (会覆盖CMD)

查看镜像生成时变更历史:
  docker history 容器ID编号

案例定义tomcat9镜像

  留给自己将来的作业!!!
  --privileged=true//写软权限不够的话加

  docker exec 容器ID编号 java -version

  主机中改了项目,容器中的web项目也改(通过容器卷)

  push 没讲呢(发布阿里云用)

Docker常用安装

  自己安装Tomcat
  自己安装Mysql
  自己安装Redis

本地镜像发布到阿里云

  创建镜像两种方式:Dockerfile ,commit
  找脑图!

------------------------------------------------------------------------------

  

原文地址:https://www.cnblogs.com/Bkxk/p/9389458.html