首页 > 其他分享 >【Docker 】提升开发效率的 Docker 实践技巧

【Docker 】提升开发效率的 Docker 实践技巧

时间:2024-09-29 19:48:01浏览次数:12  
标签:容器 技巧 -- 效率 镜像 Docker my docker

目录


在现代软件开发中,Docker 已成为重要的工具之一。本文将介绍如何利用 Docker 的构建缓存、自定义镜像、私有镜像仓库,以及环境变量来优化开发流程。

一、构建缓存

合理安排 Dockerfile 中的指令顺序,可以显著提高镜像构建速度,尤其是当依赖项不变时。

使用构建缓存

将依赖项的安装和代码复制分开,Docker 可以利用缓存加速构建。

示例

# 将依赖项复制到镜像中,利用缓存
COPY package.json .
RUN npm install
# 只有在代码变更时才会重新构建这一步
COPY . .
RUN npm run build

二、自定义镜像

根据项目需求,可以基于现有镜像创建新的自定义镜像。

基于现有镜像创建新镜像

从一个基础镜像开始,添加所需的自定义内容。

示例

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
COPY my_script.sh /usr/local/bin/
ENTRYPOINT ["bash", "/usr/local/bin/my_script.sh"]

三、管理和分发 Docker 镜像

有效管理和分发 Docker 镜像是团队协作的关键。

3.1 使用 Docker Hub

将本地镜像推送到 Docker Hub,以便于分享和部署。

示例

# 登录到 Docker Hub
docker login

# 打标记镜像
docker tag my_image myusername/my_image:latest

# 推送到 Docker Hub
docker push myusername/my_image:latest

3.2 创建私有 Registry

如果需要私密管理镜像,可以创建一个私有 Docker Registry。

示例

# 启动私有 Registry
docker run -d -p 5000:5000 --name registry registry:2

# 推送到私有 Registry
docker tag my_image localhost:5000/my_image
docker push localhost:5000/my_image

四、在容器中使用环境变量

环境变量可以帮助配置应用并在不同环境中运行相同的镜像。

4.1 在 Dockerfile 中设置环境变量

通过 ENV 指令设置环境变量,使得容器中的应用能够识别这些变量。

示例

FROM node:14
ENV NODE_ENV=production
WORKDIR /app
COPY . .
RUN npm install

4.2 使用 .env 文件

在项目根目录创建一个 .env 文件,用于存储环境变量。例如:

DB_USER=root
DB_PASS=example

docker-compose.yml 中引用这个 .env 文件:

services:
  db:
    image: mysql:latest
    env_file:
      - .env

4.3 在运行时传递环境变量

在启动容器时,可以通过 -e 标志来传递环境变量。

示例

docker run -e NODE_ENV=development my_image

五、自定义 Entrypoint 和 CMD

通过自定义 ENTRYPOINTCMD,可以精确控制容器的启动行为。

5.1 设置 Entrypoint

使用 ENTRYPOINT 指令定义容器启动时执行的命令。

示例

FROM python:3.9
COPY . /app
WORKDIR /app
ENTRYPOINT ["python", "app.py"]

5.2 使用 CMD 提供默认参数

利用 CMDENTRYPOINT 提供默认参数。

示例

FROM ubuntu:20.04
COPY script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
ENTRYPOINT ["/usr/local/bin/script.sh"]
CMD ["--help"]

六、使用 Docker API 和安全最佳实践

本章将介绍如何通过 Docker API 进行容器管理,以及提高 Docker 安全性的最佳实践。这些内容将帮助开发者更有效地使用 Docker,同时确保容器环境的安全性。

6.1 使用 Docker API 进行容器管理

Docker API 提供了一个强大的接口,允许用户在不直接使用命令行的情况下对 Docker 进行操作和监控。

1. 监控 Docker Daemon 状态

可以使用 curl 命令调用 Docker API 来获取 Docker Daemon 的状态信息,例如已存在的镜像列表。

curl --unix-socket /var/run/docker.sock http://localhost/images/json

2. 创建新的容器

使用 Docker API 可以轻松创建新的容器,只需发送一个包含必要参数的 POST 请求。

curl -X POST -H "Content-Type: application/json" \
  --data '{"Image": "nginx", "Cmd": ["nginx", "-g", "daemon off;"]}' \
  --unix-socket /var/run/docker.sock http://localhost/containers/create

6.2 Docker 安全最佳实践

为了保护 Docker 容器和主机系统,遵循安全最佳实践是至关重要的。

1. 使用 Docker Bench Security

Docker Bench Security 是一个开源工具,用于检查 Docker 安全配置并提供改进建议。

git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sh docker-bench-security.sh

2. 最小化基础镜像

选择最小化的基础镜像可以减少潜在的攻击面。使用轻量级镜像(如 Alpine)作为基础镜像是一个不错的选择。

FROM alpine:3.14
RUN apk add --no-cache nginx

3. 网络隔离

通过自定义网络实现容器间的隔离,提高网络安全性。

