Docker容器内部和外部的文件传输:docker cp命令详解

在使用Docker进行容器化部署时,有时我们需要将容器内部的文件或目录复制到宿主机上,或者将宿主机的文件复制到容器内部。Docker提供了docker cp命令来实现容器内部和外部的文件传输。

本文将详细介绍docker cp命令的用法,并通过示例代码演示如何实现容器内部和外部文件的传输。

1. docker cp命令概述

docker cp命令用于将文件或目录从容器内部复制到宿主机上,或者将宿主机上的文件或目录复制到容器内部。其基本语法如下:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

其中,CONTAINER表示容器的名称或ID,SRC_PATH表示容器内部的文件或目录路径,DEST_PATH表示宿主机或容器内部的目标路径。

2. 将容器内部文件复制到宿主机

使用docker cp命令将容器内部的文件复制到宿主机上非常简单。只需要指定容器名称或ID以及容器内部文件的路径,即可完成文件的复制。

下面是一个示例,演示如何将容器内部的/app/data.txt文件复制到宿主机的/home/user/目录下:

docker cp mycontainer:/app/data.txt /home/user/

上述命令将容器mycontainer内的/app/data.txt文件复制到宿主机的/home/user/目录下。如果目标路径不存在,会自动创建。

3. 将宿主机文件复制到容器内部

与将容器内部文件复制到宿主机相反,我们也可以使用docker cp命令将宿主机的文件复制到容器内部。

下面是一个示例,演示如何将宿主机的/home/user/data.txt文件复制到容器mycontainer内的/app/目录下:

docker cp /home/user/data.txt mycontainer:/app/

上述命令将宿主机的/home/user/data.txt文件复制到容器mycontainer内的/app/目录下。

4. 示例代码演示

为了更好地理解docker cp命令的用法,我们来看一个示例代码。

4.1 宿主机文件复制到容器内部

首先,我们创建一个简单的Node.js应用,它读取/app/data.txt文件的内容并输出到控制台:

const fs = require('fs');

fs.readFile('/app/data.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('Data:', data);
});

然后,我们创建一个Dockerfile,用于构建容器镜像:

FROM node:alpine

COPY app.js /app/app.js
COPY data.txt /app/data.txt

CMD ["node", "/app/app.js"]

接下来,我们创建data.txt文件,并将它和app.js文件放在同一目录下。

然后,使用以下命令构建容器镜像并运行容器:

docker build -t myapp .
docker run -d --name mycontainer myapp

最后,我们使用docker cp命令将宿主机上的/home/user/data.txt文件复制到容器内部的/app/目录下:

docker cp /home/user/data.txt mycontainer:/app/

4.2 容器内部文件复制到宿主机

如果我们需要将容器内部的/app/data.txt文件复制到宿主机上,我们可以使用以下命令:

docker cp mycontainer:/app/data.txt /home/user/

5. 序列图

下面是一个使用docker cp命令将容器内部文件复制到宿主机的简单序列图:

sequenceDiagram
  participant 宿主机
  participant Docker