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安装部署,阿里源加速

    docker所依赖的包环境,为了方便不报错,推荐执行 [root@liujunjun ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 设置stable镜像仓库                           [root@liujunjun ~]# yum-config-man…

    Docker 2023年4月11日
    00
  • Docker容器跨主机通信之:直接路由方式

    主机1的IP地址为:192.168.1.221 主机2的IP地址为:192.168.1.222 为主机1上的Docker容器分配的子网:172.17.1.0/24 为主机2上的Docker容器分配的子网:172.17.2.0/24 这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。 综上所述,数据包在两个容器间的传递过…

    Docker 2023年4月11日
    00
  • Docker搭建VSLAM环境

    VSLAM 1、在Win10上Docker安装openvSLAM     第一步:开始-设置(拉到最下面:程序和功能)-打开启用和关闭Window功能-选中Hyper-H     第二步:下载Docker:https://store.docker.com/editions/community/docker-ce-desktop-windows 下载安装包:2…

    Docker 2023年4月11日
    00
  • 在CentOS7中安装Docker并开一台CentOS8的容器

    第一步:首先安装docker yum install tmux yum install docker systemctl enable docker systemctl start docker   第二步:启动一台centos8 docker pull centos:8 docker rm -f centos8 docker run -itd –name…

    Docker 2023年4月11日
    00
  • Rancher 系列文章-Rancher 对接 Active Directory 实战

    概述 只要是个公司,基本上都有邮箱和 AD(Active Directory). 在 AD 里,已经有了: 用户 账号密码 邮箱 用户组 组织架构 所以对于一些仅限于本公司一定范围内人员使用的管理或后台或运营运维类系统,其实是非常适合对接 AD 来进行认证、分组,以及根据分组来进行权限分配的。 对于 Rancher,假设使用者只会有这么几类: 管理员:运维部…

    2023年4月10日
    00
  • docker 部署 gitlab 升级指南

    如果已知,跳过此步骤第一种: docker exec -it gitlab /bin/bash cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 第二种:登录到gitlab,在Admin Area可查看。 2.备份一下,以防万一 gitlab-rake gitlab:backup:create 备份文…

    Docker 2023年4月11日
    00
  • 镜像使用、容器连接

    Docker镜像使用 列出镜像列表、获取一个新的镜像 REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小 -i: 交互式操作。 -t: 终端。 ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。 /bin/bash:放在镜像名后的是命…

    Docker 2023年4月8日
    00
  • 解决docker与vmware的冲突问题

    解决 Docker 与 VMware 的冲突问题,需要经过以下几步: 1. 确认是否存在冲突 首先在使用前,我们需要确认是否存在冲突,可以输入以下命令查看当前是否存在已经启动的 vmware 大写堆栈: lsmod | grep -i vmw 如果输出了类似 vmw_vsock_vmci_transport 或者 vmw_vmci 的关键词,则说明存在已经启…

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