Docker制作镜像的两种方式(在线制作和离线制作)

当我们使用Docker来管理应用程序时,我们需要制作镜像并将其上传到Docker仓库,以便在其他机器上部署该应用程序。Docker的镜像可以通过在线制作和离线制作两种方式来完成。下面将详细介绍这两种制作方式的过程,以及给出相应的示例说明。

在线制作镜像

在线制作镜像是指直接从Docker Hub上的公共镜像开始,修改配置并生成新的镜像。这种方式制作出来的镜像较小,适合于部署较为简单的应用程序。

下面是基于官方的Node.js镜像,制作一个Hello world应用程序的示例:

  1. 用以下命令获取Node.js的最新版本镜像。
$ docker pull node:latest
  1. 在本地创建一个文件夹,并在该文件夹中创建一个app.js文件,然后输入以下内容:
const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 在该文件夹中创建一个Dockerfile文件,并输入以下内容:
FROM node
WORKDIR /app
COPY . /app
EXPOSE 3000
CMD ["node", "app.js"]
  1. 在该文件夹中打开命令行工具,输入以下命令来构建镜像,并将镜像的名称设置为“hello-world”:
$ docker build -t hello-world .

在构建命令中的最后一个参数“.”指代当前目录,Dockerfile文件和app.js文件都应在该目录中。

  1. 镜像构建完成后,使用以下命令启动容器:
$ docker run -p 3000:3000 -d hello-world

其中,3000:3000参数表示将容器内部的3000端口映射到主机的3000端口,-d参数表示将容器置于后台运行。

  1. 最后,打开浏览器并输入“http://localhost:3000/”,应该可以看到显示“Hello World”的网页。

离线制作镜像

离线制作镜像是指基于一个空的Docker镜像,并离线安装包、库等依赖,最终生成一个完整的应用程序镜像。这种方式制作出来的镜像较大,但能够完全满足应用程序的部署需求。

下面是基于一个空的Ubuntu镜像,制作一个Node.js应用程序的示例:

  1. 在本地创建一个文件夹,并在该文件夹中创建一个app.js文件,然后输入以下内容:
const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 在该文件夹中创建一个Dockerfile文件,并输入以下内容:
FROM ubuntu:latest
MAINTAINER Your Name <you@example.com>
RUN apt-get update && apt-get -y install curl
RUN curl -sL https://deb.nodesource.com/setup_15.x | bash -
RUN apt-get install -y nodejs
WORKDIR /app
COPY . /app
EXPOSE 3000
CMD ["node", "app.js"]

使用apt-get命令来安装curl工具和Node.js环境。

  1. 在该文件夹中打开命令行工具,输入以下命令以构建镜像,并将镜像的名称设置为“node-hello-world”:
$ docker build -t node-hello-world .

在构建命令中最后一个参数“.”指代当前目录,Dockerfile文件和app.js文件都应在该目录中。

  1. 镜像构建完成后,使用以下命令启动容器:
$ docker run -p 3000:3000 -d node-hello-world

其中,3000:3000参数表示将容器内部的3000端口映射到主机的3000端口,-d参数表示将容器置于后台运行。

  1. 最后,打开浏览器并输入“http://localhost:3000/”,应该可以看到显示“Hello World”的网页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker制作镜像的两种方式(在线制作和离线制作) - Python技术站

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

相关文章

  • 如何自己搭建DockerHub实现过程解析

    下面我将详细讲解如何自己搭建DockerHub的完整攻略,包括以下两个示例: 使用Docker Compose搭建私有Docker Registry 部署Private Docker Registry并启用认证策略 使用Docker Compose搭建私有Docker Registry Docker Compose是Docker官方提供的一种编排工具,用于定…

    Docker 2023年5月16日
    00
  • Docker Hub运行原理及实现过程解析

    Docker Hub运行原理 Docker Hub是一个Docker镜像的集成、发布以及自动化构建的仓库平台。它是一个中央集中式存储库管理工具,允许用户基于Docker创建、存储和分享镜像,以及管理Docker容器。Docker Hub的运行原理可以分为以下几个步骤: 1)用户在Docker客户端中构建自己的Docker镜像,然后将其推送到Docker仓库中…

    Docker 2023年5月16日
    00
  • 大规模 IoT 边缘容器集群管理的几种架构-3-Portainer

    前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad 大规模 IoT 边缘容器集群管理的几种架构-3-Portainer ?️Reference:IoT 边缘计算系列文章 P…

    2023年4月9日
    00
  • Docker之开启远程访问的实现

    下面是Docker开启远程访问的实现攻略: 一、修改 Docker daemon 配置 默认情况下,Docker daemon 只监听本地 socket 连接。为了实现 docker 远程访问,我们需要修改 Docker daemon 的配置,监听网络请求。在 /etc/docker/daemon.json 中添加以下内容: { "hosts&qu…

    Docker 2023年5月16日
    00
  • docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph — cluster集群

    话不多说上菜:  现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph-node3 192.168.100.25  ceph-node5 #已经部署好一个ceph cluster 集群    四个 osd  三个mon   没有…

    Docker 2023年4月16日
    00
  • CentOS7安装docker 启动失败:Job for docker.service failed… 解决办法(转载)

    CentOS7安装docker 启动失败:Job for docker.service failed… 解决办法 在CentOS7安装docker后启动失败: 查看docker 版本,只有client,没有server。 解决:执行 vi /etc/sysconfig/selinux , 把 selinux 属性值改为disabled。然后重启系统,dock…

    Docker 2023年4月12日
    00
  • Docker端口映射的实现

    Docker端口映射的实现可以通过容器内指定端口映射到宿主机上来实现容器与宿主机之间的网络通信。以下是实现 Docker 端口映射的攻略: 1. 容器内指定端口 可以在 Dockerfile 中通过指定 EXPOSE 指令指定需要映射的端口。比如: FROM nginx:latest EXPOSE 80 这里的含义是将容器内的80端口映射到宿主机上,是一种暴…

    Docker 2023年5月16日
    00
  • 基于 Traefik 的 ForwardAuth 配置

    前言 Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。 Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS…)集成,并自动和动态地配置自己。 系列文章: 《Traefik 系列文章》 今天我们…

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