generated at
fabric2実行環境をdocker内に構築してローカルPCからリモートサーバにコマンドを投げる
fabric構築
Python実行環境
Python環境構築を簡略化するためにDockerを使う
Dockerfile
FROM python:3.6 RUN pip install fabric RUN mkdir /root/src /root/.ssh WORKDIR /root/src
上記Dockerfileと同じディレクトリで docker build -t TAG . を実行
これでPython3.6とfabricがインストールされる
下記のコードで確認
bash
docker run -it TAG python --version docker run -it TAG pip --version docker run -it TAG fab --version
SSH接続設定
$HOME/.ssh/config に接続に必要な情報を全部書く

Pythonスクリプト実装
リモートのホスト名を確認してみる
src/fabfile.py
from invoke import task, Exit, run from fabric import Connection, Config Config.ssh_config_path = '/root/.ssh/config' @task def dev(c): # app-devという名前でssh_configに登録している前提 c = Connection("app-dev") c.run('hostname')

Docker経由でfabricを実行
最終的に下記のディレクトリ構造になる
dir
. ./src ./src/fabfile.py ./Dockerfile
このファイル構成の状態で下記のコマンドを実行する。
docker run -v $(pwd)/src:/root/src -v $HOME/.ssh:/root/.ssh fab dev
app-devのホスト名が出力される

所感
fabric1系使ったほうがまだ楽
fabric2はできることがまだ少ない
ググるのが非常にダルい
pythonバージョンの違いはDockerでラッピングしてしまっているので最悪2系を使い続けることも可能

以上