docker 手动构建新镜像的方法

Docker 是一个开源的应用容器引擎,可以帮助用户将应用程序及其依赖项打包在一个虚拟容器中,从而让应用程序在各种环境中获得更好的可移植性。在构建 Docker 镜像时,有时候用户需要手动构建新镜像。本文将为你详细讲解手动构建 Docker 新镜像的方法。

准备工作

在执行手动构建 Docker 新镜像的操作之前,需要先准备好以下两个文件:

  • Dockerfile:是用于指导 Docker 构建镜像的重要文件。在 Dockerfile 中,用户可以指定 Docker 镜像中需要运行的环境、安装的软件、从外部拷贝文件等等,是 Docker 构建过程中的核心。
  • 应用程序打包文件:为了构建 Docker 镜像,需要将打包好的应用程序文件上传到 Docker 构建环境中,从而让 Docker 在构建过程中把这些文件打包到镜像中。一般情况下应用程序文件打包成的是 tar 包或 zip 包。

手动构建 Docker 新镜像的过程

  1. 准备好 Dockerfile 文件和应用程序打包文件,然后在命令行中进入到 Dockerfile 所在的目录。
  2. 执行以下命令开始构建 Docker 新镜像:
docker build -t <image_name>:<tag> .

其中,<image_name> 为 Docker 镜像的名称,<tag> 为 Docker 镜像的版本号。. 表示当前目录下的 Dockerfile 文件是构建 Docker 镜像的蓝本。例如:

docker build -t myapp:v1.0 .

表示构建一个名为 myapp,版本为 v1.0 的 Docker 镜像。

  1. 稍等片刻,Docker 便会自动从 Dockerfile 中读取指令,逐步生成新的镜像。构建完成后,可以使用以下命令查看 Docker 镜像列表:
docker images

例如:

REPOSITORY         TAG                 IMAGE ID            CREATED             SIZE
myapp              v1.0                65dab982eef2        4 minutes ago       251MB

表示成功构建了名为 myapp,版本为 v1.0 的 Docker 镜像。

示例

下面,将通过两个示例来演示手动构建 Docker 新镜像的具体操作过程。

示例一:构建 nginx 镜像

  1. 准备 Dockerfile 文件,内容如下:
# Use an official nginx runtime as a parent image
FROM nginx:latest

# Set the working directory to /usr/share/nginx/html
WORKDIR /usr/share/nginx/html

# Copy the current directory contents into the container at /usr/share/nginx/html
COPY . /usr/share/nginx/html

其中,该 Dockerfile 以官方 nginx 镜像为基础,将当前目录下的所有文件复制到 nginx 的 html 目录中。

  1. 将 nginx 静态页面文件打包成 tar 包,命名为 mywebsite.tar
  2. 在命令行中进入到 Dockerfile 所在的目录,执行以下命令:docker build -t mynginx:v1.0 .。稍等片刻,Docker 便会自动从 Dockerfile 中读取指令,逐步生成新的镜像。
  3. 然后,可以通过以下命令启动该 nginx 容器:
docker run --name mynginx -d -p 80:80 mynginx:v1.0

其中,

  • --name mynginx 表示给容器取名字为 mynginx
  • -d 表示以“后台模式”运行容器。
  • -p 80:80 表示将主机的 80 端口映射到容器的 80 端口上。
  • mynginx:v1.0 表示使用刚才构建的 mynginx:v1.0 镜像来启动容器。

  • 打开浏览器,输入 http://localhost 查看 nginx 网站是否正常访问。

示例二:构建 python 镜像

  1. 准备 Dockerfile 文件,内容如下:
# Use an official Python runtime as a parent image
FROM python:3.7-slim-buster

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app/

# Install the necessary packages
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

其中,该 Dockerfile 以官方 Python 3.7 镜像为基础,将当前目录下的所有文件复制到容器的 /app 目录下。然后通过 pip 安装了 requirements.txt 文件中列出的 Python 模块。最后将容器的 80 端口暴露给外部,定义了一个名为 NAME 的环境变量,并运行了 app.py 应用程序。

  1. 然后,执行以下命令生成新的镜像:docker build -t mypython:v1.0 .
  2. 等待 Docker 生成完成后,可以通过以下命令启动该 Python 容器:
