自己动手做一个最小的docker镜像

概述

其实有人学了很久还是把docker当虚拟机来使用,但是docker其实和虚拟机是完全不一样的,如何理解这一区别呢,我觉得自己动手做一个docker的hello world镜像是最好的

先体验一下hello-world镜像

在做之前我们可以先自己体验一下docker官方的helloworld镜像,首先在自己的机器上安装上docker,安装完成之后从仓库里pull镜像 sudo docker pull hello-world 接着就是把这个镜像运行起来 sudo docker run hello-world

➜  dockerfile sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

没错就是打印出了一些信息,这是怎么做到的呢?接下来我们了解一些基础知识

基础知识

首先docker和虚拟机不一样的地方就是docker使用了主机自己的内核,这就是为什么linux的容器只能跑在linux上,windows的镜像只能跑在windows上的原因了,还有docker镜像里面是没有包含内核的,只有一些软件需要的包和软件本身,也就是比如我的Ubuntu的docker镜像里面是没有Ubuntu内核的,包含了Ubuntu除了内核之外的所有东西。如果你不相信的话你可以在实体机Ubuntu下pull一个centos镜像运行起来看看是不是和你的实体机Ubuntu系统内核是一样的。

那么docker的hello-world的原理是什么

首先大家要知道的是hello-world镜像的Dockerfile

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

什么意思呢,第一行的意思就是白手起家从零构建一个镜像,我不需要一个基础镜像,第二行意思是把本机的hello这个二进制文件拷贝到镜像中去,最后一行就是执行了,然后hello这个二进制文件就可以在自己实体机系统内核跑起来了 所以我们制作一个最小的docker镜像第一步要准备这个hello文件

操作

首先准备这个二进制文件,为了简单化直接下载就好 https://github.com/docker-library/hello-world/blob/b7a78b7ccca62cc478919b101f3ab1334899df2b/hello 点击download下载 接着编写Dockerfile

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

之后build镜像 docker build -t mini .

➜  test docker build -t mini .
Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM scratch
 ---> 
Step 2/3 : COPY hello /
 ---> 8b398d623500
Step 3/3 : CMD ["/hello"]
 ---> Running in e3e476d5ea2e
Removing intermediate container e3e476d5ea2e
 ---> 43f766e9d546
Successfully built 43f766e9d546
Successfully tagged mini:latest

接着运行起来就好

➜  test sudo docker run mini
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

For more examples and ideas, visit:
 http://docs.docker.com/userguide/

欢迎关注Bboysoul的博客www.bboysoul.com Have Fun

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术

Docker三十分钟快速入门(上)

​   最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃。那么本文我们来聊一聊Docker,和大家一起...

1163
来自专栏A周立SpringCloud

Docker系列教程08-Dockerfile实战

本节通过几个例子,来工具Dockerfile的知识。 实战1:使用Dockerfile修改Nginx首页 创建一个Dockerfile,内容如下: FROM n...

3.1K6
来自专栏搜云库

Docker 容器操作

容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行...

2509
来自专栏搜云库

Docker Image 解决镜像无法删除的问题

Error response from daemon: conflict: unable to delete 4ac2d12f10cd (must be for...

47710
来自专栏吴伟祥

Xshell如何连接Docker容器 顶

3804
来自专栏康怀帅的专栏

在开发环境使用 Docker

本文是对官方文档的总结与备注。 官方文档:https://docs.docker.com/develop/ 根据官方文档的层次,分为 容器 (Container...

7214
来自专栏刘君君

docker部署基于nodejs的vue应用

5814
来自专栏IT笔记

Docker学习之运行SpringBoot微服务

执行docker build命令,docker就会根据Dockerfile里你定义好的命令进行构建新的镜像。

3981
来自专栏快乐八哥

Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)

1.根据运行的容器制作镜像 #查看所有的容器 docker ps #暂停当前容器 docker pause COTNAINER-ID #将容器运行当前状态提交 ...

2145
来自专栏Netkiller

Docker 虚拟机之 Redis

本文节选自《Netkiller Virtualization 手札》 1.9.2. Redis 1.9.2.1. 获取 Redis 镜像 docker pull...

3789

扫码关注云+社区

领取腾讯云代金券