如何使用 Dockerfile 创建一个简单容器

 更新时间:2022年04月24日 10:23:48   作者:小公鸡卡哇伊呀~  
这篇文章主要介绍了如何使用 Dockerfile 创建一个简单容器,Dockerfile 是用于指导 docker 创建自定义 image 的一系列指令,是用于创建 image 的蓝图,下文更多详细介绍需要的小伙伴可以参考一下

Dockerfile

Dockerfile 是用于指导 docker 创建自定义 image 的一系列指令,是用于创建 image 的蓝图。

现在有一个简单的 node 项目( 其中Dockerfile 是后面加的,初始项目没有此文件):

要运行此代码,一般的做法是,先在本机安装 node,然后在项目文件夹中先后运行:

npm install

以及:

node server.js,

然后在浏览器 localhost 地址就可以看到app运行界面。

写一个 Dockerfile

如果要改为在 container 中运行此程序,那么首先需要有此 node appimage,要创建 image, 则需要写一个Dockerfile:

# 将在 node image 基础上创建此自定义的 image
FROM node

# Docker container 工作目录
# 此指令告诉 Docker,余下的指令将在容器内的 /app 文件夹内执行。
WORKDIR /app

# 将当前项目文件夹内的所有文件及子文件全部copy 到 /app 文件夹中
# 因为有上一条指令,这里改为  COPY . . 也可以
COPY . /app

# 安装 package.json 中的package,生成 node_modules 文件夹
RUN npm install

# 容器内的进程将发布端口 80
# 可选,这条指令什么也不做,只起文档作用,best practice
EXPOSE 80

# 当基于此 image 的容器启动后,命令  node server.js 将会执行
CMD ["node", "server.js"]

上述Dockerfile总共6条指令,起作用的只有5条。

然后在终端执行命令,此命令将生成此 node app 的 image:

docker build .    

. 号是Dockerfile 文件所在的路径,这里刚好是当前路径。

docker 容器是与外界独立的进程,具有自己的内部网络,当容器内的 node 应用程序在容器的端口 80 监听时,容器不会将该端口发布到我们的本地机器。此外 Dockerfile 里的端口不起作用,因此必须在命令中使用 --publish 或者 -p 实现本机端口和运行的容器端口的映射。

运行基于此image的容器:

docker run --publish 3000:80 previously_generated_image_id

打开浏览器 localhost:3000 就可以查看运行界面。

优化 Dockerfile

image 只读,如果修改了 source code,需要重新 build 一遍,其中的 npm install 特别费时间,但此指令通常是不需要执行的,因为新增第三方包的可能性远低于修改代码的可能性。

每次build image 时,Docker 都会缓存每条指令执行的结果。所以当重新 build image 时,如果不需要再次运行指令,它将使用这些缓存的结果。 这被称为基于层的架构。

每条指令都代表 Dockerfile 中的一个层, image 是根据这些不同的指令简单地从多个层构建的。

将 RUN npm install 指令提前将能优化image 的构建:

FROM node

WORKDIR /app

COPY package.json /app 

# 将此指令提前,通常都能利用前一次build 的结果,
# 因此能极大节省重新 build image 所需要的时间。
RUN npm install

COPY . /app

# optional
# 这条指令什么也不做,只起文档作用,best practice
EXPOSE 80

CMD ["node", "server.js"]

container shell

使用 -it 能获得容器的 shell, i: interactive, t: tty :

docker run -it 46613ce05eae bash

然后就可以查看安装到容器内的 node 版本,以及 /app 内的文件等等,使用 exit 命令退出。

root@ca432bda02aa:/app# node -v
v18.0.0   
root@ca432bda02aa:/app# ls  
Dockerfile  node_modules  package-lock.json  package.json  public  server.js
root@ca432bda02aa:/app#

到此这篇关于如何使用 Dockerfile 创建一个简单容器的文章就介绍到这了,更多相关 Dockerfile 创建容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Docker Desktop for Linux和Docker Engine区别

    浅谈Docker Desktop for Linux和Docker Engine

    本文主要介绍了Docker Desktop for Linux和Docker Engine区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    文章描述了如何在GitLab Runner上配置NVM、NRM,并优化Maven打包过程,通过上述配置和优化,作者将Maven打包时间从三分钟缩短到不到40秒
    2024-11-11
  • Docker Swarm 服务编排之命令详解

    Docker Swarm 服务编排之命令详解

    在Docker Swarm集群中,使用stack服务编排搭建lnmp来部署WordPress非常的方便,今天小编重点给大家介绍Docker Swarm 服务编排之命令详解,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • Docker使用的个人学习总结

    Docker使用的个人学习总结

    最近时不时会用到很多开发工具,无奈装了太多无用软件,所以不想安装太多开发软件在电脑上,所以想到了用docker容器来配置开发环境适应不同开发内容,这篇文章主要给大家总结了关于Docker使用的一些个人学习知识点,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Docker使用、容器迁移的方案详解

    Docker使用、容器迁移的方案详解

    Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境,本文给大家介绍Docker使用、容器迁移的方案,感兴趣的朋友一起看看吧
    2025-04-04
  • docker基本使用方法入门示例

    docker基本使用方法入门示例

    这篇文章主要介绍了docker基本使用方法入门示例,包含docker命令查询方法,查询镜像和下拉镜像,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Dockerfile如何使用alpine系统制作haproxy镜像

    Dockerfile如何使用alpine系统制作haproxy镜像

    这篇文章主要介绍了Dockerfile如何使用alpine系统制作haproxy镜像问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Docker部署安装Nginx的详细过程

    Docker部署安装Nginx的详细过程

    Nginx 是一款高性能的 web 服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器,这篇文章主要介绍了Docker部署安装Nginx,需要的朋友可以参考下
    2024-04-04
  • 如何给Docker配置网络代理

    如何给Docker配置网络代理

    文章讲述了如何为Docker配置代理,包括守护进程dockerd、容器运行和构建时的代理配置方法,并强调了不同场景下的适用性
    2024-11-11
  • Docker部署Nginx并配置反向代理

    Docker部署Nginx并配置反向代理

    这篇文章介绍了Docker部署Nginx并配置反向代理的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01

最新评论