CentOS Stream 9 で wkhtmltopdf する
問題
wkhtmltopdfのCentOS9用のrpmがないです!
どうしましょう?
答え
dockerでCentOS7環境を作ってCentOS7用のrpmを入れる。
docker実行環境
podman入れる
yum install podman-docker
dockerイメージ作る
docker hub に公式イメージがある。これをもとにする。
https://registry.hub.docker.com/_/centos
適当にディレクトリを作り
mkdir xxx cd xxx
Dockerfile作成
vim Dockerfile
FROM centos:7 RUN yum install -y fontconfig freetype libX11 libXext libXrender libjpeg libpng openssl xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 RUN yum install -y ipa-*fonts RUN rpm -i 'https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm' RUN yum clean all
dockerイメージ作成
docker build --rm -t local/c7-wkhtmltopdf .
- FROM centos:7 = 公式イメージがベース
- yum で動作に必要なものをコンテナに入れる
- wkhtmltopdfのrpmをインストール
こんな状態になる
# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE localhost/local/c7-wkhtmltopdf latest 37a1bf4f2b2d 23 seconds ago 596 MB quay.io/centos/centos 7 8652b9f0cb4c 17 months ago 212 MB
実行する
/tmp をマウントして、ファイルを書き出してもらうパターン
docker run --rm -v /tmp:/tmp local/c7-wkhtmltopdf wkhtmltopdf https://www.softel.co.jp/ /tmp/softel.pdf → /tmp/softel.pdf ができる
標準入力、標準出力でやりとりするパターン(1個目のハイフン…標準入力からHTMLをもらうよ。2個目のハイフン…標準出力にPDFを出力するよ。)
docker run --rm -i local/c7-wkhtmltopdf wkhtmltopdf - - → 標準入力にHTMLを渡すと、標準出力にPDFが出てくる
docker run --rm -i local/c7-wkhtmltopdf wkhtmltopdf - - < test.html > test.pdf
標準入出力を使うとゴミファイルが増えないのがメリット。
メモ
dockerはプロセスを隔離する技術。
wkhtmltopdfの場合だと、wkhtmltopdfを実行する環境(ライブラリなど要するにファイル)をOSの環境とは別に作って、その中で実行してもらう。
OSレベルで分離した仮想マシンを実行するのではなくて、OSの中であるプロセスを実行するための分離した環境を作ってくれるもの。だからオーバーヘッドも仮想マシンほどではなくて、さくっとプロセスが立ち上がって、コマンドが実行されて、用が済んだらさらっと消えていく。
コメント