为了账号安全,请及时绑定邮箱和手机立即绑定

Docker学习之:镜像概述

标签:
Go

我们在开始这篇文章之前呢,先给大家介绍关于Image的几个相关概念
什么是Image呢?

  • 文件和meta data的集合(root filesystem)
  • 分层的,并且每一层都可以添加、改变、删除文件,成为一个新的image
  • 不同的image可以共享相同的layer
  • Image 本身是read-only的
    其实Linux是分为内核空间与用户空间的,Linux kernel(bootfs)属于内核空间,用户空间就是我们做的各种Linux发行版,比如我们常用的Centos、Ubuntu,那么这些也被成为Base Image,他们可以共享主机里面的Linux kerne空间,我们也可以在Base Image基础之上安装更多的Image,比如mysql nginx,关于这个层次关系,这里就不过多的解释了,有兴趣的可以去搜索一把!
    我们首先进入我们已经配置好的 centos,然后执行下面这条命令,就会出现当前你安装的docker下面有哪些Image,是不是很方便呢?
    sudo docker image ls

    那么如果你之前没有安装任何Image ,你输入这个命令,是没有任何镜像的,那么
    我们应该怎么获取Image呢?这里说两种方法

  • 通过写dockefile文件的方式
  • 通过Pull from Registry 的方式
    我们这里先给大家用pull的方式拉取镜像,关于dockefile的方式,我们后面会有专门的一章讲这个文件应该怎么写,大家不要着急。。。。。

    执行下面的命令我们就可以拉一个ubuntu:14.04的镜像了,是不是很简单呢。。。。

    sudo docker pull ubuntu:14.04

    再次使用

    sudo docker image ls

    输出结果

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              14.04               8cef1fa16c77        7 days ago          223MB

    不知道大家有没有注意到,我们拉下来的镜像是非常小的,相比我们直接下载安装的版本,那些都有几个G,那么原因是什么呢?这个就是我们之前说的,我们是在Linux kernel基础之上添加的ubuntu Image,所以它省去了很多不需要的东西。
    docker pull 默认是从hub.docker.com上拉取的镜像,大家可以自己去这个网站看一把,这个是官方的,当然如果你也可以直接取第三方的平台获取,镜像。

    我们该如何自己创建一个Image呢?

    在讲这个话题之前呢?我们先解决一个小问题,不知道大家有没有发现我们每次,执行docker命令的时候,都需要加一个sudo,这个有点恶心,我们解决它,执行以下的命令

    sudo groupadd docker
    sudo gpasswd -a vagrant docker
    sudo server docker restart
    最后退出你的centos,执行vagrant ssh重启就可以了

    我们在创建自己的image之前呢?先用Go语言写一段简单的程序,并把它编译成可执行的二进制文件。
    首先你可以在个人目录下(~)创建一个名为hello-world的文件夹

    mkdir hello-world
    cd hello-world/
    vim hello.go

    这里为了防止有的同学没有接触过Go,我就把最简单的Go程序贴出来了

    package main
    import "fmt"
    func main() {
    fmt.Printf("hello docker\n")
    }

    接下来,如果你的Go环境还没有安装,你可以去网上找一把教程,这个不难。

    go build hello.go 

    这个时候我们就编译好了,接下里我们书写一个dockerfile文件,

    FROM scratch
    ADD hello /
    CMD ["/hello"]

    因为这里我们是新建的BaseImage,就不需要在其他的BaseImage之上了,直接写scratch就可以了,它的意思就是不已任何镜像为基础,新建完成以后,执行

    docker build -t apple/hello-world .

    这里的-t是打标签,就是apple下面的hello-world

    [vagrant@localhost hello-world]$ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    apple/hello-world   latest              69a935434293        17 minutes ago      2.02MB
    ubuntu              14.04               8cef1fa16c77        8 days ago          223MB

    这样我们的镜像就做好了,最后我们来变成容器,执行一把!

    docker run apple/hello-world

    输出了hello docker
    此时我们的镜像学习,到此就结束了,怎么样你学会了嘛?
    最后感觉有些小伙伴对于目录结构有点搞不清楚,贴出一张我的目录结构图
    file.png
    祝大家学习愉快!!!!!!

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消