前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门(二)

Docker 入门(二)

作者头像
凌虚
发布2020-07-17 12:08:17
2700
发布2020-07-17 12:08:17
举报

上一篇文章 Docker 入门(一)简单讲述了 docker 中的一些基本概念。文本将会重点讲述 image 镜像的内容。

01

镜像

Docker 中的镜像到底是什么?它是一个可供执行的文件系统包,里面包含了运行一个应用程序所需要的代码、库、环境变量和配置文件等等所有内容。

镜像是分层的。它是由一个或多个文件系统叠加而成,最底层是 bootfs 即引导文件系统,我们几乎永远不会与这个东西有什么交互,而且当容器启动时 bootfs 会被卸载掉。第二层是 rootfs ,通常是一个操作系统,其包含了程序运行所需的最基本环境,也称之为基础镜像。第三、第四、第N层,是由我们自己指定的其它资源文件。

镜像层层叠加,向下引用依赖,而 docker 使用了联合加载技术同时加载多层文件系统,使我们可以一起看到所有的文件及其资源,仿佛其并没有被分层,而是一个文件系统一样。

镜像是只读的,也就意味着其无法被更改,这正是保证环境一致性的关键原因。

容器则是镜像的运行时,会在镜像最外层加载一层读写层,这样便能进行文件的读写,但其不会对下层镜像的内容进行修改,应用程序只有通过容器才能启动并对外提供服务。

02

构建镜像

首先需要准备我们的项目代码:

编写 Dockerfile 文件:

在 Dockerfile 中,我们指定了基础镜像、声明了镜像的基础信息,指定了镜像的工作目录,把项目文件添加到了镜像中,指定了环境变量,暴露了容器端口,指定了容器启动后执行的命令。

在复制文件时,我们可以通过 .dockerignore 指定忽略复制到镜像中的文件,用法与 .gitignore 类似。

读者可以仔细阅读上图 Dockerfile 中的注释。

输入指令:

docker build --build-arg NODE_ENV=develop -t docker-demo .

通过 -t 指定了镜像的标签,--build-arg 指定了 Dockerfile 中的 ARG 声明的变量,也就是 ENV 环境变量,至此我们就成功的构建了自己的镜像。由于网络原因拉取镜像可能会很慢,读者可以使用 DaoCloud 提供的加速地址(其官网的加速器就是)。

输入命令:

docker run --name demo -it -p 9999:8888 docker-demo

通过 --name 指定容器的别名,-p 指定宿主机与容器之间端口的映射,至此我们基于刚刚构建的镜像启动了一个容器,而容器就是镜像的运行时,最后我们在自己的宿主机上访问 localhost:9999 就能连接到 docker 容器内的 web 示例服务了。

03

结语

镜像是只读的、分层的文件系统,容器是镜像的运行时。重点关注通过 Dockerfile 构建镜像。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Node Python Go全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档