zoukankan      html  css  js  c++  java
  • 第一次使用Docker的完整过程

    友情提醒:这篇文章,完全是以小白的身份来写Docker的使用,用来和Docker的初用者、以及还未使用过Docker的朋友探讨Docker的技术和知识,不感兴趣的Docker熟手、高手可以飘过。

    第一次使用Docker的完整过程

     

    这两年,一直听大家讲Docker,可我不仅没有碰过Docker,甚至头脑中连Docker的基本概念都没有,终于,在这个凉爽的周末,无所事事的我决定尝试一下Docker。

    1、Docker的起源

    Docker的英文含义是“码头工人”,但如果看Docker的标志,会发现这个“码头工人”是一条体型庞大的鲸鱼,这条鲸鱼搬运着巨大的集装箱,每个集装箱中又运行着各种各样的软件,可以是Nginx、Hadoop等:

    第一次使用Docker的完整过程

     

    Docker的起源和一家名为dotCloud的公司相关。

    从名字来看,dotCloud的业务应该和互联网、云相关,事实也确实如此。dotCloud于2010年在美国旧金山,由几个程序员成立,公司的发展方向是PaaS,开发LXC相关的容器技术。

    dotCloud公司虽然不大,但技术强悍,尤其是公司的Docker项目做得非常好。

    不过和公司的技术能力相比,公司的运营能力却非常一般,公司成立以来,一直步履艰难。2013年,公司实在撑不下去,快倒闭了,Docker的开发者,也是公司的创始人之一的Solomon Hykes,为了不让自己的辛勤成果烟消云散,决定将Docker开源。

    第一次使用Docker的完整过程

     

    Solomon Hykes的无奈之举,不仅挽救了Docker,也挽救了dotCloud公司。

    Docker取得了极大的成功,成为了十年来最火爆的开源技术之一,得到了广大程序员和大型IT公司的热烈支持,dotCloud公司甚至直接将自己的名字改为Docker公司。

    2、Docker的作用

    Docker是一个应用容器引擎,使用Docker,我们可以把我们要运行的应用、以及应用依赖的软件包,打包到一个容器中运行。

    Docker的容器,对于应用来说,就像一个虚拟的操作系统,应用完全意识不到Docker容器的存在。

    Docker的底层技术是LXC,LXC是Linux Container的缩写。

    大家看Docker和LXC技术,肯定觉得有点眼熟,是不是有点像大家熟悉的Virtual Box、VMWare和OpenStack?

    对于应用程序本身来说,使用Docker、Virtual Box、VMWare还是OpenStack,甚至使用实际的操作系统确实没感觉到什么差异。

    Docker、Virtual Box、VMWare、OpenStack对于应用程序来说,都可以看作是运行的平台,这几个平台之间的差异,主要是轻重量级不同。

    OpenStack可以看作是一个重量级的虚拟化技术,它是位于一堆硬件资源和一堆操作系统之间的虚拟化系统,为一堆操作系统分配资源。

    第一次使用Docker的完整过程

     

    Virtual Box、VMWare是我们大家在PC机上使用过的虚拟机软件,可以认为是中等量级的虚拟化技术,它位于底层操作系统和一堆操作系统之间的虚拟化系统,我们常常用它在Windows上再安装一个完整的Windows或Linux操作系统。

    第一次使用Docker的完整过程

     

    Docker则是轻量级的虚拟化技术,我们建立的Docker容器时,并不需要每次真正安装完整的操作系统,一般可以在几十秒甚至几秒内完成(除第一次执行Docker命令之外),而我们如果使用Virtual Box则会完整安装一套操作系统,需要数十分钟甚至数小时。

    3、Docker的理念

    Docker通过两句口号,向使用者传递了Docker的理念:

    (1)Build, Ship and Run。直译就是“构建、运送、运行”,这句口号说出了Docker的使用方式,我们可以将构建的系统,送到另外一个地方运行;

    (2)Run any App,anywhere。直译就是“在任何地方运行任何应用程序”,这句口号我们当年见过的Java语言广告很像,Java的广告是:“Build once,run anywhere”。

    第一次使用Docker的完整过程

     

    4、Docker的核心概念

    Docker的核心概念有三个:镜像,容器,仓库。

    镜像(Image):一套系统,包含容器运行需要的程序、库、资源和配置等。镜像是个静态概念,是容器的模板,有点类似于文件系统,不包含动态数据,构建后不会改变。

    容器(Container):容器是镜像的运行实例。

    仓库(Repository):集中存储和分发镜像的服务器。

    5、Docker的安装

    我的操作系统是Ubuntu Server18.04,安装Docker很简单,root用户下执行这三条命令即可:

    apt update
    apt upgrade
    apt install docker.io

    Docker安装完成后,docker就成为Ubuntu的一个服务,我们可以使用下面的命令进行服务器的启动、停止、重启、查看状态:

    启动docker:service docker start
    停止docker:service docker stop
    重启docker:service docker restart
    查看docker状态:service docker status

    在命令行下,启动、停止、重启都没有任何信息在控制台输出,但执行查看状态命令可以看到docker的状态:

    第一次使用Docker的完整过程

     

    我们也可以使用docker version命令,查询已安装Docker的版本信息:

    第一次使用Docker的完整过程

     

    6、docker的简单使用

    现在,我尝试使用Docker,下面是详细步骤。

    第1步:编写一个C程序welcome.c:

    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        while (1)
        {
            printf("Welcome to the world of Docker!
    ");
            sleep(5);
        }
        return 0;
    }

    第2步:使用gcc对程序进行编译,得到可执行的welcome文件:

    第一次使用Docker的完整过程

     

    第3步:编辑/etc/docker/daemon.json文件,加上下面的信息:

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }

    这里是修改镜像仓库的地址,改为国内的镜像仓库,提升下载速度。

    第4步:执行下面的命令,重启Docker,使得上面的配置信息生效:

    #service docker restart

    第5步:在当前路径下建立Dockerfile文件,内容如下:

    FROM ubuntu:18.04
    COPY ./welcome /
    WORKDIR /
    CMD ./welcome

    解释:基础镜像为Ubuntu18.04版本,将welcome程序拷贝到镜像的/目录,镜像的工作目录是/,在镜像中执行./welcome命令。

    第6步:在当前路径下执行docker image build -t welcome .命令,建立镜像:

    第一次执行超级慢,以后就会快很多:

    第一次使用Docker的完整过程

     

    这是执行结束时的截图:

    第一次使用Docker的完整过程

     

    第7步:执行docker image ls,可以看到,已经成功制作了welcome镜像:

    第一次使用Docker的完整过程

     

    第8步:执行docker container run welcome命令,启动welcome容器。

    执行后,由于welcome是死循环程序,不会退出,所以不会停止:

    第一次使用Docker的完整过程

     

    换一个Linux控制台登录,执行docker container ls命令,可以看到welcome容器正在运行中:

    第一次使用Docker的完整过程

     

    此时,我们会发现welcome容器的ID是42e7472e910b,执行docker container stop 42e7472e910b命令,可以停止容器的执行:

    第一次使用Docker的完整过程

     

    第9步:如果我们希望welcome容器执行时,能够在控制台显示标准输出,在执行命令时,带上-it参数即可:

    第一次使用Docker的完整过程
  • 相关阅读:
    二分图的部分关系
    二分图的部分关系
    日常训练赛 Problem C – Complete Naebbirac’s sequence
    日常训练赛 Problem C – Complete Naebbirac’s sequence
    J
    J
    Python strip()方法
    Python startswith()方法
    Python splitlines()方法
    Python split()方法
  • 原文地址:https://www.cnblogs.com/IT-Evan/p/14733255.html
Copyright © 2011-2022 走看看