进击云原生

V2

2022/08/31阅读:22主题:山吹

在 Docker Compose 中重建 Docker 容器

在 Docker Compose 中重建 Docker 容器

1、概述

在本教程中,我们将看到如何使用docker-compose独立于其他容器重建容器。

2. 问题的呈现

让我们定义一个包含两个容器的 docker-compose.yml配置文件:一个将引用最新的ubuntu映像,另一个将引用最新的alpine映像。我们将为每个带有tty: true 的伪终端添加伪终端,以防止容器在启动时直接退出:

version: "3.9"
services:
  ubuntu:
    image: "ubuntu:latest"
    tty: true
  alpine:
    image: "alpine:latest"
    tty: true

现在让我们构建容器并启动它们。我们将使用带有-d 选项的docker-compose up 命令让它们在后台运行:

$ docker-compose up -d

Container {folder-name}-alpine-1  Creating
Container {folder-name}-ubuntu-1  Creating
Container {folder-name}-ubuntu-1  Created
Container {folder-name}-alpine-1  Created
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-alpine-1  Starting
Container {folder-name}-alpine-1  Started
Container {folder-name}-ubuntu-1  Started

我们可以快速检查我们的容器是否按预期运行:

$ docker-compose ps
NAME                         COMMAND             SERVICE             STATUS              PORTS
{folder-name}-alpine-1   "/bin/sh"           alpine              running
{folder-name}-ubuntu-1   "bash"              ubuntu              running

现在,我们将了解如何在不影响alpine 容器的情况下重建和重新启动ubuntu容器。

3. 独立重建和重启容器

将容器的名称添加到docker-compose up命令就可以了。我们将在启动容器之前添加构建选项来构建镜像。我们还将添加force-recreate标志,因为我们没有更改图像:

$ docker-compose up -d --force-recreate --build ubuntu
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

正如我们所见,ubuntu 容器被重建并重新启动,对alpine容器没有任何影响。

4.如果容器依赖于另一个容器

现在让我们稍微更新一下 docker-compose.yml文件,使ubuntu容器依赖于alpine容器:

version: "3.9"
services:
  ubuntu:
    image: "ubuntu:latest"
    tty: true
    depends_on:
      - "alpine"
  alpine:
    image: "alpine:latest"
    tty: true

我们将停止以前的容器并使用新配置从头开始重建它们:

$ docker-compose stop
Container {folder-name}-alpine-1  Stopping
Container {folder-name}-ubuntu-1  Stopping
Container {folder-name}-ubuntu-1  Stopped
Container {folder-name}-alpine-1  Stopped

$ docker-compose up -d
Container {folder-name}-alpine-1  Created
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-alpine-1  Starting
Container {folder-name}-alpine-1  Started
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

在这种情况下,我们需要添加no-deps选项来明确告诉docker-compose不要重新启动链接的容器:

$ docker-compose up -d --force-recreate --build --no-deps ubuntu
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

5. 结论

在本教程中,我们了解了如何使用docker-compose重建容器。

与往常一样,代码可在 GitHub 上获得。

译自:https://www.baeldung.com/rebuild-docker-container-compose/ 译者:#公众号:进击云原生

分类:

后端

标签:

运维部署

作者介绍

进击云原生
V2

公众号:进击云原生