Docker之中 docker-compose的使用,镜像、容器的导出

Docker之中  docker-compose的使用,镜像、容器的导出

 

一. docker-compose的使用

要使用Docker Compose来运行一个容器,需要按照以下步骤进行操作:
  1. 首先确保已经安装了 Docker 和 Docker Compose。可以通过在命令行中输入 docker --version 和 docker-compose --version 来检查版本信息。如果没有安装,则需要根据官方文档的指引进行安装。 

  2. 创建一个名为 docker-compose.yml 的 YAML 配置文件,并将其放置在项目的根目录下。该文件定义了所需的服务、网络等设置。 

  3. 编辑 docker-compose.yml 文件,添加所需的容器配置。示例配置如下:

version: '3'
services:
  mycontainer:
    image: your_image_name
    ports:
      - "8080:80"
    volumes:
      - ./data:/app/data

上面的配置表明我们希望运行一个名为 mycontainer 的容器,使用特定的镜像(your_image_name),将主机的 8080 端口映射到容器内部的 80 端口,同时将当前目录下的 ./data 目录与容器内的 /app/data 目录进行共享。

  1. 打开命令行界面,切换到包含 docker-compose.yml 文件的目录。然后运行以下命令来启动容器:

docker-compose up

这会自动构建并启动容器。如果之前未拉取相关镜像,则会从 Docker Hub 或者本地镜像库获取。

  1. 若想在后台模式下运行容器,可以使用 -d 参数:

    docker-compose up -d

    此时容器将在后台持续运行。

    1. 若要停止正在运行的容器,可以使用以下命令:

    docker-compose down

     

    这将停止并删除所有由 docker-compose.yml 管理的容器及其相关资源。

    注意事项:

    • 在运行 docker-compose up 命令之前,确保已经完成了必要的镜像构建工作,否则会导致错误。

    • 如果修改了 docker-compose.yml 文件,需要重新运行 docker-compose up 才能应用更改

     

docker compose运行其中一个容器

docker-compose up -d XXX

 

Docker Compose可以使用多个YAML文件来定义不同的服务。

要在Docker Compose中使用多个YAML文件,需要将这些文件放置在相同目录下,并且通过--file参数指定所有的YAML文件路径。

示例命令如下:

$ docker-compose --file file1.yaml up -d
$ docker-compose --file file2.yaml up -d

其中,file1.yamlfile2.yaml分别为两个不同的YAML文件名称。

此外,还可以使用-f或者--project-directory参数来指定项目根目录,从而更加清晰地组织和管理多个YAML文件。

 

 

二. 导出镜像文件

通过以下命令导出镜像文件为一个压缩文件

docker save -o target.tar nginx:latest

 

 

通过以下命令还原镜像文件

docker load < target.tar

 

 

三. 导出docker-compose文件

 

问题:docker-compose.yml 文件丢失

解决办法:docker的事用docker解决

背景:很多容器都是docker run运行的,想要转换为docker-compose.yml

1.测试备份:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock dockerproxy.com/red5d/docker-autocompose:latest 容器名称或ID

2.自动化脚本:

编写自动化脚本,每天循环备份,默认最近3天

#!/bin/bash

# https://github.com/Red5d/docker-autocompose

# 定义备份根目录
BACKUP_ROOT_DIR="/volume3/docker/backup"
EXPORT_DATE="$(date +%Y-%m-%d)"
TODAY_DIR="${BACKUP_ROOT_DIR}/${EXPORT_DATE}"

# 创建当天日期的文件夹
mkdir -p "${TODAY_DIR}"

# 计算3天前的日期
THREE_DAYS_AGO_DATE="$(date --date='2 days ago' +%Y-%m-%d)"

# 删除3天前及其之前的所有日期的文件夹
for dir in "${BACKUP_ROOT_DIR}/"*/; do
  dir_name="$(basename "${dir}")"
  if [[ "${dir_name}" < "${THREE_DAYS_AGO_DATE}" ]]; then
    echo "删除过时的备份文件夹: ${dir_name}"
    rm -rf "${dir}"
  fi
done

# 获取正在运行的容器列表
RunningContainers=($(docker ps --format "{{ .Names }}"))

# 遍历容器列表,为每个容器创建一个备份文件
for container_name in "${RunningContainers[@]}"; do
  BACKUP_FILE="${TODAY_DIR}/docker-autocompose_${EXPORT_DATE}_${container_name}.yaml"
  echo "正在导出容器配置到 ${BACKUP_FILE},容器名称: ${container_name}"

  # 创建 Docker Compose 文件并添加注释
  echo "# 由 Red5d/docker-autocompose 生成的 docker-compose 文件" > "${BACKUP_FILE}"
  echo "# 包含的容器: ${container_name}" >> "${BACKUP_FILE}"

  # 导出单个容器的配置到文件
  docker run --rm -v /var/run/docker.sock:/var/run/docker.sock dockerproxy.com/red5d/docker-autocompose:latest "${container_name}" >> "${BACKUP_FILE}"
done

 

 

 

 

 

引用:https://blog.csdn.net/wangrui1573/article/details/133122655

posted @ 2024-02-02 09:33  无心々菜  阅读(2823)  评论(0编辑  收藏  举报