LoginSignup
0

More than 5 years have passed since last update.

docker コンテナの s3cmd をホスト側からいい感じに使う

Posted at

sekka1/docker-s3cmd: s3cmd in a Docker container はいちいちコンテナにログインして、/opt/main.sh を叩かなければならないのがだるかったので、ホスト側からあまりコンテナを意識せずに使えるようなやり方を考えてみた。

なお、下記ではアクセス先がニフティクラウド オブジェクトストレージになっていますが、少しいじれば他の S3 互換 API でも利用可能だと思います。

準備

まず Dockerfile 作成。
jwilder/dockerize を使って、s3cmd が読み込む設定ファイル ~/.s3cfg を生成しています。

$ vi Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y wget s3cmd

ENV DOCKERIZE_VERSION v0.3.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz

ADD dot.s3cfg.tmpl /root/.s3cfg.tmpl
ENTRYPOINT ["dockerize", "-template", "/root/.s3cfg.tmpl:/root/.s3cfg", "s3cmd"]

WORKDIR /work

設定ファイルのテンプレ作成。

$ vi dot.s3cfg.tmpl
[default]
access_key = {{ .Env.ACCESS_KEY }}
secret_key = {{ .Env.SECRET_KEY }}
host_base = jp-east-2.os.cloud.nifty.com
host_bucket = %(bucket)s.jp-east-2.os.cloud.nifty.com

docker イメージをビルドしておく。

$ docker build -t s3cmd .
(略)
Successfully built d128c83ccaeb

あとは、s3cmd にエイリアスを設定しておく。
(定常的に使う場合には ~/.bashrc 等に書いておくといいかも。)

$ alias s3cmd="docker run \
  -ti --rm -v $(pwd):/work \
  -e ACCESS_KEY=${YOUR_ACCESS_KEY} \
  -e SECRET_KEY=${YOUR_SECRET_KEY} \
  s3cmd"

動作確認

ここまでやると、ホストに s3cmd をインストールしてなくてもコンテナ経由で s3cmd が使えるようになっている。

バケットの作成。

$ s3cmd mb s3://tily
Bucket 's3://tily/' created
2017/02/10 04:09:15 Command finished successfully.

バケットの一覧。

$ s3cmd ls
2017-02-10 03:52  s3://tily
2017/02/10 04:09:33 Command finished successfully.

s3cmd コンテナは -v $(pwd):/work で起動するので、カレントディレクトリだったらファイルのアップロード・ダウンロードもできる。

ファイルのアップロード。(微妙に変なエラーが出たけどなんだろう。)

$ echo hello world > test.txt
$ s3cmd put test.txt s3://tily/test.txt
WARNING: test.txt: Owner username not known. Storing UID=500 instead.
WARNING: test.txt: Owner groupname not known. Storing GID=500 instead.
upload: 'test.txt' -> 's3://tily/test.txt'  [1 of 1]
 12 of 12   100% in    0s   354.82 B/s  done
upload: 'test.txt' -> 's3://tily/test.txt'  [1 of 1]
 12 of 12   100% in    0s   228.68 B/s  done
2017/02/10 04:11:38 Command finished successfully.

ファイルのダウンロード。

$ s3cmd get s3://tily/test.txt test2.txt
download: 's3://tily/test.txt' -> 'test2.txt'  [1 of 1]
download: 's3://tily/test.txt' -> 'test2.txt'  [1 of 1]
 12 of 12   100% in    0s   528.98 B/s  done
2017/02/10 04:12:35 Command finished successfully.
$ cat test2.txt 
hello world

まとめ

あまりコンテナを意識せずにホスト側から s3cmd が使えるようになって便利になった。あとあまり関係ないけど、dockerize はテンプレ機能だけでなく、別のコンテナの TCP ポートが LISTEN するまで待ってくれる機能 もあるようなので、こちらも今度試してみたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0