• Docker基本知识


    Docker在Ubuntu上的安装

    配置Docker的apt源

    1. 对系统源进行更新

    sudo apt-get update

    2. 安装包,允许apt命令HTTPS访问Docker源

    sudo apt-get install 
        apt-transport-https 
        ca-certificates 
        curl 
        software-properties-common

    3. 添加Docker官方的GPG

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    4. 将Docker的源添加到 /etc/apt/sources.list

    sudo add-apt-repository 
      "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
      $(lsb_release -cs) 
      stable"

    安装Docker

    sudo apt-get update

    sudo apt-get install docker-ce

    镜像下载加速

    由于Docker Hub的服务器在国外,下载镜像会比较慢。DaoCloud为我们提供了免费的国内镜像服务

    1. 在daocloud.io上注册一个账号,如果已经有账号的可以直接登录

    2. 登录后点击右上角的加速器

    3. 根据自己的系统复制加速器命令,并在主机中执行 

    4. 重启docker daemon

    sudo systemctl restart docker.service

          Docker采用的是C/S架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器

    Docker客户端

          最常见的客户端是docker命令,通过docker命令可以很方便的在主机上构建和运行容器,docker支持很多操作,常见的docker命令及其用途如下 

          除了docker命令行工具,用户也可以通过REST API与服务器通信

    Docker服务器

          Docker daemon是服务器组件,以Linux后台服务的方式运行 

          Docker daemon运行在Docker主机上,负责创建、运行、监控容器,构建、存储镜像。默认配置下,Docker daemon只能响应来自本地主机的客户端请求,如果要允许远程客户请求,需要在配置文件中打开TCP的监听,具体操作如下

    1. 编辑配置文件/etc/systemd/system/multi-user-target.wants/docker.service,在环境变量ExecStart后面添加-H tcp://0.0.0.0,允许来自任意的客户端连接

    2. 重启Docker daemon

    sudo systemctl daemon-reload
    
    sudo systemctl docker.service 

    3. 客户端在命令行里面加上-H参数,即可与远程服务端通信,其中info子命令用来查看Docker服务器的信息 

          docker run命令创建容器的过程:首先是客户端执行docker run命令,然后Docker daemon会在本地搜索需要创建的镜像,如果本地没有所需镜像,则Docker daemon会自动在Docker Hub上进行下载,并保存到本地,最后Docker daemon启动容器

    只有容器层是可写的,容器层下面的所有镜像都是只读。在容器层,用户看到的是一个叠加之后的文件系统

    1. 添加文件

          在容器中创建文件时,新文件被添加到容器层中

    2. 读取文件

          在容器中读取某个文件时,Docker会从上往下依次在各镜像层中查找文件。一旦找到,立即将其复制到容器层,然后打开并读入内存

    3. 修改文件

          在容器中修改已存在的文件时,Docker会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改

    4. 删除文件

          在容器中删除文件时,Docker也是从上往下依次在镜像层中查找文件。找到后,会在容器层中记录下此删除操作

          只有当需要修改时才复制一份数据,这种特性被称为Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

    docker commit创建新镜像的三个步骤:运行容器、修改容器、将容器保存为新的镜像

    1. 运行容器:sudo docker run -it --name test

          这是以交互式的方式运行一个容器,并将容器命名为test,用户可以根据自己的容器用途和类型自行起名,当然除了以-it参数启动交互型容器外,也可以使用-d参数启动守护型容器

    2. 修改容器:进入容器后,先用apt-get update对容器源进行更新,然后再用apt-get install命令来按需对容器进行扩展

    3. 将容器保存为新的镜像:sudo docker commit test test:v1

          保存新镜像的格式:sudo docker commit <容器名称/容器ID> 新镜像名称。如果要对所创建的镜像进行持续性修改,可以像上面案例一样,用test:v1的方式来给镜像名称,它表示的是镜像test的版本为v1,这样在需要对容器进行持续性修改时很有帮助

    即使docker commit命令创建镜像在某种意义上很方便,但Docker并不建议用户使用该命令进行镜像的创建,原因有两点:

          (1)这是一种手工创建镜像的方式,很容易出错,效率低且可重复性弱

          (2)使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患

    虽然不建议采用docker commit的方式创建镜像,但还是要学习它,因为就算是Dockerfile的方式创建镜像,其底层也是docker commit一层一层构建新镜像的,学习docker commit能够帮助我们深入地理解构建过程和镜像的分层结构

    用Dockerfile创建test/ubuntu,其内容如下

    下面是Dockerfile的执行步骤和创建镜像过程

    root@ubuntu:~# pwd          

    /root  

    root@ubuntu:~# ls            

    Dockerfile   

    root@ubuntu:~# docker build -t test/ubuntu .          

    Sending build context to Docker daemon 32.26 kB             

    Step 1 : FROM ubuntu             

     ---> f753707788c5   

    Step 2 : RUN apt-get update && apt-get install -y vim             

     ---> Running in 9f4d4166f7e3               

     

    ......   

     

    Setting up vim (2:7.4.1689-3ubuntu1.1) ...   

     ---> 35ca89798937              

    Removing intermediate container 9f4d4166f7e3            

    Successfully built 35ca89798937             

    root@ubuntu:~#   

          用docker build命令来构建镜像,-t参数将新镜像命名为test/ubuntu,命令末尾的 . 指明build context为当前目录。Docker会从build context中查找Dockerfile文件,也可以用-f参数指定Dockerfile的位置

          首先Docker将build context中的所有文件发送给Docker daemon,build context为镜像提供所需的文件或目录

          这个文件的执行过程:首先执行FROM,将ubuntu作为基础镜像,该步骤会给出基础镜像的ID。然后执行RUN,安装所需扩展的服务,在该过程中会生成一个临时容器并返回临时容器的ID,并在临时容器中通过apt-get来安装所需服务,安装成功后,将容器保存为镜像,并返回该镜像的ID,这里底层使用的类似docker commit命令。最后删除前面生成的临时容器

          镜像构建成功后,可以通过docker history命令验证。docker history会显示镜像的构建历史,也就是Dockerfile的执行过程。

  • 相关阅读:
    react 组件库
    Git命令记录
    H5+App开发框架汇总
    常见移动设备的 CSS3 Media Query 整理(iPhone/iPad/Galaxy/HTC One etc.)
    天猫11.11:手机淘宝 521 性能优化项目揭秘
    H5项目常见问题汇总及解决方案
    【angular5项目积累总结】侧栏菜单 navmenu
    【angular5项目积累总结】avatar组件
    【angular5项目积累总结】breadcrumb面包屑组件
    开源建站系统
  • 原文地址:https://www.cnblogs.com/chenjin2018/p/9819622.html
Copyright © 2020-2023  润新知