Docker

1. Docker的作用

Docker是一个开源的平台,用于开发、交付和运行应用程序。它利用容器化技术,可以将应用程序及其依赖项打包到一个容器中,使得应用程序可以在任何环境中快速、一致地运行。Docker的作用包括:

  1. 简化开发流程:开发人员可以在本地环境中构建和测试应用程序的Docker容器,而不必担心依赖项或配置的问题。

  2. 提高部署效率:Docker容器可以在不同的环境中快速部署,包括开发、测试和生产环境,从而提高部署的效率和一致性。

  3. 节省资源:Docker容器共享主机的操作系统内核,因此可以更高效地利用硬件资源,减少虚拟化带来的开销。

  4. 管理复杂性:通过Docker的容器化技术,可以更轻松地管理多个应用程序及其依赖项,减少了环境配置和冲突的复杂性。

2. Docker的原理

Docker的原理基于Linux操作系统的核心技术之一——容器化。容器化是一种轻量级的虚拟化技术,它利用Linux内核的命名空间(namespace)和控制组(cgroups)功能,实现了对进程、文件系统、网络等资源的隔离和管理。

在Docker的工作原理中,主要涉及以下几个关键概念:

  1. 镜像(Image):Docker镜像是一个只读的模板,包含了用于运行容器的文件系统、环境变量、程序等信息。镜像可以用来创建容器实例。

  2. 容器(Container):容器是Docker的运行实例,由Docker镜像创建而来。每个容器都是相互隔离的,拥有自己的文件系统、网络和进程空间。

  3. 镜像仓库(Registry):镜像仓库是用来存储Docker镜像的地方,其中包括Docker Hub等公共仓库,以及私有的镜像仓库。

Docker的工作原理可以总结为以下几个步骤:

  1. 开发人员使用Dockerfile定义应用程序的环境和依赖关系,然后通过Docker引擎构建成Docker镜像。

  2. 运维人员将Docker镜像推送到镜像仓库,其他团队成员可以从镜像仓库中拉取镜像。

  3. 在部署阶段,Docker引擎根据镜像创建容器实例,在容器内运行应用程序。

3. Docker 镜像

Docker镜像是用于创建Docker容器的只读模板,它包含了应用程序运行所需的文件系统、环境变量、程序等信息。镜像可以理解为一个静态的快照,它定义了容器的文件系统结构和应用程序运行所需的配置。Docker镜像采用了分层的文件系统结构,每一层都代表一个文件系统的改动。这种分层结构使得镜像可以实现共享和重用,同时也节省了存储空间。

除了最上面一层是可读可写的,下面基层都是只读的。

4. Dockerfile

Dockerfile是一个文本文件,用于定义Docker镜像的构建过程。通过Dockerfile,开发人员可以指定容器中的环境、应用程序的依赖关系以及运行时配置等信息,然后使用Docker引擎根据Dockerfile构建Docker镜像。Dockerfile的指令。

  1. FROM:指定基础镜像。例如:FROM ubuntu:20.04表示基于Ubuntu 20.04构建镜像。

  2. RUN:在容器中执行命令。例如:RUN apt-get update && apt-get install -y python3用于更新软件包列表并安装Python3。

  3. CMD:定义容器启动时运行的默认命令。例如:CMD ["python3", "app.py"]指定容器启动时默认运行的Python脚本。

  4. LABEL:为镜像添加元数据。例如:LABEL version="1.0" description="My custom image"

  5. EXPOSE:声明容器监听的网络端口。例如:EXPOSE 8080声明容器应用程序监听8080端口。

  6. ENV:设置环境变量。例如:ENV MY_VAR=myvalue设置名为MY_VAR的环境变量。

  7. ADD:复制文件或目录到容器中,类似于COPY。不过ADD还支持URL和tar文件解压。例如:ADD source destination

  8. COPY:复制文件或目录到容器中。例如:COPY . /app将当前目录下的所有文件复制到容器的/app目录。

  9. ENTRYPOINT:配置容器启动时运行的命令。与CMD类似,不过ENTRYPOINT的参数不会被覆盖。例如:ENTRYPOINT ["nginx", "-g", "daemon off;"]

  10. VOLUME:创建挂载点,用于在容器和主机之间共享数据。例如:VOLUME /var/log

  11. USER:指定容器应用程序的运行用户。例如:USER myuser

  12. WORKDIR:设置工作目录。例如:WORKDIR /app将工作目录切换至/app。

  13. ARG:定义构建时的参数。例如:ARG VERSION=latest定义了一个名为VERSION的构建参数。

利用Dockerfile创建一个image

# 使用 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制源代码到工作目录
COPY . .

# 暴露端口
EXPOSE 8080

# 启动应用
CMD [ "node", "server.js" ]

5. 其他的编译镜像工具--Buildah

和Dockerfile不同的是,Buildah不需要docker 守护进程的帮助。Buildah提供了一种轻量级、灵活的方式来构建容器镜像,用户可以基于Buildah构建自定义的容器镜像,并将其输出为OCI镜像格式、Docker镜像格式或tar文件等。

Buildah用于构建镜像的命令:

  1. buildah bud:使用 Dockerfile 或者 Buildah 提供的构建上下文构建容器镜像。

  2. buildah from:从指定的基础镜像创建一个新的容器。

  3. buildah run:在容器中执行命令。

  4. buildah copy:将文件或目录复制到容器中。

  5. buildah commit:保存容器的状态为一个新的镜像。

  6. buildah push:将本地镜像推送到远程镜像仓库。

  7. buildah tag:为镜像添加标签。

  8. buildah inspect:检查镜像或容器的详细信息。

  9. buildah rm:删除一个或多个容器。

  10. buildah rmi:删除一个或多个镜像。

利用Buildah创建一个image

# 创建一个新的容器
container=$(buildah from node:14)

# 设置工作目录
buildah config --workingdir /usr/src/app $container

# 复制 package.json 和 package-lock.json
buildah copy $container package*.json ./

# 安装依赖
buildah run $container npm install

# 复制源代码到工作目录
buildah copy $container . .

# 暴露端口
buildah config --port 8080 $container

# 设置启动命令
buildah config --cmd "node server.js" $container

# 提交镜像
buildah commit $container my-node-app

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值