俺です
昭和の僕が思い浮かぶ外部連携といえばftpです。全銀tcp/ip最高みたいな話です。
sftpクライアントなコンテナを使い、他のサーバからファイルをgetしてから後続のシェルコマンドやスクリプトで何かしたい。というアレがアレなものをdocker-composeのvolumeを使い、dockerホストにsftpで取得したファイルを保管して動かすtipsです
sftpクライアント用のコンテナにはこちらを使います。
定義
- docker-compose.yml
sftpコマンドのワンライナーをcommandに埋めるのはしんどいのでbatchfileをreadします.
version: "3"
services:
sftpclient:
image: chartedcode/alpine-sftp-client
command: sshpass sftp -i /tmp/.ssh/id_rsa -oStrictHostKeyChecking=no -b /tmp/sftp_job_script sftpsaikou@127.0.0.1
volumes:
- .:/tmp:ro
- /mnt/data:/mnt/data
subsequent_job_a:
image: ubuntu:latest
command: ls -l /mnt/data && echo "sftpは最高だぜ"
depends_on:
- sftpclient
volumes:
- /mnt/data:/mnt/data
- sftp_job_script
docker-composeと同一ディレクトリにbatchfileを作ります。(パス分けてもいいんですけども)
ls
lcd /mnt/data
get unko.csv
bye
実行例
$ docker-compose -f docker-compose.yml up
Starting jobuser_sftpclient_1 ... done
Recreating jobuser_cron_job_1 ... done
Attaching to jobuser_sftpclient_1, jobuser_cron_job_1
sftpclient_1 | sftp> ls
sftpclient_1 | sftp> lcd /mnt/data
sftpclient_1 | sftp> get unko.csv
sftpclient_1 | sftp> bye
jobuser_sftpclient_1 exited with code 0
cron_job_1 | total 0
cron_job_1 | -rw-r--r-- 1 root root 0 Apr 10 16:49 unko.csv
cron_job_1 | sftpは最高だぜ
jobuser_cron_job_1 exited with code 0
良いデータ連携ライフを!