実現すること
- embulkを実行するdockerイメージを作成する
- ローカル環境の設定ファイルをマウントして、dockerイメージを実行する
前提条件
- Mysqlはローカル環境に存在しているMysqlを使用する
- Embulkバージョン:0.11.1
- プラグインの読み込みはrubygemsを使用する
embulk.properties を作成する
以下の内容が記述されたファイルを作成する。
jruby=file:///usr/src/app/jruby-complete-9.4.5.0.jar
Dockerfile を作成する
# EmBulkの実行にはJavaが必要なため、Javaが含まれているベースイメージを使用します
FROM openjdk:8-jre-slim
# 作業ディレクトリを設定します
WORKDIR /usr/src/app
# install curl
RUN apt-get update && \
apt-get install -y curl && \
rm -rf /var/lib/apt/lists/*
# install jruby
RUN curl --create-dirs -o "./jruby-complete-9.4.5.0.jar" -L "https://repo1.maven.org/maven2/org/jruby/jruby-complete/9.4.5.0/jruby-complete-9.4.5.0.jar"
RUN chmod +x ./jruby-complete-9.4.5.0.jar
# Embulkをダウンロードして実行可能にする
RUN curl --create-dirs -o ./embulk -L "https://dl.embulk.org/embulk-latest.jar" && \
chmod +x ./embulk
# install Ruby gems
COPY ./embulk.properties /root/.embulk/embulk.properties
RUN ./embulk gem install embulk -v 0.11.1 # Embulk と同じバージョンを指定
RUN ./embulk gem install msgpack -v 1.7.2
# RUN ./embulk gem install bundler # if you need Bundler
# RUN ./embulk gem install liquid # if you need Liquid
# Embulkのプラグインをインストール
# 以下の例ではMySQLのプラグインをインストールしています
RUN ./embulk gem install embulk-input-mysql && \
./embulk gem install embulk-output-mysql
# Embulkの実行コマンドを設定します
ENTRYPOINT ["java","-jar","./embulk","run","./config/config.yml"]
Dockerfile からイメージを構築する
docker build ./ -t embulk-mysql-to-mysql --progress plain --no-cache
config.yml の作成
in:
type: mysql
host: host.docker.internal
user: root
password: password
database: dbname
table: product
select: "id, name, email"
out:
type: mysql
host: host.docker.internal
user: root
password: password
database: dbname
table: product2
mode: insert
コンテナを実行する
docker run -v /usr/local/embulk/config:/usr/src/app/config embulk-mysql-to-mysql
参考にしたサイト
https://zenn.dev/dmikurube/articles/what-changes-in-embulk-v0-11
https://joker1007.hatenablog.com/entry/2021/05/28/021140