小ネタです。
ビルド環境を配布したいときや、CI/CDでmavenを使うことってありますよね!
そんなとき便利なのがmaven - Official Imageです。
ただ、ちょっと困るのがdocker imageをmavenで作成したいとき…
そんな時はdood (Docker outside of Docker)を使ってdocker imageをビルドすることができます!
例えば、下記のような書き方が出来ます。
これができる理由として
- doodはsockをマウントして、docker-cliをインストールするだけで使えること
- docker runでヒアドキュメントが使えること(
-i
オプションだけついていることが肝)
などがあげられます。
Dokerfileでもcommitでもdockerを入れて固めておくと便利です。
今回は、fabric8io/docker-maven-pluginのrun-javaをビルドしてみます。
とりあえず動けばというノリです
$ docker run -i --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DEBIAN_FRONTEND=noninteractive \
maven:3.8.6-openjdk-8 bash << EOC
su
apt-get update
apt install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null'
apt update
apt install -y docker-ce-cli
# todo maven build
# .e.g.
# maven clean install ...
mvn -version
docker ps
docker images
git clone https://github.com/fabric8io/docker-maven-plugin.git
cd /docker-maven-plugin/samples/run-java
mvn package docker:build
docker images
EOC
...etc....
[INFO] DOCKER> [samples/dmp-sample-run-java:latest]: Created docker-build.tar in 60 milliseconds
[INFO] DOCKER> [samples/dmp-sample-run-java:latest]: Built image sha256:5f2ee
[INFO] DOCKER> samples/dmp-sample-run-java:latest: Removed dangling image sha256:33ee9
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 50.960 s
[INFO] Finished at: 2023-07-11T12:39:42Z
[INFO] ------------------------------------------------------------------------
REPOSITORY TAG IMAGE ID CREATED SIZE
samples/dmp-sample-run-java latest 5f2ee4b8470a Less than a second ago 479MB
...etc...
$ docker run -it --rm samples/dmp-sample-run-java
exec java -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfMemoryError -cp .:/opt/* HelloWorld
Hello world !