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

    一、Docker包括三个基本概念

    1、镜像(Image):Docker镜像是一个只读模板,例如一个镜像可以包含完整的Linux系统环境,里面仅仅安装了Apache或用户其他应用程序;镜像可以用来创建Docker容器,每一次使用命令run一个镜像就是创建一个容器;Docker提供了一个很简单的机制来创建或更新现有镜像,用户甚至可以直接从别处下载一个镜像使用

    2、容器(Container):Docker利用容器来运行应用;容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除,每个容器都是相互隔离的,保证安全的平台;可以把容器看做是一个简易版的linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序;注意,镜像是只读的,容器在启动的时候创建一层可写层作为最上层

    3、仓库(Repository):仓库是集中存放镜像文件的场所,有时候会把仓库注册服务器(Registry)混为一谈,严格说仓库注册服务器存放在多个仓库,每个仓库又包含多个镜像,每个镜像有不同的标签(tag);仓库分为公开仓库和私有仓库,最大的公开仓库是Docker Hub,用户可以在本地网络创建私有仓库;用户可以通过push将镜像上传到公开或私有仓库,或者通过pull从公开或私有仓库下载镜像

    二、镜像

      Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,docker会从镜像仓库下载(默认从Docker Hub公共仓库下载)

    1、获取镜像:如,在Docker Hub公共仓库下载Ubuntu 12.04操作系统

    docker pull ubuntu:12.04

    其实上面命令等价于

    docker pull registry.hub.docker.com/ubuntu:12.04

    即从docker hub注册服务器上的ubuntu仓库下载标记为12.04的镜像;如果在docker hub上下载比较慢,可以从其他库下载,如下

    docker pull dl.dockerpool.com:5000/ubuntu:12.04

    创建一个交互式容器,运行bash应用

    docker run -t -i ubuntu:12.04 /bin/bash

    2、列出镜像

    docker images

    列标题可以看出镜像REPOSITORY仓库,TAG镜像标记,IMAGE ID镜像ID(唯一),CREATED创建时间,SIZE大小

    其中UbuntuIMAGE ID一样,说明这两个镜像实际上是同一个镜像,TAG信息来标记来自同一个仓库的镜像版本

    创建容器时,如果不指定镜像版本,则默认使用latest标记的版本(本地没有,就要到仓库下载)

    3、创建镜像

    创建镜像可以从仓库下载更新,也可以利用本地文件系统创建

    1)在现有镜像基础上创建新镜像

    启动一个容器,然后在里面添加json和gem两个应用

     docker run -t -i training/sinatra /bin/bash
     gem install json

    安装完成后使用exit命令退出,然后用docker commit命令来提交更新后的副本

     docker commit -m "Add json gem" -a "Docker Newbee" 836bcab25b1d ouruser/sinatra:v2

    如果去掉了:v2,则提交后的TAG为latest,使用dokcer images命令可以查看本地现有镜像

    -m 指定提交的说明信息,-a 指定更新的用户信息,再后面是用来创建镜像的容器ID,最后是目标镜像的仓库名和tag信息

    2)利用Dockerfile来创建镜像

    新建一个目录和Dockerfile

    mkdir sinatra
    cd sinatra/
    touch Dockerfile
    vi Dockerfile

    Dockerfile文件中的内容如下

    # This is a comment
    FROM ubuntu:14.04
    MAINTAINER Docker Newbee <newbee@docker.com>
    RUN apt-get -qq update
    RUN apt-get -qqy install ruby ruby-dev
    RUN gem install sinatra

    Dockerfile基本语法:1)、使用#来注释,2)、FROM指令告诉Docker使用哪个镜像作为基础,3)、接下来是维护者信息,4)、RUN开头的指令会在创建中执行,比如安装一个软件包

    (Dockerfile中创建一个镜像每执行一条指令就创建一个新的容器,最后把中间步骤产生的容器删除掉,规定不能超过127层;可以利用ADD命令复制本地文件到镜像,用EXPOSE命令来向外开放端口,用CMD命令来描述容器启动后运行的程序等,命令如下:

    # put my local web site in myApp folder to /var/www
    ADD myApp /var/www
    # expose httpd port
    EXPOSE 80
    # the command to run
    CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

    编写完以后可以使用docker build来生成镜像

     docker build -t="ouruser/sinatra:v3" .

    -t来添加tag,及用户信息,"."是指Dockerfile所在目录,即当前目录

    我在第一次执行build时候出现了错误,是RUN后面的命令导致的,所有就删除了,不执行RUN命令,使用查看镜像命令得结果如下

    再给镜像重新打一个标签

     docker tag bb31 ouruser/sinatra:devel

    3)从本地文件系统导入

    要从本地文件系统导入一个镜像,可以使用openvz(容器虚拟化的先锋技术)的模板来创建,openvz模板下载地址为templates,在这里面比如下载了一个镜像文件ubuntu-14.04-x86_64-minimal.tar.gz,之后使用以下命令导入

    cat ubuntu-14.04-x86_64-minimal.tar.gz  |docker import - ubuntu:14.04

    4)上传镜像,上传到私服或Docker Hub上(Docker Hub需要注册)

    docker push ouruser/sinatra上传该库下所有镜像

    4、镜像存出、载入和移除

    1)、cd ~,切换到home文件夹下,执行下面命令

    docker save -o ubuntu_14.04.tar ubuntu:14.04

    在home文件夹下查看文件

    2)、载入存出的镜像文件

     docker load --input ubuntu_14.04.tar 

    docker load < ubuntu_14.04.tar 

    这种方式会导入镜像及其元数据信息(如标签等)

    3)移除镜像,移除镜像前要先删掉依赖这个镜像的所有容器

    删除所有容器命令

    docker rm -f $(docker ps -a -q)

    -f 强制,-a 所有,-q 只列出容器ID

    移除ubuntu:14.04镜像,然后验证是否移除,然后再载入

    docker rmi ubuntu:14.04

     5、查看镜像详细信息

    docker inspect [ImageID]

  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/7146861.html
Copyright © 2011-2022 走看看