# 创建自定义网络
docker network create my_network

# 在同一网络上运行容器
docker run -d --name web --network my_network nginx
docker run -d --name db --network my_network postgres

七、使用端口映射的多个容器

通过端口映射,可以在同一主机上运行多个容器实例,并使它们共享主机端口。

7.1 运行多个实例

在不同的主机端口上运行同一镜像的多个实例,以便于负载均衡或测试。

示例

docker run -d -p 8081:80 --name web1 nginx
docker run -d -p 8082:80 --name web2 nginx

7.2 访问不同实例

可以通过浏览器或命令行工具(如 curl)访问不同的容器实例。

示例

curl http://localhost:8081
curl http://localhost:8082

总结

通过以上方法,您可以充分利用 Docker 的强大功能,提升开发效率并确保安全性。希望本文能为您的项目带来帮助!


标签:容器,技巧,--,效率,镜像,Docker,my,docker
From: https://blog.csdn.net/Stromboli/article/details/142563060

相关文章

  • 在docker安装Python环境提供给其他docker使用
    1.在宿主机新建一个目录2.在app目录下新建一个Dockerfile文件本文永久更新地址:1.在宿主机新建一个目录在宿主机上新建一个目录如app/,在app目录里面导入项目需要依赖的包在项目根目录下输入命令,导出python项目所有的依赖包pipfreeze>requirements.txt把导出的re......
  • 开源模型应用落地-LangChain实用小技巧-文档分割器-自定义文档分割器(十三)
    一、前言  在LangChain框架中,文档分割器是一种将大段文本拆分成较小块或片段的算法或方法。其目标是创建可单独处理的可管理的片段,这在处理大型文档或数据集时通常是必要的。  而自定义文档分割器可以根据特定的需求和数据类型进行定制和配置,以便更好地适应应用程......
  • HarmonyOs DevEco Studio小技巧24--异步编程(Promises、async/await)
    异步编程:调用后耗时,不阻塞代码继续执行,将来完成后,触发回调函数传递结果异步编程的范畴:网络请求(如使用 fetch 或 XMLHttpRequest 发送HTTP请求获取数据)。文件读写操作(读取或写入本地文件)。数据库操作(查询、插入、更新、删除数据)。定时器函数(如 setTimeout 和 setInt......
  • 数据库入门不再难:克服学习障碍的实用技巧与演示
    文章目录摘要引言常见的学习困难及解决方法理解抽象的数据库概念SQL语句的构建与优化理解事务与并发控制实用的学习技巧与工具推荐推荐学习资源数据库设计与实践的常用技巧实战演练常见问题解答总结未来展望参考资料摘要数据库学习对于初学者来说,往往会面临诸多......
  • ChatGPT第三方推荐及省钱技巧
    一直想找寻一款好用的ChatGPT国内代理,但目前国内代理太多了,良莠不齐,用过好几款,但都因各种原因放弃了。GPT第三方API推荐直到遇到了它 V3API 33优点能用的模型多:使用标准的OpenAI接口协议访问68+模型,支持ChatGPT(所有模型)、Claude3.5、Gemini、Glm-4等系列最新模型,支持......
  • 怎么判断公司电脑是否被监控?分享五种小技巧!
    判断公司电脑是否被监控通常涉及多个方面,包括网络流量、进程监控、系统配置等。为了确认电脑是否被监控,以下是一些常见的方法和提示:一、检查是否安装了监控软件公司通常会使用监控软件来跟踪员工的活动,如屏幕录制、操作记录、网络活动跟踪等。可以通过检查电脑上的已安装程......
  • Linux应急响应技巧整理
    吉祥知识星球http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene=21#wechat_redirect《网安面试指南》http://......
  • Hugging Face + JuiceFS:多用户多节点环境下提升模型加载效率
    HuggingFace的Transformers是一个功能强大的机器学习框架,提供了一系列API和工具,用于预训练模型的下载和训练。为了避免重复下载,提高训练效率,Transformers会自动下载和缓存模型的权重、词表等资源,默认存储在~/.cache/huggingface/hub目录下。这个缓存数据的机制。但是,当......
  • 视频画面裁剪技巧大盘点:7个靠谱方法,轻松裁剪视频画面大小
    随着短视频平台的兴起,大家都喜欢拿相机或手机拍摄视频记录美好瞬间分享到各大视频平台。您想要视频出众引人注意的话,一些必要的视频剪辑技巧是要学的。比如说,我们拍摄视频或下载视频素材时,想把一些不需要的画面部分剪辑掉,但有些朋友还不知道视频怎么剪裁画面大小?今天小编就来给......
  • SpringBoot+Docker +Nginx 部署前后端项目Hf
    部署SpringBoot项目(通关版)一、概述使用java-jar命令直接部署项目的JAR包和使用Docker制作镜像进行部署是两种常见的部署方式。以下是对这两种方式的概述和简要的优劣势分析:1.1、使用java-jar命令直接部署项目的JAR包概述:通过java-jar直接部署项目的JAR包是最简单直......