Docker学习2

Docker学习

Docker镜像

是什么

  1. 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

  2. UnionFS(联合文件系统)

    1. UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

    2. UnionFS是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。

    3. 特性:

      一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  3. Docker镜像加载原理

  4. 分层的镜像

  5. 为什么Docker镜像要采用这种分层的结构

    1. 最大的一个好处就是——共享资源
    2. 例如:有多个镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

特点

  1. Docker镜像都是只读的
  2. 当容器启动时,一个新的可写层被加载到镜像的顶部
  3. 这一层通常被称作**“容器层”,容器层之下的都叫“镜像层”**。

Docker镜像commit操作补充

  1. docker commit 提交容器副本使之成为一个新的镜像

  2. docker commit -m="提交的描述信息" -a="作者"  容器ID 要创建的目标镜像名:[标签名] 
    

Docker容器数据卷

是什么

类似Redis的RDB和AOF文件

能干嘛

  1. 容器的持久化
  2. 容器间继承+共享数据

数据卷

容器内添加
  1. 直接命令添加

    1. 命令

      docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
      
    2. 命令(带权限)

      docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
      #只读
      
  2. DockerFile添加

    1. VOLUME ["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
      
    2. 说明:

      1. 处于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在DockerFile中实现。
      2. 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
    3. File构建

      # voulme test
      FROM centos:7
      VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
      CMD echo "finished,-------success1"
      CMD /bin/bash
      
      
    4. build后生成镜像

      docker build -f /myDocker/DockerFile -t lixi233/centos .
      

    5. run容器

      docker run -it lixi233/centos
      

    6. 通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址在哪?

    7. 主机对应默认地址

    8. 备注

数据卷容器

  1. 是什么

    命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

  2. docker run -it --name dc02 --volumes-from dc01 lixi233/centos
    
  3. 共享的容器会共享数据

  4. 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

DockerFile解析

是什么

DockerFile是用来构建Docker镜像的的构建文件,是由一系列命令和参数构成的脚本。

DockerFile构建过程解析

基础知识
  1. 每条保留字指令都必须为大写且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. “#” 表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行DockerFile的大致流程
  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有的指令都执行完成

DockerFile体系结构(保留字指令)

  1. FROM

    基础镜像,当前新镜像是基于哪个镜像的

  2. MAINTAINER

    镜像维护者的姓名和邮箱地址

  3. RUN

    容器构建时需要运行的命令

  4. EXPOSE

    当前容器对外暴露的端口

  5. WORKDIR

    指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点

  6. ENV

    用来在构建镜像过程中设置环境变量

    如:ENV MY_PATH /usr/mytest

    这个环境变量可以在后续的任何RUN指令中使用

    比如:WORKDIR $MY_PATH

  7. ADD

    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

  8. COPY

    类似ADD

    将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置

    COPY src dest
    COPY["src","dest"]
    
  9. VOLUME

    容器数据卷,用于保存数据和持久化工作

  10. CMD

    1. 指定一个容器启动时要运行的命令
    2. DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
  11. ENTRYPOINT

    1. 指定一个容器启动时要运行的命令
    2. ENTRYPOINT的目的和CMD一样,都是指定容器启动程序及参数
  12. ONBUILD

    当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后父镜像的ONBUILD被触发

DockerFile案例

自定义镜像
  1. Base镜像(scratch):DockerHub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

  2. 自定义编写镜像mycentos

    1. 初始的centos运行时默认进入路径是pwd
    2. 默认不支持vim
    3. 默认不支持ifconfig
    4. 自定义的mycentos
      1. 登录后的默认路径
      2. vim编辑器
      3. 查看网络配置ifconfig支持
  3. 编写

    FROM centos:7
    MAINTAINER lixi233<1452594689@qq.com>
    
    ENV mypath /tmp
    WORKDIR $mypath
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    
    EXPOSE 80
    CMD echo $mypath
    CMD echo "success--------------ok"
    CMD /bin/bash
    
  4. 构建

    docker build -f DockerFile2 -t mycentos:1.3 .
    

  5. 运行

    docker run -it mycentos:1.3
    

  6. 列出镜像的变更历史

    docker history 镜像ID
    

Docker常用安装

总体步骤

  1. 搜索镜像
  2. 拉取镜像
  3. 查看镜像
  4. 启动镜像
  5. 停止容器
  6. 移除容器

安装mysql

  1. docker hub上查找mysql镜像

    docker search mysql
    
  2. 从docker hub上拉取mysql镜像到本地

    docker pull mysql
    
  3. 运行镜像

    docker run -p 3306:3306 --name mysql_01 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=********* mysql
    
  4. 交互

    docker exec -it 容器ID /bin/bash
    
  5. 数据备份

    docker exec 容器ID sh -c 'exec mysqldump --all-databases -uroot -p"*****" ' > /宿主机路径/***.sql
    

安装redis

  1. docker search redis
    
  2. docker pull redis
    
  3. docker run -p 6379:6379 --name redis_01 -v /usr/local/redis/data:/data -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis redis-server /usr/local/etc/redis/redis.conf [--appendonly yes] [--requirepass *******]
    
  4. docker exec -it 容器ID redis-cli
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值