详解 docker 镜像制作的两种方式

概要

制作Docker镜像一般有2种方法:

  1. 通过Dockerfile,完成镜像的创建
  2. 使用仓库中已有的镜像,安装自己使用的软件环境后完成新镜像创建

docker 常用命令

  1. docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像,也可以从 tar 包构建镜像。
  2. docker tag: 用于给镜像打上标签。该命令可以将镜像命名为指定的名称和标签,以便于在推送和使用镜像时进行识别和管理。
  3. docker push: 用于将本地的镜像推送到 Docker Hub 或其他 Docker 仓库。该命令需要先使用 docker login 命令进行登录认证。
  4. docker pull: 用于从 Docker Hub 或其他 Docker 仓库拉取镜像到本地计算机。该命令可以使用镜像名称和标签进行定位和拉取。
  5. docker history: 用于查看 Docker 镜像的历史记录。该命令可以查看镜像的创建过程、每一层的命令和大小等信息。
  6. docker inspect: 用于查看 Docker 容器和镜像的详细信息。该命令可以查看容器和镜像的元数据、配置、网络、存储等信息。
  7. docker save: 用于将 Docker 镜像保存为 tar 包。该命令可以将本地的镜像打包为 tar 包,以便于在其他计算机上部署和使用。
  8. docker load: 用于从 tar 包恢复 Docker 镜像。该命令可以将 tar 包中的 Docker 镜像恢复为本地镜像,以便于在本地计算机上使用。

通过Dockerfile制作镜像

制作 Docker 镜像的过程通常涉及编写一个 Dockerfile,它是一个文本文件,包含了一系列的指令,用来定义如何从一个基础镜像构建一个新的镜像。编写了 Dockerfile,就可以使用 docker build 命令来创建镜像。

以下是制作 Docker 镜像的基本步骤:

  1. 创建一个 Dockerfile
    在你的项目根目录下创建一个名为 Dockerfile 的文件(没有扩展名)。

  2. 定义基础镜像
    使用 FROM 指令开始你的 Dockerfile 来定义基础镜像。例如你正在创建一个 Python 应用的镜像,你可能会从官方的 Python 镜像开始:

    FROM python:3.8
    
  3. 设置工作目录
    使用 WORKDIR 指令设置容器内部的工作目录,所有后续的 RUNCOPYCMD 指令都会在这个目录下执行。

    WORKDIR /app
    
  4. 复制文件
    使用 COPY 指令将本地文件复制到镜像中。通常,你会复制应用代码和依赖文件(如 requirements.txt)。

    COPY . /app
    
  5. 安装依赖
    使用 RUN 指令安装应用所需的依赖。对于 Python 应用,你可能会需要运行 pip install

    RUN pip install --no-cache-dir -r requirements.txt
    
  6. 配置启动命令
    使用 CMD 指令设置容器启动时默认执行的命令。

    CMD ["python", "./your-app.py"]
    
  7. 构建镜像
    打开终端或命令行,导航到包含 Dockerfile 的目录,运行 docker build 命令,并为你的镜像设置一个标签(tag)。

    docker build -t your-image-name:tag .
    

    其中,. 表示当前目录,your-image-name:tag 是你给镜像设定的名字和标签。

  8. 运行容器
    构建完成后,你可以使用 docker run 命令来启动一个基于你新镜像的容器。

    docker run -d -p 5000:5000 your-image-name:tag
    

    这里 -d 表示后台运行,-p 5000:5000 表示将容器的 5000 端口映射到主机的 5000 端口。

在容器中安装软件制作新镜像

