ToB企服应用市场:ToB评测及商务社交产业平台

标题: Docker学习路线7:构建容器镜像 [打印本页]

作者: 曹旭辉    时间: 2023-7-18 20:14
标题: Docker学习路线7:构建容器镜像
容器镜像是可执行的软件包,包括运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义镜像,您可以在任何支持Docker的平台上无缝地部署应用程序及其所有依赖项。
Dockerfile

构建容器镜像的关键组件是 Dockerfile。它本质上是一个包含有关如何组装 Docker 镜像的说明的脚本。Dockerfile 中的每个指令都会在镜像中创建一个新层,从而更容易跟踪更改并最小化镜像大小。以下是 Dockerfile 的简单示例:
  1. # Use an official Python runtime as a parent image
  2. FROM python:3.7-slim
  3. # Set the working directory to /app
  4. WORKDIR /app
  5. # Copy the current directory contents into the container at /app
  6. COPY . /app
  7. # Install any needed packages specified in requirements.txt
  8. RUN pip install --trusted-host pypi.python.org -r requirements.txt
  9. # Make port 80 available to the world outside this container
  10. EXPOSE 80
  11. # Define environment variable
  12. ENV NAME World
  13. # Run app.py when the container launches
  14. CMD ["python", "app.py"]
复制代码
构建镜像

创建 Dockerfile 后,您可以使用 docker build 命令构建镜像。在包含 Dockerfile 的目录中的终端中执行以下命令:
  1. docker build -t your-image-name .
复制代码
此命令告诉 Docker 使用当前目录中的 Dockerfile(.)构建镜像,并为其指定名称(-t your-image-name)。
检查镜像和层

成功构建后,您可以使用 docker image 命令检查创建的镜像:
  1. docker image ls
复制代码
要更仔细地查看镜像的各个层,请使用 docker history 命令:
  1. docker history your-image-name
复制代码
要查看镜像的层,也可以使用 docker inspect 命令:
  1. docker inspect your-image-name
复制代码
要删除镜像,请使用 docker image rm 命令:
  1. docker image rm your-image-name
复制代码
将镜像推送到注册表

构建镜像后,您可以将其推送到容器注册表(例如Docker Hub、Google Container Registry等),以轻松分发和部署应用程序。首先使用您的凭据登录注册表:
  1. docker login
复制代码
然后,使用注册表 URL 标记您的镜像:
  1. docker tag your-image-name username/repository:tag
复制代码
最后,将已标记的镜像推送到注册表:
  1. docker push username/repository:tag
复制代码
构建容器镜像是使用 Docker 的重要方面,它使您可以轻松打包和部署应用程序。通过创建具有精确指令的 Dockerfile,您可以轻松地构建和分发各种平台的镜像。
高效的层缓存

在构建容器镜像时,Docker会缓存新创建的层。这些层可以在构建其他镜像时重复使用,减少构建时间并最小化带宽使用。但是,要充分利用这种缓存机制,您需要了解如何有效地使用层缓存。
Docker层缓存的工作原理

Docker为Dockerfile中的每个指令(例如RUNCOPYADD等)创建一个新层。如果指令自上次构建以来没有更改,Docker将重用现有的层。
例如,考虑以下Dockerfile:
  1. FROM node:14WORKDIR /appCOPY package.json /app/RUN npm installCOPY . /app/CMD ["npm", "start"]
复制代码
第一次构建镜像时,Docker将执行每个指令并为每个指令创建一个新层。如果对应用程序进行了一些更改并再次构建镜像,Docker将检查更改的指令是否影响任何层。如果没有任何层受到更改的影响,Docker将重用缓存的层。
有效使用层缓存的技巧

遵循这些最佳实践,您可以优化层缓存过程并减少Docker镜像的构建时间,从而使您的开发和部署过程更加高效。
镜像大小和安全性

在构建容器镜像时,了解镜像大小和安全性非常重要。镜像的大小会影响容器的构建和部署速度。较小的镜像可以提高构建速度,并减少下载镜像时的网络开销。安全性也非常重要,因为容器镜像可能包含漏洞,这可能会对您的应用程序造成风险。
减小镜像大小

  1. FROM node:14-alpine
复制代码
  1. RUN apt-get update && \\\\    apt-get install -y some-required-package
复制代码
  1. RUN apt-get update && \\\\    apt-get install -y some-required-package && \\\\    apt-get clean && \\\\    rm -rf /var/lib/apt/lists/*
复制代码
  1. FROM node:14-alpine AS build
  2. WORKDIR /app
  3. COPY package*.json ./
  4. RUN npm install
  5. COPY . .
  6. RUN npm run build
  7. FROM node:14-alpine
  8. WORKDIR /app
  9. COPY --from=build /app/dist ./dist
  10. COPY package*.json ./
  11. RUN npm install --production
  12. CMD ["npm", "start"]
复制代码
  1. node_modules
  2. npm-debug.log
复制代码
提高安全性

  1. RUN addgroup -g 1000 appuser && \\\\    adduser -u 1000 -G appuser -D appuser
  2. USER appuser
复制代码
  1. COPY package*.json ./
  2. COPY src/ src/
复制代码
遵循这些最佳实践,您将能够构建更高效和安全的容器镜像,从而提高性能并降低应用程序中漏洞的风险。
最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:
公众号 Let us Coding牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区
看完如果觉得有帮助,欢迎点赞、收藏关注

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4