SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...

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 .

こんな状態になる

# 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の中であるプロセスを実行するための分離した環境を作ってくれるもの。だからオーバーヘッドも仮想マシンほどではなくて、さくっとプロセスが立ち上がって、コマンドが実行されて、用が済んだらさらっと消えていく。

関連するメモ

コメント