zoukankan      html  css  js  c++  java
  • Docker 基本概念(三)-生命周期详解(镜像、容器、仓库)

    Docker三大组件:镜像、容器、仓库。

     一、镜像

    1 从仓库获取镜像

    #一、从仓库获取镜像,帮助命令:docker pull -help
    命令:docker pull [选项] [docker Registry 地址[:端口号/]仓库名[:标签]]
    
    #没有镜像仓库地址默认是从docker hub中获取镜像
    Ex: $docker pull ubuntu:16.04

    docker hub中获取镜像速度很慢,一般推荐使用国内的镜像加速器:

    针对不同的系统,配置的方式不一样,比如针对系统centos7、Debian 8+、Ubuntu 16.04+,配置如下:

    #在$vi /etc/docker/daemon.json下,新增或编辑如下内容:
    {
    "registry-mirrors": [
    "https://registry.docker-cn.com"
    ]
    }
    #重启服务
    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker

    2 管理本地主机上的镜像

    #运行镜像
    
    #容器运行命令:docker run
    #-it:这是2个参数,一个是-i:交互式操作;一个是-t终端
    #--rm:容器退出后随之将其删除;ubuntu:16.04指镜像为基础来启动容器;bash指交互式shell
    #运行镜像执行命令如下$docker run -it --rm ubuntu:16.04 bash
    root@e7009c6ce357:/# cat /etc/os-release
    NAME="Ubuntu"
    VERSION="16.04.4 LTS, Trusty Tahr"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 16.04.4 LTS"
    VERSION_ID="16.04"
    HOME_URL="http://www.ubuntu.com/"
    SUPPORT_URL="http://help.ubuntu.com/"
    BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

    2.1 列出镜像

    #列出镜像,显示顶层镜像
    docker image ls
    
    #列出中间层镜像
    docker image ls -a
    
    #列出部分镜像,如果需要指定的仓库名和标签,比如:unbuntu:16.04#-f指过滤参数
    docker image ls -f ubuntu:16.04
    docker image ls -f ubuntu

    2.2 删除镜像

    #删除镜像
    格式:docker image rm [选项]<镜像1>[<镜像2>....]
    
    #删除镜像,用ID、镜像名、摘要删除镜像,有时候需要docker image ls配合
    $docker image rm $(docker image ls -q redis)

    2.3 利用commit理解镜像构成

    定制镜像用dockerfile

    docker commit语法格式:docker commit [选项] <容器ID 或容器名> [<仓库名>[:<标签>]]

    不建议用

    2.4 docker file 定制镜像

    原理:镜像的定制实际上就是以镜像为基础,定制每一层所添加的配置、文件。

    dockerfile:文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层。每一条指令描述该层如何构建。

    dockerfile脚本:把每一层的修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。

    PS:dockerfile一般置于一个空目录下,或者项根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。用.dockerignore语法可以剔除不需要作为上下文传递给docker引擎的。

    比如一个简单的dockerfile例子:
    $mkdir mynginx
    $cd mynginx
    $touch dockerfile

    dockerfile具体脚本如下:

    #FROM指定基础镜像,必备的第一条命令
    FROM nginx
    #RUN指令用来执行命令行命令的
    RUN echo ‘<h1>Hello,Docker!</h1>’ > /usr/share/nginx/index.html

    2.5 构建镜像

    构建镜像原理:docker在运行时分为Docker引擎(服务端守护进程)和客户端工具,docker引擎提供了一组REST API,被称为Docker Remote API,客户端是通过这组API与Docker引擎进行交互,从而完成各种功能,一切都是使用的远程调用形式在服务端(Docker引擎)完成。

    #格式:docker build [选项] <上下文路径/URL/-> .
    #-t nginx:v3指的是最终镜像的名称,.表示当前目录
    dockerfile build -t nginx:v3 .

    2.6 镜像构建上下文(context)

    原理:构建时,用户指定构建镜像上下文的路径,docker build执行时,会将路径下的所有内容打包,上传给docker引擎。

    比如COPY、ADD命令等

    COPY ./package.json /app/

    此时的package.json是复制的上下文(context)目录下的package.json,不是docker build命令所在的目录下的package.json,也不是复制dockerfile所在目录下的package.json.

    3 镜像实现的基本原理

    #镜像实现的基本原理

    原理:每个镜像都由很多层次构成,docker使用UnionFS将这些不同的层结合到一个镜像中去。

    二、容器

    容器:独立运行的一个或一组应用,以及它们的运行态环境。

    虚拟机:模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

    docker run创建容器时,docker后台运行的标准操作步骤:

    1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    2. 利用镜像创建并启动一个容器
    3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写
    4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    5. 从地址池配置一个ip地址给容器
    6. 执行用户指定的应用程序
    7. 执行完毕后容器被终止

    2.1 启动容器

    启动容器有2种方式:

    1. 基于镜像新建一个容器并启动
    2. 将在终止状态(stopped)的容器重新启动

    2.2 新建并启动容器

    Ex:输入Hello World之后终止容器
    $docker run ubuntu:14.04 /bin/echo ‘Hello World’
    Hello world
    Ex:启动一个bash终端,允许用户进行交互
    #-t选项指docker分配一个伪终端并绑定到容器的标准输入上
    #-i则让容器的标准输入保持打开
    $docker run -t -i ubuntu:14.04 /bin/bash
    root@af8bae53bdd3:/#pwd
    /
    root@af8bae53bdd3:/#ls
    Bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

    2.3 启动已终止的容器

    #已终止的容器启动运行
    docker container start
    #查看容器信息
    docker container ls
    #获取容器的输出信息
    docker container logs [container ID or NAMES]

    2.4 终止容器

    #终止容器
    docker container stop
    #查看终止状态的容器
    docker container ls -a

    2.5 进入容器

    进入容器命令:docker attach命令或docker exec命令
    #当-i -t 参数一起使用时,可以看到熟悉的linux命令提示符

    2.6 导出和导入容器

    #导出容器
    $docker export [container id]
    Ex:docker export 7691a814370e >ubuntu.tar
    #导入容器
    $cat ubuntu.tar docker import - test/ubuntu:v1.0

    2.7 删除容器

    #docker container rm来删除一个处于终止状态的容器
    $docker container rm trusting_newton
    trusting_newton

    2.8 清理所有处于终止状态的容器

    $docker container prune

    三、仓库 

    3.1 拉取镜像

    #查找官方仓库中的镜像
    $docker search centos
    #拉取镜像到本地
    $docker pull centos

    3.2推送镜像

    #推送镜像
    $docker tag ubuntu:17.10 username/ubuntu:17.10 #username是当前docker账号用户名
    $docker image ls
    $docker push username/ubuntu:17.10
    $docker search username

    3.3 自动创建

    目的:用于经常升级镜像内程序。比如用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。

    原理:允许用户通过docker hub 指定跟踪一个目标网站上的项目,一旦项目发生新的提交或者创建新的标签(tag),docker hub会自动构建镜像并推送到docker hub中。

    配置自动创建,步骤如下:
      1.创建并登陆Docker hub,以及目标网站

      2.在目标网站中连接账户到docker hub

      3.在docker hub中配置一个自动创建

      4.选择一个目标网站中的项目和分支

      5.指定dockerfile的位置,并提交创建

     

  • 相关阅读:
    Systemd 入门教程:实战篇
    Docker 1.12.0将要发布的新功能
    ubuntu 11.10 安装apache2 tomcat6
    DNS 原理入门
    c# 日志记录 行号
    WIN7系统插入蓝牙适配器经常断开问题
    iphone手机与PC蓝牙出现感叹号且无法修复解决方案
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出
    虚拟机如何设置U盘启动项
    Resharper 8.2 注册码
  • 原文地址:https://www.cnblogs.com/wendyw/p/9830161.html
Copyright © 2011-2022 走看看