DockerHubを試してみようということで、まずはこんなDockerfile
を作成してみました。GitBucketを組み込みJettyで起動するだけの簡単なものです。
FROM java:8-jre MAINTAINER Naoki Takezoe <takezoe [at] gmail.com> ADD https://github.com/gitbucket/gitbucket/releases/download/3.12/gitbucket.war /opt/gitbucket.war RUN ln -s /gitbucket /root/.gitbucket VOLUME /gitbucket # Port for web page EXPOSE 8080 # Port for SSH access to git repository (Optional) EXPOSE 29418 CMD ["java", "-jar", "/opt/gitbucket.war"]
DockerHubでイメージを共有するには以下の2通りの方法があります。
どちらの場合もDockerHubにアカウントを作成しておく必要があります。
dockerコマンドでpushする
まずはコンテナをビルドします。このとき-t
オプションでDockerHubに作成するリポジトリ名と同じ名前のタグをつけておきます。
$ docker build -t takezoe/gitbucket .
続いてdocker login
を実行します。
$ docker login
DockerHubのアカウント作成時に指定したアカウント名、パスワード、メールアドレスを入力します。一度docker login
を実行するとdocker logout
を実行するまで認証情報は保持されるので毎回docker login
を行う必要はありません。
最後にdocker push
を実行するとコンテナのイメージがDockerHubにアップロードされます。
$ docker push
GitHub / BitBucketから自動ビルドする
もう1つの方法はGitHub / BitBucketにDockerfile
をpushしておき、そこからコンテナを自動ビルドする方法です。以下の例ではREADME.md
も入れていますが、最低限Dockerfile
だけあれば大丈夫です。
DockerHub上でGitHub / BitBucketのアカウントとリンクの設定を行い、リポジトリを選択するだけでOKです。Gitリポジトリにpushするたびに自動的にコンテナがビルドされます(DockerHub上で明示的にビルドをリクエストすることも可能)。
毎回自分でpushしなくてもいいので楽ですし、DockerHubの詳細ページにもDockerfileを参照できるタブが追加されたり、GitHub / BitBucketリポジトリへのリンクが表示されたりするので基本的には手動でpushするより自動ビルドを使ったほうがよさそうな感じです。
プライベートリポジトリ
DockerHubではリポジトリの作成時に「Private」を選択することでプライベートリポジトリを作成することもできます。「Public」と「Private」はあとから切り替えることもでき、無料でも1つだけプライベートリポジトリが使用できます。
プライベートリポジトリからはdocker login
していないとイメージをpullすることができません。
プライベートリポジトリを自前運用したい場合Docker Registryを使うという手も考えられますが、AWSやGoogle Cloud PlatformではマネージドサービスとしてDockerコンテナのレジストリが提供されているのでAWSやGCPを使っているのであればこれらを利用するのもありかもしれません。