要在现有的 Docker 镜像基础上安装额外的软件,并创建一个新的镜像,你可以执行以下步骤:

  1. 启动一个容器
    从现有的镜像启动一个容器。这个镜像可以是你从 Docker Hub 或其他容器仓库中拉取的,也可以是你本地已有的镜像。使用 docker run 命令启动容器,并且进入交互式模式:

    docker run -it --name my_container existing_image_name bash
    

    其中 existing_image_name 是你要使用的现有镜像的名称,my_container 是新容器的名称,bash 是启动容器后运行的命令,它将提供一个 shell 给你。

  2. 安装软件
    在容器的命令行中,使用包管理器安装你需要的软件。对于基于 Debian 或 Ubuntu 的系统,你通常会使用 apt;对于基于 CentOS 的系统,你会使用 yum。例如:

    apt update
    apt install -y your_software
    

    其中 your_software 是你想要安装的软件包名。

  3. 退出容器
    安装完成后,你可以通过键入 exit 或按 Ctrl+D 来退出容器。

  4. 创建新镜像
    使用 docker commit 命令从修改过的容器中创建一个新的镜像:

    docker commit my_container new_image_name
    

    其中 my_container 是你之前创建的容器的名称,new_image_name 是你要创建的新镜像的名称。

  5. 测试新镜像
    启动一个基于新镜像的容器来测试你的软件环境是否如预期工作:

    docker run -it new_image_name bash
    

    现在你可以运行测试命令来确认软件包已正确安装。

  6. 推送镜像到仓库(可选)
    如果你想要将制作好的镜像推送到 Docker Hub 或其他 Docker 镜像仓库,你需要使用 docker tag 来标记镜像,并使用 docker push 来推送:

    docker tag new_image_name your_dockerhub_username/new_image_name:tag
    docker push your_dockerhub_username/new_image_name:tag
    

    确保你已登录到 Docker Hub(或其他仓库),并将 your_dockerhub_username 替换为你的用户名,tag 替换为你的镜像标签。

以上就是制作 Docker 镜像的基本步骤。制作镜像时,可能需要根据你的应用需求添加额外的配置,如环境变量、数据卷、网络配置等。请参考官方 Docker 文档以获取更多详细信息和最佳实践。

相关推荐

  1. 详解 docker 镜像制作方式

    2024-01-03 15:38:03       35 阅读
  2. Docker镜像制作方式

    2024-01-03 15:38:03       19 阅读
  3. Docker 制作自己镜像

    2024-01-03 15:38:03       9 阅读
  4. Docker中部署flink集群方式

    2024-01-03 15:38:03       31 阅读
  5. 修改 Docker 镜像默认存储位置方法

    2024-01-03 15:38:03       14 阅读

最近更新

  1. Ubuntu 下 Docker安装 2024

    2024-01-03 15:38:03       0 阅读
  2. C#中序列化和反序列化

    2024-01-03 15:38:03       0 阅读
  3. 微服务节流阀:Eureka中服务限流策略的精妙实现

    2024-01-03 15:38:03       0 阅读
  4. LVS集群

    LVS集群

    2024-01-03 15:38:03      0 阅读
  5. 力扣 设计链表707

    2024-01-03 15:38:03       1 阅读

热门阅读

  1. 腾讯云2核2G轻量应用服务器300GB月流量够用吗?

    2024-01-03 15:38:03       40 阅读
  2. 基于遗传算法的药品配送,遗传算法原理

    2024-01-03 15:38:03       37 阅读
  3. 搞懂RestTemplate一篇就够了

    2024-01-03 15:38:03       38 阅读
  4. flutter项目初始化

    2024-01-03 15:38:03       44 阅读
  5. 搭建个人深度学习工作站(捡垃圾)

    2024-01-03 15:38:03       42 阅读
  6. QtConcurrent记录

    2024-01-03 15:38:03       39 阅读
  7. 力扣42. 接雨水

    2024-01-03 15:38:03       35 阅读
  8. 算法:动态规划

    2024-01-03 15:38:03       41 阅读
  9. setFirstResult ,setMaxResults

    2024-01-03 15:38:03       34 阅读
  10. pip安装报错SSL

    2024-01-03 15:38:03       47 阅读
  11. 简易版前端项目离线方案-接口及页面离线缓存

    2024-01-03 15:38:03       37 阅读
  12. C++ gRPC helloworld 示例代码

    2024-01-03 15:38:03       40 阅读
  13. 数据结构OJ实验7-树结构及应用

    2024-01-03 15:38:03       31 阅读
  14. MongoDB聚合:$addField

    2024-01-03 15:38:03       40 阅读
  15. 大数据系列之:读取parquet文件统计数据量

    2024-01-03 15:38:03       39 阅读
  16. Mac 彻底删除 node 和 npm

    2024-01-03 15:38:03       39 阅读