Dockerコンテナ内のファイルをコピーするにはどうすればいいですか?


開始前
あるプロジェクトコンテナは、htmlとpdfファイルの変換を処理するためにwkhtmltopdfパッケージを追加する必要があります.デフォルトの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

くりを一つあげる
1 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

2コンテナ内のファイルのバックアップ
docker cp crm-test:/etc/apt/sources.list /tmp/sources.list.bak

このコマンドは、コンテナ内のsources.listファイルを、ホストの/tmp/ディレクトリにコピーします.
3コンテナ内のsources.listファイルを置換
docker cp sources.list crm-test:/etc/apt/sources.list

逆にこのコマンドは、ホスト上のファイルをコンテナにコピーします.
4検証
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

5 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ファイルではdockerミラーをカスタマイズできます.

  • 参考記事
    doker&k8s Qun [703906133]