Docker 镜像和容器的区别详解

yizhihongxing

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安装SQL Server

    让我们来详细讲解如何快速通过 Docker 安装 SQL Server 的完整攻略。 步骤一:安装 Docker Docker 是一种常用的虚拟化技术,它可以让应用程序在不同的环境中无缝运行。在安装 SQL Server 之前,你需要先安装 Docker。 可以去 Docker 官网下载安装包,安装完成后,打开命令行工具验证 Docker 是否已经正确安装:…

    Docker 2023年5月16日
    00
  • docker 从本地拷贝文件

    1、找到docker的ID全称 docker inspect -f ‘{{.Id}}’ docker_name 2、执行拷贝命令 docker cp 本地文件路径 ID全称:docker路径 3、如果找不到docker路径可以进入docker执行pwd docker exec -it docker_name /bin/bashpwd  4、补充一下可以直接用…

    Docker 2023年4月16日
    00
  • Docker新旧版本号下载

    在 Docker 1.13.1.203 之后,直接是 Docker-ce 17.03.0 版本了。 并且版本号的命名方式也改了,以前都是那种常用的版本号命名方式,比如0.1、0.2、1.0之类的,现在分社区版和商业版后,版本号是『YY.MM-xx』的形式命名的,比如2019年10月发布的,版本号就是19.10。   下载Docker 1.13.1.203及以…

    Docker 2023年4月16日
    00
  • Docker Compose项目打包部署

    1.1 Docker Compose   1、什么是docker compose       1. Compose是一个定义和管理多容器的工具,使用Python语言编写。       2. 使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;       3. 然后一条命令管理所有服务,比如启动、停止、重启等。   …

    Docker 2023年4月13日
    00
  • WIN10下安装Docker的教程

    下面是WIN10下安装Docker的完整攻略: 步骤一:下载Docker 首先,在Windows官网上下载Docker Desktop for Windows(https://docs.docker.com/docker-for-windows/install/),根据版本选择合适的下载方式进行下载。 步骤二:安装Docker 下载完成后,双击.exe文件开…

    Docker 2023年5月16日
    00
  • Docker定制容器镜像的2种方法(推荐)

    关于“Docker定制容器镜像的2种方法”,我为你提供如下攻略: 一、概念解释 在Docker中,容器镜像是由一系列只读层组成的,它们都在初始化时被创建,而你在容器内进行的修改都是在一层新的可读写层中进行的。为了创建一个新的容器镜像,你可以利用Dockerfile文件中的指令构建一个新的可读写层,Docker还提供了另外两种构建镜像的方法,即通过“修改容器后…

    Docker 2023年5月16日
    00
  • Docker 中的容器完全解析

    首先,我们需要了解什么是Docker。Docker是一种容器化技术,它可以让开发者更加轻松、高效地打包、分发和部署应用程序。 Docker的核心概念是镜像和容器。镜像是一个只读的模板,它包含了一份完整的文件系统和运行该文件系统的必要配置。容器是由镜像创建的运行实例,容器可以被启动、停止、删除,可以与其他容器、主机进行网络连接。 下面我们来一步步了解Docke…

    Docker 2023年5月16日
    00
  • Docker 网络模式及配置方式

    下面是针对“Docker 网络模式及配置方式”的详细攻略。 什么是 Docker 网络模式? Docker 网络模式定义了容器如何互相连接,以及和外部网络交互的方式。包括以下常用的网络模式: host网络模式: 使用宿主机的网络栈。容器与宿主机平级,直接使用宿主机IP地址。 bridge(默认)网络模式: 通过虚拟网桥(docker0)将容器桥接到宿主机上。…

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