【容器化应用程序设计和开发】2.2 Dockerfile 的编写和最佳实践

2.2 Dockerfile 的编写和最佳实践

在上篇章节中,我们介绍了什么是容器化,以及Docker容器点一些基本概念。那么今天就来学习一下 Dockerfile 的编写和最佳实践。

说到Docker 就离不开 Dockerfile ,那么什么是 Dockerfile呢?Dockerfile是用于构建Docker镜像的文本文件,其中包含一系列指令来描述如何构建该镜像。

在这里插入图片描述

2.2.1 Dockerfile 包含哪些指令

  1. 指定基础镜像:在Dockerfile的第一行中,使用 FROM 指令来指定该镜像基于哪个已有镜像构建。
FROM openjdk:8-jdk-alpine
复制代码
  1. 拷贝应用程序文件:使用COPY或ADD指令将应用程序文件从宿主机复制到容器内部。
COPY target/*.jar   /app.jar
复制代码

3.运行命令:使用RUN指令执行Shell命令或者其他可执行文件。

RUN apt-get update && \
		apt-get install -y curl && \
		rm -rf /var/lib/apt/lists/*
复制代码
  1. 暴露端口:使用EXPOSE指令告诉Docker该容器会监听哪些端口。
EXPOSE 8080
复制代码
  1. 定义挂载点:使用VOLUME指令定义需要挂载的目录。
VOLUME /data
复制代码
  1. 设置环境变量:使用ENV指令设置环境变量。
ENV app_name=myapp
复制代码
  1. 执行命令:使用ENTRYPOINT指令定义Docker容器启动时要执行的命令。
ENTRYPOINT ["java","-jar","/app.jar"]
复制代码

2.2.2 Dockerfile 注意事项

编写 Dockerfile 时需要遵循以下最佳实践:

  1. 使用简洁的语法,减少不必要的注释。
  2. 只安装必要的依赖库,不要安装整个库。
  3. 将依赖库安装在容器中的特定目录中,而不是在容器中的全局目录中。
  4. 只复制必要的文件,不要复制整个目录。
  5. 设置环境变量,以便在容器中运行命令。
  6. 使用二进制文件,而不是源代码,除非必须编译。

Dockerfile 解决了哪些问题?

1、统一标准

  • 应用构建
    • Java、C++、JavaScript
    • 打成软件包
    • .exe
    • docker build .... 镜像
  • 应用分享
    • 所有软件的镜像放到一个指定地方 docker hub
    • 安卓,应用市场
  • 应用运行
    • 统一标准的 镜像
    • docker run

2、资源隔离

  • cpu、memory资源隔离与限制
  • 访问设备隔离与限制
  • 网络隔离与限制
  • 用户、用户组隔离限制
  • ......

4、架构

  • Docker_Host:
    • 安装Docker的主机
  • Docker Daemon:
    • 运行在Docker主机上的Docker后台进程
  • Client:
    • 操作Docker主机的客户端(命令行、UI等)
  • Registry:
    • 镜像仓库
    • Docker Hub
  • Images:
    • 镜像,带环境打包好的程序,可以直接启动运行
  • Containers:
    • 容器,由镜像启动起来正在运行中的程序

猜你喜欢

转载自juejin.im/post/7229178458071760953