Docker 镜像和容器的区别详解

Docker 镜像和容器的区别详解

在使用 Docker 时,经常会涉及到 Docker 镜像和容器的概念。这两个概念的理解对于正确使用 Docker 来说是非常重要的。本文将详细讲解 Docker 镜像和容器的区别及其使用方法。

Docker 镜像

Docker 镜像是一种可执行软件包,其中包含了运行应用程序所需的所有内容:代码、库、环境变量和依赖项。Docker 镜像可以看作是应用程序和其依赖关系的静态副本。Docker 镜像可以从 Docker Hub 或自己构建生成。

Docker 镜像的构建

Docker 镜像的构建可以有以下几种方法:

  • 从 Dockerfile 构建

在 Dockerfile 中定义 Docker 镜像的配置信息,然后使用 docker build 命令构建出镜像。例如,下面是一个简单的 Dockerfile 示例:

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y python3
COPY . /app
WORKDIR /app
CMD ["python3", "app.py"]

其中 FROM 指定了使用的镜像基础,RUN 执行 shell 命令,COPY 将本地文件复制到镜像中,WORKDIR 设置工作目录,CMD 定义容器启动后要运行的命令。

  • 从现有镜像中构建

可以使用 docker pull 命令从 Docker Hub 上下载已存在的镜像,然后使用 docker tag 命令给镜像重新命名。例如:

$ docker pull nginx:latest
$ docker tag nginx:latest my-nginx:latest

Docker 镜像的管理

Docker 镜像的管理可以有以下几种方法:

  • 查看镜像

使用 docker images 命令可以列出当前所有镜像:

$ docker images
  • 删除镜像

使用 docker rmi 命令可以删除指定的镜像:

$ docker rmi my-nginx:latest

Docker 容器

Docker 容器是 Docker 镜像的运行实例,可以看作是 Docker 镜像的一个进程。容器提供了一个隔离的运行环境,多个容器可以以隔离的方式在同一主机上运行。

Docker 容器的创建

Docker 容器的创建可以有以下几种方法:

  • 使用 docker run 命令

使用 docker run 命令可以创建并运行一个容器。例如:

$ docker run -it --name my-container ubuntu:18.04 /bin/bash

其中 -it 参数表示使用交互模式创建容器,--name 参数指定容器名,ubuntu:18.04 指定所使用的镜像,在容器中运行 /bin/bash 命令。

  • 使用 docker createdocker start 命令

使用 docker create 命令创建容器,使用 docker start 命令启动容器。例如:

$ docker create --name my-container ubuntu:18.04 /bin/bash
$ docker start -a my-container

其中 -a 参数表示附加到容器标准输出,使我们可以查看容器的输出。

Docker 容器的管理

Docker 容器的管理可以有以下几种方法:

  • 查看容器

使用 docker ps 命令可以列出正在运行的容器:

$ docker ps

使用 docker ps -a 命令可以列出所有容器。

  • 停止容器

使用 docker stop 命令可以停止指定的容器:

$ docker stop my-container
  • 删除容器

使用 docker rm 命令可以删除指定的容器:

$ docker rm my-container

Docker 镜像和容器的区别

Docker 镜像和容器的关系类似于面向对象编程中的类和实例。镜像是一个静态的程序集,相当于类,容器是基于镜像创建的动态实例,相当于实例。因此,Docker 镜像和容器其实是两个不同的概念。

使用 Docker 镜像来创建 Docker 容器。镜像是一个静态的程序集,包含构建应用程序和依赖所需的所有内容。镜像只读,无法修改。可以使用不同的镜像来创建多个容器。

Docker 容器是 Docker 镜像的运行实例。容器可以被创建、启动、停止、删除。容器可以使用所依赖的 Docker 镜像中的程序和工具,也可以与其他容器和主机交互。

示例说明

示例1:从Dockerfile构建Docker镜像

以下是一个简单的示例,介绍如何从 Dockerfile 构建 Docker 镜像:

  1. 首先在本地创建一个名称为 docker-demo 的空文件夹,用于存放 Dockerfile 和应用程序代码。

  2. docker-demo 文件夹中创建一个名为 Dockerfile 的文件,文件中的内容如下:

FROM node:12
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

该 Dockerfile 使用 Node.js 12 作为基础镜像,在 /app 目录下创建工作目录并复制应用程序文件,安装所需的依赖项,然后设置容器的默认启动命令为 npm start

  1. docker-demo 文件夹中创建一个名为 package.json 的文件,并将以下内容复制到其中:
{
  "name": "docker-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  }
}

该文件定义了应用程序名称、版本号、描述等信息,同时定义了开启应用程序所需的依赖包(这里仅包含 Express.js)。

  1. docker-demo 文件夹中创建一个名为 index.js 的文件,并将以下内容复制到其中:
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

该文件用于定义一个简单的 Express.js 应用程序,监听端口 3000,并在打开浏览器访问 http://localhost:3000 时向浏览器返回 "Hello World!"。

  1. 执行以下命令,使用以上代码构建 Docker 镜像:
$ cd /path/to/docker-demo
$ docker build -t my-docker-demo .

其中 -t 参数指定镜像名称,并将镜像名称设置为 my-docker-demo

  1. 执行以下命令,使用以上镜像启动一个容器:
$ docker run -d --name my-docker-demo -p 3000:3000 my-docker-demo

