Docker详解

        首先关于“虚拟化”的概念,相信虚拟机这个概念肯定很熟悉,在本机上安装一个如 VMware , VisualBox 之类软件可以运行一个其他的操作系统。其次,区分虚拟机和容器两个概念,每台虚拟机都

需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用,而容器技术是和宿主机共享硬件资源及操作系统,可以实现资源的动态分配,容器在宿主机操作系统中,在用户分离空间

以分离的进程运行。容器是相比虚拟机更加轻量级的虚拟机技术。

        Docker 属于 Linux 容器的一种封装,基于go语言开发并遵循了apache2.0协议开源,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管

理、复制、分享、修改,就像管理普通的代码一样。相比于传统的虚拟化技术有如下优势:启动速度是秒级别的、占用内存更小、高可用和高恢复性、集群快速分发和部署,非常方便、

        Docker有三个基本概念:Image(镜像)、Container(容器)、Repository(仓库)。Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含

了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视

角。Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方,实际上,容器 = 镜像 + 读写层。Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,很

容易的在当前宿主上运行,但是, 如果需要在其他服务器上使用这个镜像就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。Docker 仓库的概念跟 GitHub

的代码仓库 类似。一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

      Docker的架构基于C/S结构,即客户端/服务器体系结构,Docker客户端与Docker服务端交互,发送请求,Docker服务端负责构建、运行和分发Docker镜像。Docker 客户端和服务端可以运行在一

台机器上。

架构图

     Docker 的核心组件包括:Docker Client、Docker Daemon、Docker Image、Docker Registry、Docker Container,后面三个上面已经说明,不多加赘述:

     Docker client 是Docker提供命令行界面工具,提供用户和Docker交互的平台,客户端可以构建、运行和停止应用容器,还可以远程和服务端交互;

     Docker Daemon 是服务器组件,以 Linux 后台服务方式运行,是 Docker 最核心的后台进程,也称为守护进程,负责响应来自Docker client的请求,将请求翻译成系统调用完成容器管理操作。

     Docker的常用命令如下:

     (1)docker pull image_name         //拉取Docker镜像

     (2)docker images                       //查询主机的Docker镜像

     (3)docker ps -a                         //查询主机当前运行镜像

     (4)docker start container_name/container_id     //启动镜像

      (5)docker restart container_name/container_id   //重启镜像

      (6)docker stop container_name/container_id    //停止镜像

        (7) docker attach container_name/container_id   //进入镜像

        (8) docker run -t -i container_name/container_id /bin/bash  //调用bash命令运行镜像

        (9) docker rm container_name/container_id   //删除镜像

      (10)docker  load -i 镜像路径   //加载容器镜像

      (11)docker commit -m “描述” 镜像ID 镜像名称:标签   //保存镜像

      (12)docker cp 文件路径 镜像ID:路径   //拷贝文件到镜像中 也可以拷贝镜像文件到外部,交换路径对象

      (13)docker save -o XXX.tar 镜像名称:标签


        关于DockerFile:

       Dockerfile 是自动构建 Docker 镜像的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。Dockerfile 中的命令非常类似于 Linux 下的 Shell 命令。

       Dockerfile 分为四个部分:

     (1)基础镜像(父镜像)信息指令 FROM:  FROM 是用于指定基础的 images ,一般格式为 FROM <image> or FORM <image>:<tag>。

     (2)维护者信息指令 MAINTAINER:MAINTAINER 是用于指定镜像创建者和联系方式,一般格式为 MAINTAINER <name>。

     (3)镜像操作指令 RUN 、EVN 、ADD 和 WORKDIR 等:COPY 是用于复制本地主机的 <src> (为 Dockerfile 所在目录的相对路径)到容器中的 <dest>;WORKDIR 用于配合 RUN,CMD,

ENTRYPOINT 命令设置当前工作路径;RUN 用于容器内部执行命令,一般格式为 RUN <command> ; EXPOSE 命令用来指定对外开放的端口。一般格式为 EXPOSE <port> [<port>...];

     (4)容器启动指令 CMD 、ENTRYPOINT 和 USER 等:ENTRYPOINT 可以让你的容器表现得像一个可执行程序一样。一个 Dockerfile 中只能有一个 ENTRYPOINT,如果有多个,则最后一个生

效。ENTRYPOINT 命令也有两种格式:

           ENTRYPOINT ["executable", "param1", "param2"] :推荐使用的 Exec 形式。

           ENTRYPOINT command param1 param2 :Shell 形式。

          CMD 命令用于启动容器时默认执行的命令,CMD 命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用 ENTRYPOINT 指定一个,然后 CMD 命令的参数就

会作为 ENTRYPOINT 的参数。CMD 命令有三种格式:

          CMD ["executable","param1","param2"]:推荐使用的 exec 形式。

          CMD ["param1","param2"]:无可执行程序形式。

          CMD command param1 param2:Shell 形式。

如下所示的例子:

        FROM python:2.7MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>COPY . /app

        WORKDIR /app

       RUN pip install -r requirements.txt

       EXPOSE 5000ENTRYPOINT ["python"]CMD ["app.py"]

翻译一下:

从 Docker Hub 上 Pull 下 Python 2.7 的基础镜像;显示维护者的信息;Copy 当前目录到容器中的 /App 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>;指定工作路

径为 /App;安装依赖包;暴露 5000 端口;启动 App。


构建 Dockerfile:比如输入如下命令新建Dockerfile:

        mkdir static_web

        cd static_web

        touch Dockerfile

        然后编辑内容保存,如下所示:

       FROM nginx

        MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>

       RUN echo \\'<h1>Hello, Docker!</h1>\\' > /usr/share/nginx/html/index.html

      在 Dockerfile 文件所在目录执行:docker build -t angelkitty/nginx_web:v1 . 启动:  -t 是为新镜像设置仓库和名称,angelkitty 为仓库名,nginx_web 为镜像名,:v1 为标签(不添加为默认 latest )

构建完成之后,使用 Docker Images 命令查看所有镜像,如果存在 REPOSITORY 为 Nginx 和 TAG 是 v1 的信息,就表示构建成功。后续可以运行镜像。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容