迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 > Docker >

将文件从主机复制到 Docker 容器

作者:迹忆客 最近更新:2023/03/22 浏览次数:

本文将讨论和演示我们可以用来将文件从主机传输到 Docker 中正在运行的容器的方法。

使用 docker cp 将文件从主机复制到 Docker 容器

docker cp 命令是我们可以用来将文件和目录从主机复制到 Docker 容器的最简单方法之一。我们将使用 Ubuntu 20.4.5 和当时最新版本的 Docker,即 v 19.03。

语法:

docker cp {options} PATH_HOST CONTAINER:PATH_TO_CONTAINER 

其中,

  • PATH_HOST 指定我们要复制的文件在主机上的源路径。
  • PATH_TO_CONTAINER 是我们要在容器上存储文件的目标路径。

例子:

我们将从创建目标容器开始。我们将在本文中使用官方 Nginx 镜像,我们可以通过运行以下命令从 Docker 桌面或终端拉取该镜像。

$ docker pull nginx

输出:

Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

我们使用下面的命令来验证我们是否成功地从注册表中拉取了镜像。

$ docker images

输出:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    c316d5a335a5   2 weeks ago   142MB

我们现在可以创建一个容器。使用 run 命令,我们将创建一个容器并以分离模式部署它,以监听外部端口 8080 和内部端口 80。

下面的命令将使用 Nginx 基础镜像创建一个容器。

$ docker run -d -p 8080:80 nginx

我们可以通过运行 docker ps -a 命令来验证我们是否已成功创建新容器。这将列出我们最近和过去制作的所有容器,以及它们的容器 ID 和各自的镜像。

我们可以按照此处所示执行此操作。

docker ps -a

输出:

CONTAINER ID   IMAGE   COMMAND                  CREATED              STATUS              PORTS                  NAMES
0c57de10362b   nginx   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   lucid_booth

在使用 docker cp 命令之前,我们需要创建一个文件,我们将从主机复制到我们刚刚创建的容器。

我们将创建一个名为 new_file.txt 的文件,并使用 touch 命令将其存储在主目录中。

这是执行此操作的命令。

$ touch new_file.txt

我们可以查看目录以确保我们已使用 ls 命令成功创建文件,如下所示。

isaac@DESKTOP-HV44HT6:~$ ls
new_file.txt

当然,new_file.txt 是一个空文件;但是,我们希望专注于使用 docker cp 命令将其从主机移动到我们之前创建的容器。

然后我们将此文件复制到我们创建的容器中。

$ docker cp new_file.txt 0c57de10362b:/usr/share

就像这样,我们将 new_file.txt 复制到文件夹/usr/share 下 ID 为 0c57de10362b 的容器中。

我们可以通过使用命令 docker exec-it 标志以交互方式运行命令通过交互式 SSH 会话进入正在运行的容器来确定这一点。

$ docker exec -it 0c57de10362b /bin/bash

现在我们已经登录到容器中,我们要列出文件以验证我们是否已将此文件复制到此容器中。我们可以再次使用 ls 命令,但指定我们要访问的文件夹。

root@0c57de10362b:/# ls -lh /usr/share/

输出:

查看从主机复制到 docker 容器中的文件

同样,我们也可以通过简单地更改要从目录中读取的文件的位置来复制包含许多文件的目录,如下所示。

$ docker cp src/directory/. container-id:/target_location/directory

docker cp 命令虽然易于使用,但有一些限制。它的语法与 Unix cp 命令不同,只支持有限数量的标签。

此外,这只能用于将文件从主机复制到容器,而不是容器之间。

使用 docker volume 将文件从主机复制到 Docker 容器

在容器之间复制文件的更好方法是通过 docker volume

我们可以在容器创建过程中使用 -v-mount 标志中的任何一个将包含我们想要复制的文件的卷附加到容器。

要在 Docker 中使用卷,我们首先使用 docker volume 命令创建一个,如下所示。

$ docker volume create volume_one

使用 docker volume ls,我们可以验证我们是否已成功创建卷。这将列出现在和过去创建的卷的名称以及驱动程序的名称。

isaac@DESKTOP-HV44HT6:~$ docker volume ls
DRIVER    VOLUME NAME
local     volume_one

现在我们已经创建了一个卷,下一步涉及使用 run 命令创建一个新容器并附加我们使用 -v 标志创建的卷。

-v 标志允许我们将新卷附加到我们创建的容器。我们将使用最新版本的 Nginx 基础镜像制作这个容器。

$ docker run -d -v volume_one:/app nginx:latest
f2457d3eb8fe14645b9e3938017c02c46a657c9ad3323ff4c03924d2fddd7046

我们可以使用 Docker 检查命令返回有关 Docker 对象的低级信息。我们将调查我们的卷是否已成功附加到我们创建的容器。

由于我们没有为这个容器分配任何名称,我们将使用容器 ID 来检查它。我们将使用最新的容器 ID 而不是较早的容器 ID。

$ docker ps -a

输出:

CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                  NAMES
f2457d3eb8fe   nginx:latest   "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes       80/tcp                 brave_kirch
0c57de10362b   nginx          "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp   lucid_booth

我们现在可以使用这个容器 ID 来检查容器。

$ docker inspect f2457d3eb8fe

输出:

检查 docker 容器中已安装的卷

docker volume 命令的优点之一是创建与多个容器共享的单个目录。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中托管 Docker Internal

发布时间:2023/04/18 浏览次数:139 分类:Docker

Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。

在 Docker 中设置工作目录

发布时间:2023/04/18 浏览次数:82 分类:Docker

在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。

在 Docker 容器中公开多个端口

发布时间:2023/04/18 浏览次数:143 分类:Docker

Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。

将用户添加到 Docker 容器

发布时间:2023/04/18 浏览次数:187 分类:Docker

在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。

使用 Docker 网络主机命令

发布时间:2023/04/18 浏览次数:112 分类:Docker

在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。

清除 Docker 容器日志

发布时间:2023/04/18 浏览次数:181 分类:Docker

本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。

Docker 中的守护进程日志位置

发布时间:2023/04/18 浏览次数:175 分类:Docker

本文将讨论守护进程事件以及我们通常可以在哪里找到每个操作系统 (OS) 的守护进程日志。

Dockerfile 中 COPY 和 ADD 命令的区别

发布时间:2023/04/18 浏览次数:158 分类:Docker

在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。本文介绍了 Dockerfile 中 COPY 和 ADD 命令之间的区别。

Docker 中的 --rm 标志

发布时间:2023/04/18 浏览次数:77 分类:Docker

本文介绍如何在 docker 中使用 --rm 命令。 此外,它还提供了使用命令的优势。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便