Docker Hub にイメージを上げるまで (1)

昔、一人で開発していたOSSのBug Tracking System の Starbug1というものがあります。

自分で作ったから仕事のプロジェクトでは使い続けてるけど、そうじゃない他の利用者は、別のプロジェクト管理システムに移行してるだろうなとは思う。まだ使ってる人が居たら嬉しいので教えてほしい。

C言語で作られたCGIアプリケーションなので、意外と環境を作るのが面倒だった

ふと、Docker Hub に starbug1のイメージを置いておけば、dockerでビルドして起動するだけなんじゃないかと思い、Docker HubへのDockerイメージの公開をしてみようと思いました。Docker Hubでイメージを公開するのも試せるし。

Docker Hub 公開までの流れ

調べたところ、Docker Hubに直接イメージをアップロードすることもできるけど、Githubと連携することも可能らしい。 後々のことも考えればGithubと連携する方がよさそう。

  1. Dockerfileを用意する。
  2. Githubのリポジトリにpushする。
  3. Docker Hubで、Githubと連携する。

まずは、ローカルでDockerfileを用意する。

いろいろ試行錯誤した結果、下のファイルを用意した。

  • Dockerfile
FROM ubuntu:16.04 as builder
 
RUN apt-get update && apt-get upgrade -y && \
  apt-get install -y language-pack-ja wget build-essential tcl-dev \
  gettext libjson-perl libsqlite3-dev liblocale-po-perl rsync
 
RUN cd /tmp && \
  wget --trust-server-names http://repository.timesys.com/buildsources/l/libcgic/libcgic-205/cgic205.tar.gz && \
  tar zxf cgic205.tar.gz && \
  cd cgic205 && \
  make && \
  make install && \
  cd .. && \
  wget --trust-server-names https://ja.osdn.net/dl/starbug1/starbug1-1.6.01.tar.gz && \
  tar zxf starbug1-1.6.01.tar.gz && \
  cd starbug1-1.6.01 && \
  # bugfix. sql statement
  sed -i -e 's/m\.m\./m\./' db_project.c && \
  make INITIAL_LOCALE=ja_JP webapp
 
 
FROM debian:sid-slim
 
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
 
RUN apt-get update && apt-get upgrade -y && \
  apt-get install -y locales apache2 \
  gettext libjson-perl liblocale-po-perl && \
  apt-get clean && rm -rf /var/lib/apt/lists/*
 
RUN sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen && \
  locale-gen &&\
  update-locale LANG=ja_JP.UTF-8
 
COPY --from=builder /tmp/starbug1-1.6.01/dist/starbug1/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html
 
RUN sed -i -e 's/Options Indexes FollowSymLinks/Options Indexes FollowSymLinks ExecCGI\n\tDirectoryIndex index.cgi/g' /etc/apache2/apache2.conf
RUN sed -i -e 's/#AddHandler cgi-script .cgi/AddHandler cgi-script .cgi/g' /etc/apache2/mods-available/mime.conf
RUN a2enmod cgid
 
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]

試行錯誤した点

  • コンパイルに難の少なそうな、少し古めのubuntuをビルド用イメージとして使用
  • 最終的なイメージのサイズを抑えるため、マルチステージビルドで。実行用のイメージは、debian:sid-slimを使用
  • 利用していた C のCGIライブラリの提供サイトが消えていた。md5sumの値を確認した上で、別のサイトからダウンロードするようにした。
  • starbug1 に、バグがあったのをadhocに修正した。(会社で動いてるもののソースコードと同じなんだけどな。。。謎)

実行方法

ビルド

docker build -t starbug1 .

実行

docker run --rm --name starbug1 -v $(pwd)/db:/var/www/html/db  -p 8000:80 -d starbug1

カレントディレクトリのdbというディレクトリをマウントしています。ここにsqlite3のデータベースが保存されるので、バックアップ等は、このディレクトリ丸ごとバックアップすればOK

ブラウザで http://localhost:8000/ を開けば、starbug1が動きます。

停止

docker stop starbug1

Github にpush

続く

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.