docker run -it --name mypython -p 8000:80 mypython:v1.0

其中,

  • -it 表示交互式运行容器。
  • --name mypython 表示给容器取名字为 mypython
  • -p 8000:80 表示将主机的 8000 端口映射到容器的 80 端口上。
  • mypython:v1.0 表示使用刚才构建的 mypython:v1.0 镜像来启动容器。

  • 打开浏览器,输入 http://localhost:8000 查看 Python 应用程序是否正常运行。

到此为止,以两个示例为例,我们就详细地讲解了手动构建 Docker 新镜像的具体操作过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker 手动构建新镜像的方法 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 生产环境docker部署项目之后没有logback日志

    docker 部署SpringBoot 项目 并挂载日志1. 本地打完包jar 上传到服务器项目中的日志配置: logging.path=/logs/logging.file=mylog.log 项目中的日志配置: logging.path=/logs/ logging.file=mylog.log2. 在服务器指定目录下 启动容器docker build …

    Docker 2023年4月16日
    00
  • Docker 网络命令详解

    下面我来为你详细讲解“Docker 网络命令详解”的完整攻略。 Docker 网络概述 Docker 网络是 Docker 容器之间通信的基础,Docker 提供了多种网络驱动。默认情况下,Docker 会创建两个网络:bridge 和 none。 bridge 网络驱动:默认的网络驱动,用于向外部网络公开端口并与其他容器进行通信。 none 网络驱动:与宿…

    Docker 2023年5月16日
    00
  • Docker学习5-Dockerfile编写自己的镜像

    前言 Dockerfile 可以自定义编写镜像,简单来说就类似写脚本,shell脚本应该接触不少了,就是一个执行后就完成了。 当然做好的镜像也可以传到镜像仓库,就好像github上面一样存储,一个命令就能照搬下来安装。 一、简介 相信不少朋友会问,为何docker run 一下python就停止了呢?(那执行完了不停止干什么?) 还有为什么我的pip安装,每…

    Docker 2023年4月13日
    00
  • 把数据库部署在docker容器内有哪些缺陷

    将数据库部署在Docker容器内是一种流行的方式,尤其是在微服务架构中,但是它也有一些缺陷需要注意。 缺陷 1. 数据持久性 当你将数据库部署在Docker容器内时,必须注意数据持久性的问题。当容器被删除或重启时,容器内的所有数据都将丢失。因此,我们需要确保容器的数据持久性,避免数据丢失的情况。 2. 数据安全性 在Docker容器中运行数据库可能会使数据面…

    Docker 2023年5月16日
    00
  • Wiki.js配置LDAP认证

    安装好wikijs 之后, 可以进行进一步的详细配置. 这里介绍 LDAP 认证的配置. 在 管理 -> 身份验证 -> 添加策略 -> 选择 LDAP/AD , 如下: 接下来进行详细配置: 显示名称: 按需修改 是否启用: 是 LDAP URL: 格式为: ldap://serverhost:389 or ldaps://serverh…

    2023年4月10日
    00
  • MySQL主从复制配置(Docker容器内配置)

    主从工作原理:     配置介绍: MASTER:172.17.0.2 SLAVE:172.17.0.3   MASTER内数据库:   仅仅同步以上两个库(在configerdata库中创建了wu2表)   SLAVE库:   空空如也   1、将MASTER库的数据库导入到SLAVE库中 (1)使用mysqldump备份MASTER库 备份前最好将服务停…

    Docker 2023年4月12日
    00
  • 十、Docker容器:磁盘&内存&CPU资源限制实战

    inode1 192.168.31.101 —– docker version:Docker version 1.13.1, build cccb291/1.13.1 inode2 192.168.31.102 —– docker version:Docker version 19.03.8, build afacb8b(docker-ce) 二…

    Docker 2023年4月11日
    00
  • 修改 docker image 安装目录 (解决加载大image时报错:”no space left on device” )

    问题原因:出现此问题一般是 docker 根目录空间不足导致 解决方法:重新指定docker image 安装目录,当然确保你新指定的目录有足够的空间。 方法步骤: ##查看 docker 的根目录 [root@node2 k8s]# docker info | grep -i “docker root dir” WARNING: You’re not us…

    Docker 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部