Docker学习之:镜像概述

我们在开始这篇文章之前呢,先给大家介绍关于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
此时我们的镜像学习,到此就结束了,怎么样你学会了嘛?
最后感觉有些小伙伴对于目录结构有点搞不清楚,贴出一张我的目录结构图


Docker学习之:镜像概述_第1张图片
file.png

祝大家学习愉快!!!!!!

你可能感兴趣的:(Docker学习之:镜像概述)