美文网首页Docker从入门到精通
第四章Docker镜像和仓库

第四章Docker镜像和仓库

作者: a7cfd566252e | 来源:发表于2019-03-06 00:48 被阅读13次

    一、Docker镜像概述

    镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。每一个镜像都会有一个文本文件Dockerfile,定义了如何构建Docker镜像。

    1、基础镜像
    提供了一个基本的操作系统环境,用户可以根据需要安装和配置软件。 基础镜像通常是各种Linux发行版的Docker镜像比如ubuntu、Debian、centos等;
    基础镜像只是在用户空间与发行版一致,kernel版本与发行版是不同的。比如说虚机系统是centos,运行一个容器是ubuntu系统的,那么ubuntu使用的其实就是本虚机的kernel,容器只能使用本地虚机的kernel且不能修改。
    2、镜像的分层结构
        DockerHub中绝大多数的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。base镜像是from scratch开始,新镜像是直接在base镜像上构建from ubuntu, 新镜像是从base镜像一层一层叠加生成的,每安装一个软件就等于在现有
    的镜像上增加一层。 Docker镜像采用分层结构的好处就是共享资源。
    3、可写的容器层
        当容器启动时,一个新的可写层被加载到镜像的顶部,这一层就叫容器层,容器层之下都叫镜像层。只有容器层是可写的,容器层下面的所有镜像层都是只读的。对容器的任何改动都只会发生在容器层中。
    这里,所有的镜像层联合一起组成一个统一的文件系统,用户在容器层看到的就是一个叠加之后的文件系统。
    镜像层内部是有上下之分的:
    - 添加文件:在容器中创建文件时,新文件被添加到容器层中。
    - 读取文件:当在容器中读取某个文件时,Docker会从上往下依次在各镜像层中查找此文件,一旦找到打开并读入内存。
    - 修改文件:在容器中修改已存在的文件时,Docker会从上往下依次在各个镜像层中查找此文件,一旦找到立即将其复制到容器层中,然后才修改。(copy-on-write特性)
    - 删除文件:在容器中删除文件时,Docker会从上往下依次在镜像层中找,找到后,会在容器层记录下此删除操作。
    copy-on-write特性说明容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。所以镜像可以被多个容器共享。
    
    图片.png

    二、Docker的镜像的常用命令

    1、查看镜像: docker images本地镜像存储在docker宿主机的/var/lib/docker/目录下,其中containers下面存放的是所有的容器。如下图所示:

    图片.png
    镜像是存储在仓库中的,而仓库是存在Registry(注册中心)中的。默认的Registry是Docker Hub,我们可以去注册,后面也可以搭建自己的私有Registry。
    2、拉取镜像:docker pull +镜像名:标签
    3、查找镜像: docker search +镜像名也可以直接去docker hub中查找相应的镜像
    4、构建镜像:有两种方式
    a、使用docker commit命令--不推荐使用此方式构建镜像
     需要在构建之前自行去docker hub去注册号相应的账号。然后通过命令docker login登录如下图1,因为docker hub是国外的网站所以会比较慢,此时我们可以是设置自己国内的加速器
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://noq3xink.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    首先基于一个基础镜像启动生成一个容器,然后在容器中安装apache2的软件包,最后将此环境进行提交
    docker commit +容器id 目标镜像仓库/镜像名
    b、使用docker build命令和Dockerfile文件
       mkdir myfirst_web  创建一个文件夹
       cd myfirst_web/
       touch Dockerfile
       vi Dockerfile写入如下内容:
    # Version:0.01
    FROM ubuntu
    MAINTAINER wtt "1269878284@qq.com"
    RUN apt-get update && apt-get install -y nginx
    Run echo 'Hi ,I am in your container '\
    >/usr/share/nginx/html/index.html
    EXPOSE 80
    然后在文件接内执行docker build 命令:docker build -t="dockerwu123/myfirst_webimage:0.0.1" .(含义:其中点的意思是告诉docker到本地目录下去找dockerfile文件,也可以指定一个git仓库的源地址来指定Dockerfile的位置)。
    基于当前创建的镜像来启动生成一个容器
    docker run -i -t --name myfirstcontainer -p 8080:80 -d dockerwu123/myfirst_webimage:0.0.1 /bin/bash
    
    
    图1.png
    图2.png
    5、查看新镜像
    docker images dockerwu123/myfirst_web
    6、-p选项映射到特定端口
    docker run -d -p 8080:80会将容器内的80端口绑定到本地宿主机的8080端口。

    三、Docker私有Registry的搭建和使用

    虽然Docker镜像有默认的官方提供的公共的Registry,但是如果想要搭建自己的私有Registry,用于存放我们不想被公开的信息或数据的镜像。
    有两种方式:
    其一、利用Docker Hub上的私有Registry
    其二、在防火墙后面运行我们自己的Registry
    这里主要介绍第二种的方式的搭建和使用方法
    1、运行基于容器的Registry:docker run -p 5000:5000 registry:2
    2、基于Dockerfile构建自己的镜像文件
    3、使用私有的Registry为镜像打标签
    docker tag 10c96ded251f localhost.localdomain:5000/dockerwu123/myfirst_webimage:0.0.1
    可以使用命令hostname查看本机的主机名
    4、将镜像推送到自己新搭建的Registry中,保证新的Registry容器是处于运行开启的状态
    docker push localhost.localdomain:5000/dockerwu123/myfirst_webimage:0.0.1
    推送成功如下图

    图片.png

    相关文章

      网友评论

        本文标题:第四章Docker镜像和仓库

        本文链接:https://www.haomeiwen.com/subject/creguqtx.html