zoukankan      html  css  js  c++  java
  • 使用Docker镜像

    什么是Docker镜像?

    Docer的镜像是一个只读的文件系统,除了提供容器(进程)运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会改变。

    获取镜像

    Docker Hub上有大量的高质量的镜像可以用,从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为

       docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    

    镜像名称的格式为:

    • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker
      Hub。

    • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名> 。对于 Docker
      Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。

    运行

    有了镜像之后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的 ubuntu:16.04 为
    例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

     docker run -it --rm 
        ubuntu:16.04 
        bash
    
    

    这里我们是手动的根据镜像启动容器,我们接下来看下docker run的各种参数的详解。
    Docker run后的参数很多,Docker会在隔离的容器中运行进程,当运行docker run 命令时,Docker回启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新的定义,就是说,docker run可以控制一个容器运行时的行为,比如监听的端口号,它可以覆盖docker build在构建镜像时的一些默认配置。

    正常的命令行为

    docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

    这里我们先来说下OPTIONS

    Detached(-d)
    容器运行在后台模式?后台模式和前台模式的区别待详细。
    
    Name(--name)
    指定运行的容器名称
    
    Network settings(--net 或 --mac-address)
    默认情况下所有容器都是开启了网络接口,可以使用--net none来关闭网络接口,也可以使用 --mac-address 12:34这种方式来设置容器的MAC地址。
    
    Clean up(--rm)
    设置该命令时,每个容器在退出时,它的文件系统并不会保存下来。并且--rm和-d是不可同时使用的。
    
    暴露端口(-p)
    使用-p来使容器和主机的对应端口进行绑定,可以手动指定,也可以走默认的。
    
    环境变量(-e)
    使用-e来给容器中进程设定环境变量,甚至可以覆盖已经存在的环境变量,比如 -e "deep=purple"
    
    

    COMMAND也就是CMD是可以用来覆盖默认的执行命令的。

    run指令参考文章 http://dockone.io/article/152,文中还有许多其他许多参数的解释。

    列出镜像

    想要列出已经下载了的镜像,可以使用docker image ls命令。

    在镜像下载和上传的过程中镜像是保持着压缩状态的,所以这里列表出来的镜像的大小会比较大。

    docker system df 命令用来查看镜像、容器、数据卷所占用的控件、

    虚悬镜像

    由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被成为虚悬镜像。

    docker image ls -f dangling=true 用来查看虚悬镜像

    删除镜像

    首先,如果有在使用该镜像的容器正在运行,则需要首先停止该容器并删除该容器

    //停止运行中的容器
    docker stop [容器id]
    
    //删除容器
    docker rm [容器id]
    
    //删除镜像
    docker rmi [镜像id]
    

    中间层镜像

    Docker会利用中间层镜像,所以在使用了一段时间之后,可能会看到一些依赖的中间层镜像。

    docker image -a 列出包括着中间层镜像在内的所有镜像

    列出部分镜像

    //根据仓库名列出镜像
    docker image ls ubuntu 
    //列出特定的某个镜像
    docker image ls ubuntu:16.04
    //列出所有镜像的id
    docker image ls -q
    

    查看镜像详细信息

    docker inspect [镜像ID]
    

    利用commit理解镜像构成

    docker commit命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,定制镜像最好还是使用Dockerfile来完成。

    镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。之前我们经常使用docker hub上的镜像,但是当这些镜像无法直接满足需求时,我们就需要定制这些镜像。

    我们之前有学,镜像是多层存储的,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础

    docker run --name blackwebserver -d -p 80:80 nginx
    

    使用NGINX镜像启动一个容器,命名为blackwebserver,并且映射了80端口,

    进入容器的命令:

    docker exec -it blackwebserver 
    

    将修改了的容器保存为新的镜像

    docker commit blackwebserver nginx/blackwebserver
    

    docker commit命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

    这里的commit就有点类似于git commit了,将修改好的程序commit生成我们的静态文件(项目)。然后可以将镜像push到镜像仓库中(docker push 指令)。

    这里简单的介绍了下镜像的各种操作指令,当然镜像的实现原理还是需要去深究一下子的。下文再叙!

  • 相关阅读:
    网络协议栈(6)RFC793TCP连接时部分异常流程及实现
    网络协议栈(5)sendto/send返回成功意味着什么
    LeetCode——Detect Capital
    LeetCode——Find All Numbers Disappeared in an Array
    LeetCode——Single Number
    LeetCode——Max Consecutive Ones
    LeetCode——Nim Game
    LeetCode——Reverse String
    LeetCode——Next Greater Element I
    LeetCode——Fizz Buzz
  • 原文地址:https://www.cnblogs.com/blackgan/p/9215787.html
Copyright © 2011-2022 走看看