专栏首页bboysoul自己动手做一个最小的docker镜像

自己动手做一个最小的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 条评论
登录 后参与评论

相关文章

  • docker机器资源达到上限导致docker启动不了

    事情是下面这样的,我在树梅派上搭建docker swarm的集群,之后作死的去创建了100个nginx的容器,接着一方面是因为树梅派的io问题,另外一方面是因为...

    bboysoul
  • 使用本地的docker客户端连接远程docker的守护进程

    在这之前我们要知道docker是一个c/s架构的程序,也就是说我们输入的docker命令实际上是客户端用来发送指令给docker的守护进程的,所有的操作都是do...

    bboysoul
  • 树梅派安装docker-compose

    因为树梅派是arm架构,docker-compose是没有提供官方的二进制文件的,所以我们要使用python的pip工具来安装docker-compose

    bboysoul
  • Docker 入门及安装

      docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可适用于自动化测试、打包,持续集成和发布应用程序等场景。   值得注意的是,...

    haoming1100
  • 4. 镜像的原理

      镜像是一种轻量级, 可执行的独立软件包, 用来打包软件运行环境和基于运行环境开发的软件, 它包含运行某个软件所需的所有内容, 包括代码, 运行时, 库, 环...

    用户7798898
  • Node.js服务端开发教程 (二):新的软件交付方式

    在上文中,我们从零开始安装了必需的一些NestJS开发环境,并使用命令行工具生成了第一个NestJS服务端程序,而且也初步了解了怎么把这个程序运行起来。

    一斤代码
  • Docker挂了,数据如何找回

    很多人在初用docker的时候,很多时候都忘记或不知道docker中需要保留的数据需要挂载到宿主机文件夹到容器内部对应目录(当然除了挂载宿主机目录,还有其他解决...

    李俊鹏
  • 前端工程师学 Docker ? 看这篇就够了!

    Docker可以看成一个高性能的虚拟机,并且不会浪费资源,主要用于Linux环境的虚拟化,类似VBox这种虚拟机,不同的是Docker专门为了服务器虚拟化,并支...

    用户6900878
  • Docker 生产环境实践3

    docker save redis > /tmp/redis_docker_save.tar docker load < /tmp/redis_docker_...

    用户5760343
  • 如何理解Docker镜像分层?且听百度高级研发工程师细细道来

    所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等。

    本人秃顶程序员

扫码关注云+社区

领取腾讯云代金券