其中 -d 参数表示使用后台模式运行容器,--name 参数指定容器名称,-p 参数将容器的 3000 端口映射到主机的 3000 端口。

  1. 打开浏览器访问 http://localhost:3000,可以看到 "Hello World!" 输出。

示例2:使用 Docker Compose 同时启动多个 Docker 容器

以下是一个简单的示例,介绍如何使用 Docker Compose 同时启动多个 Docker 容器:

  1. 创建一个名称为 docker-compose-demo 的新文件夹,并在其中创建一个名为 docker-compose.yml 的文件。

  2. docker-compose.yml 文件中定义两个服务:

version: "3"
services:
  web:
    build: ./
    ports:
      - "80:80"
  db:
    image: mariadb:10.4
    environment:
      MYSQL_ROOT_PASSWORD: example

其中 web 服务使用当前目录下的 Dockerfile 来构建镜像,将容器的 80 端口映射到主机的 80 端口;db 服务使用 mariadb:10.4 镜像,并定义了 MySQL 的 root 密码为 example

  1. 在当前目录下创建一个名为 index.html 的文件,并将以下内容复制到其中:
<!DOCTYPE html>
<html>
<head>
  <title>Docker Compose Demo</title>
</head>
<body>
  <h1>Hello from Docker Compose!</h1>
</body>
</html>

这是一个简单的 HTML 页面,用于在浏览器中测试 web 服务。

  1. 执行以下命令,使用 Docker Compose 启动服务:
$ docker-compose up -d

其中 -d 参数表示使用后台模式运行服务。

  1. 在浏览器中访问 http://localhost,可以看到 "Hello from Docker Compose!" 输出。

  2. 执行以下命令,停止并删除服务:

$ docker-compose down

以上就是 Docker 镜像和容器的区别详解及其使用方法的完整攻略,同时包含了两个简单的示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker 镜像和容器的区别详解 - Python技术站

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

相关文章

  • Docker 使用国内镜像仓库的方法

    为了使用国内Docker镜像仓库,需要进行如下的几个步骤: 在本地安装 Docker 如果未安装 Docker, 需要先进行安装,安装教程参考 Docker 官方文档。 登录或注册阿里云账号 使用国内镜像仓库,需要登录或注册阿里云账号。在阿里云的控制台页面上可以进行账号注册或登录。 创建镜像加速器 登录阿里云控制台后,转到镜像加速器(容器镜像服务),并创建服…

    Docker 2023年5月16日
    00
  • Grafana 系列文章(十五):Exemplars

    Exemplars 简介 Exemplar 是用一个特定的 trace,代表在给定时间间隔内的度量。Metrics 擅长给你一个系统的综合视图,而 traces 给你一个单一请求的细粒度视图;Exemplar 是连接这两者的一种方式。 假设你的公司网站正经历着流量的激增。虽然超过百分之八十的用户能够在两秒内访问网站,但有些用户的响应时间超过了正常水平,导致用…

    2023年4月10日
    00
  • Docker 最常用的镜像命令和容器命令详解

    Docker 最常用的镜像命令和容器命令详解 Docker 是一款轻量级、快速、强大的容器化平台,它为应用程序的部署和管理提供了便利。Docker 最常用的操作是与镜像和容器相关的命令,本文将详细讲解 Docker 的镜像命令和容器命令,并给出相关示例说明。 镜像命令 获取镜像命令 要使用 Docker 的镜像命令,我们首先需要获取一个 Docker 镜像。…

    Docker 2023年5月16日
    00
  • Ubuntu下安装配置Docker的教程详解

    Ubuntu下安装配置Docker的教程详解 安装Docker 更新apt软件包: sudo apt-get update 安装Docker的前置软件包: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 添加Docker的GPG密…

    Docker 2023年5月15日
    00
  • 详解Docker 容器基础系统镜像打包

    下面是详解Docker 容器基础系统镜像打包的完整攻略,包含两条示例说明。 1. Docker 容器基础系统镜像打包攻略 1.1. 确定镜像名称和版本 首先,我们需要确定要打包的镜像名称和版本。 我们可以在 Docker Hub 上找到名为 ubuntu 的官方镜像,命令为: docker pull ubuntu 这里,我们将以 ubuntu 镜像为例,创建…

    Docker 2023年5月16日
    00
  • Docker配置WebSSH的实现

    首先,我们需要了解一下Docker和WebSSH的相关知识: Docker是一种容器化技术,可以将应用程序及其依赖项打包成容器,实现应用程序在不同环境间的快速移植和部署。 WebSSH是一种基于Web的SSH客户端,可以通过Web浏览器访问SSH服务器,并在网页上使用SSH终端。 实现Docker配置WebSSH的过程如下: 准备工作 首先,你需要确定使用的…

    Docker 2023年5月15日
    00
  • docker互联二 link

    通过docker run命令的–link参数可以让容器之间通过连接(linking)系统进行交互。参数格式:–link name:alias ,name是要链接的容器名称, alias是此连接的别名。 容器的连接系统会依据容器的名称,创建容器之间一个安全隧道,在启动容器的时候不使用-p和-P参数(不用映射端口到宿主主机),从而避免了暴露端口到外部网络。 …

    Docker 2023年4月16日
    00
  • 安装docker

    docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极…

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