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日

相关文章

  • centos7 update docker

    yum erase docker docker-common docker-client docker-compose -y   编辑一个docker镜像源 vim /etc/yum.repos.d/docker.repo [dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.…

    Docker 2023年4月16日
    00
  • docker上传镜像到harbor镜像仓库

    1. 登陆docker服务器绑定hosts [root@docker ~]# vim /etc/hosts [root@docker ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost loc…

    Docker 2023年4月16日
    00
  • docker容器内修改文件

    1、找到容器对应的ID 使用docker ps命令找到对应的镜像id 2、根据容器id进入到对应文件夹 执行命令:docker exec -it 镜像id /bin/bash 3、进入对应目录(以MySQL为例) 执行命令cd /etc/mysql 4、下载vim 这里要下载vim,不然无法对文件进行修改 具体执行如下两个命令:apt-get update、…

    Docker 2023年4月13日
    00
  • K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别

    背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。 弃用 Docker 带来的,可能是一系列的改变,包括不限于: 容器镜像构建工具 容器 CLI 容器镜像仓库 容器运行时 专题文章《K8S 1.20 弃用 Docker 评估》会从多方面分…

    Docker 2023年4月9日
    00
  • 教你使用docker查看运行中的容器

    下面是关于如何使用Docker查看运行中容器的攻略。 简介 Docker是一种流行的容器化工具,它可以帮助我们轻松创建、部署和管理容器。 在Docker中,容器是运行中的实例。如果我们想查看这些运行中的容器,可以使用Docker CLI或Docker API来进行操作。 下面我将详细介绍如何使用Docker CLI查看运行中的容器。 步骤 步骤1:启动容器 …

    Docker 2023年5月15日
    00
  • 教你如何通过 SSH 连接到 Docker 容器

    下面我将为你详细介绍如何通过 SSH 连接到 Docker 容器的完整攻略。 1. 在容器内安装 SSH 服务 首先,在容器内安装 SSH 服务。这里以 Ubuntu 为例,打开容器的终端,运行以下命令: apt-get update && apt-get install -y ssh 安装完成后,运行以下命令来启动 SSH 服务: serv…

    Docker 2023年5月15日
    00
  • 一篇文章让你搞清楚docker常用命令

    一篇文章让你搞清楚docker常用命令 Docker是一个流行的容器化平台,通过使用Docker,我们可以方便快捷地构建和部署应用程序。在Docker中,我们可以使用一些常用的命令来管理容器,镜像以及网络等。在本文中,我们将详细讲解Docker常用的命令以及示例说明。 命令说明 以下是Docker常用的命令: 容器相关命令 docker run:创建并启动一…

    Docker 2023年5月16日
    00
  • Docker: docker image常用命令实战

    #docker列出镜像[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 881bd08c0b08 6 days ago 109MB#docker:查看镜像名为nginx的镜像历史[root@192 ~]# docker history nginxIMAGE …

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