Docker之中 docker-compose的使用,镜像、容器的导出
Docker之中 docker-compose的使用,镜像、容器的导出
一. docker-compose的使用
-
首先确保已经安装了 Docker 和 Docker Compose。可以通过在命令行中输入
docker --version
和docker-compose --version
来检查版本信息。如果没有安装,则需要根据官方文档的指引进行安装。 -
创建一个名为
docker-compose.yml
的 YAML 配置文件,并将其放置在项目的根目录下。该文件定义了所需的服务、网络等设置。 -
编辑
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
目录进行共享。
-
打开命令行界面,切换到包含
docker-compose.yml
文件的目录。然后运行以下命令来启动容器:
docker-compose up
这会自动构建并启动容器。如果之前未拉取相关镜像,则会从 Docker Hub 或者本地镜像库获取。
-
若想在后台模式下运行容器,可以使用
-d
参数:docker-compose up -d
此时容器将在后台持续运行。
-
若要停止正在运行的容器,可以使用以下命令:
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.yaml
和file2.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