Docker cp 命令
2017-03-17 by dongnan
开始之前
某个项目容器需要添加 wkhtmltopdf
软件包用于处理 html
与 pdf
文件转换,
由于默认的 apt
源服务器在国外,使用 apt
安装 wkhtmltopdf
时下载速度只有感人的几kb/s
。
我们需要更换一个国内的 apt地址,例如使用 阿里云、等开源镜像站。debain 或 ubuntu 系统
apt 仓库配置保存在 /etc/apt/sources.list
配置文件中,我们可以替换容器中的这个文件。
环境描述
容器镜像: php:5.6-fpm
容器系统: debian 8 (jessie)
配置文件: /etc/apt/sources.list
Docker主机: Ubuntu Server 16.04
举个栗子
sources.list
创建 sources.list
文件,内容如下:
cat sources.list
deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
备份容器内的文件
docker cp crm-test:/etc/apt/sources.list /tmp/sources.list.bak
这个条命令将把容器内的 sources.list
文件,拷贝到宿主机上的 /tmp/
目录
替换容器内的文件
docker cp sources.list crm-test:/etc/apt/sources.list
相反这个条命令将把宿主机上文件拷贝到容器内
验证
阿里云 1.1mb/s
docker exec -ti crm-test apt-get update
Ign http://mirrors.aliyun.com jessie InRelease
# ...省略
Fetched 22.0 MB in 19s (1120 kB/s)
Reading package lists... Done
扩展
使用Dockerfile定制镜像
每次都要为容器添加 sources.list
文件实在是麻烦,我们可以优化一下把这个步骤定义在 Dockerfile
中例如:
head -n7 php/base/5.6/Dockerfile
# php-fpm:5.6
FROM php:5.6-fpm
MAINTAINER dongnan
# apt
COPY conf/sources.list /etc/apt/sources.list
命令帮助
docker cp --help
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy files/folders between a container and the local filesystem
Options:
-a, --archive Archive mode (copy all uid/gid information)
-L, --follow-link Always follow symbol link in SRC_PATH
小结
最后来总结下文章中的知识点
docker cp
子命令可以用来在容器与宿主机之间拷贝文件。- 拷贝文件时没有提示会直接替换目的文件,请提前做好备份工作。
- 对于容器的
sources.list
文件,可以使用Dockerfile
自定义镜像。