docker文件拷贝

向docker管理的“块”拷贝文件可以存在于三个时段(这里的块,可以指代镜像也可以指代运行实例。简单来说,即是docker管理的,程序员开发的,在容器中的东西)

(1)镜像生成之前

(2)实例运行起来之后

实际操作

(1)镜像生成之前

  即使用docker images 还不能查询到镜像时(一般是通过docker pull或docker build进行)

  (a)使用docker build命令可以通过编写Dockerfile,在其中使用COPY命令将指定目录下的文件、文件夹,组装容器。具体操作可以参照我写的博客:http://www.cnblogs.com/chendeming/p/8202477.html

  (b)使用docker import命令可以预先在导出的jar包里拷贝文件,这个比较不建议,有可能打乱docker导出的文件结构,造成一些不可预知的错误。

备注:若想修改原有镜像,可以在Dockerfile中以原有镜像为基础生成新的镜像,即使用Dockerfile里的From命令指定源镜像生成基础为原镜像。

(2)实例运行起来之后

  镜像运行起来后,运行实例相当于一个Linux系统,那么我们在拷贝文件的时候就可以有如下几种方式

  (a)使用docker自带的文件拷贝命令,管理运行实例(docker cp)    

    docker cp :用于容器与主机之间的数据拷贝。
    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    docker cp 96f7f14e99ab:/www /tmp/
    将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

    注意:这个命令在docker版本在1.8之前会报如下错误:Error: Path not specified,这是个bug,若docker版本在1.8之前,不要使用如上命令

  (b)将运行实例当Linux玩,使用docker exec -it 进入容器,在容器中挂载当前主机的磁盘(docker run -v),直接在共享磁盘中执行拷贝(linux之cp命令)

    docker运行命令中有容器端口映射选项docker -p,当然也有磁盘映射命令-v,例如可以用如下方式执行映射:

    命令格式:docker run -v 主机路径:运行实例路径 容器id

    命令样例:docker run -v /usr/chendeming/local:/user/docker/local aace28776

    备注说明:aace28776这个是docker容器的id,通过docker ps获取

 

  (c)将运行实例当Linux玩,使用docker exec -it 进入容器,在容器中使用linux命令scp命令进行拷贝

    Linux scp命令用于Linux之间复制文件和目录。scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

    命令格式:scp [可选参数] file_source file_target

    命令样例:scp /usr/chendeming/local/1.mp3 [email protected]:/usr/docker/local/1.mp3

    备注说明:从本地以root用户登录192.168.1.254服务器,对应磁盘

   

备注:

  docker exec -it <container_id> bash

  使用这个命令可以进入运行中的docker运行实例,最后这个bash是镜像启动时使用的脚本。通过docker ps 可以查询到这个脚本的实际名字,要因地制宜。

扩展参照:

  http://blog.csdn.net/yangzhenping/article/details/43667785

  https://segmentfault.com/a/1190000007304063

  http://www.runoob.com/linux/linux-comm-scp.html

原文地址:https://www.cnblogs.com/chendeming/p/8379631.html

时间: 2024-08-30 11:33:22

docker文件拷贝的相关文章

手写redis的docker文件,通过docker-compose配置redis

在前面一遍随笔,配置的是mysql主从的docker-compose配置.今天我们来学习配置编排容器redis. 准备环境: docker 18.06.1-ce docker-compose 1.23.0-rc3 redis最新版 开始: 1.首先我们创建下docker文件的目录,并新建Dockerfile.redis-entrypoint.sh.redis.conf 如下图: Dockerfile文件内容如下: FROM redis:latest #指定启动容器的镜像 MAINTAINER c

文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作

一.基本目标 使用Java完成如下的操作: 把一个文件夹内的所有文件拷贝的另一的文件夹,例如,在F盘中有a与b两个文件夹: f:/a里面有一堆文件,运行Java程序之后就会全部复制到f:/b,并且完成重命名,在所有文件之前加rename_的前缀,如果里面有文件夹,则文件夹不重命名,里面的文件进行重命名,同样在所有文件之前加rename_的前缀: 二.制作过程 1.首先主函数非常简单,就是调用了上面FileTest类中的copyFolder函数 public class FileCopy { pu

使用IO流实现对特殊文件及文件夹中文件拷贝到指定文件中

本程序可以实现将自己指定的文件类型的文件拷贝到自己想放的文件中,比如一个文件夹中有很多文件,那么我们想把所有的TXT文件拷贝到自己指定的文件中.(靠背笔记) package com.blueZhang; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept

apk安装时把程序附带文件拷贝到手机指定目录下

项目已搞定,今天把.apk文件弄到另外一台非调试手机上用,发现一个问题.因为要画图,所以绘图的点的数据保存在一个.txt的文本文件中,上次直接把它用usb传到指定文件夹下的,但是明显不科学,因为用户下载了你的.apk文件,你却告诉他,还要把这个文本文件拷贝到指定的文件夹下,所以,我就要解决这个问题,就是把文本文件打包在apk文件中,安装.apk时就让创建一个程序文件夹,然后把文本文件拷贝到这个目录文件夹里,用户运行程序,就可以绘图,不用再让他拷贝一份绘图的点的坐标的数据.同理,其实我这里还有设计

vc关于文件拷贝

单个文件的拷贝 system  针对单个文件 CopyFile  针对单个文件 /** @file_extension egg: .txt .png **/ void CopyFileToDir(CString source_dir, TCHAR* dest_dir, TCHAR* file_extension) { CString source, dest; source.Format("%s*%s", source_dir, file_extension); dest.Format

文件操作ofstream,open,close,ifstream,fin,依照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

Bash Shell 递归实现目录中文件拷贝

前言 今天工作中遇到了一个问题,如果将目录A中的文件拷贝到目录B中(前提目录B没有该文件),并保持文件在目录A的结构.项目重点如下: 需要在目录B中保持文件在目录A中的结构.假设A目录文件 A/test/1.txt,转移到目录B中应该是B/test/1.txt.同时还需要考虑目录B中是否存在test目录,多级目录就要考虑递归了.(还好,bash shell里写个目录递归遍历还是比较简单的.) 需要考虑A中文件是否在B中已经存在同名文件,如果存在,则不需要拷贝. 项目需求示例图如下: 实现 项目需

C# IO操作(四)大文件拷贝(文件流的使用)、文件编码

     大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一次性加载到内存中:事实上,内存也不允许这么干),所以在C#中出现了内存流这个东西.先看下面的内容,File类中的常用读取文件方法会将文件内容一次性全部加载到内存中: 1 string sPath = @"C:\Users\Chens-PC\Desktop\Nginx.txt"; 2 //F