はじめに
コンテナイメージを別の環境でも使用したい、他の人と共有したい、と思ったときに真っ先に思いつく方法は、Docker Hubでコンテナイメージを共有することだと思います。
私がDockerのコンテナイメージをDocker Hubにプッシュしたときに行ったことを書き記しておきます。
環境
- macOS Catalina
- git 2.27.0
- Docker 19.03.8
サンプルプロジェクトをGitから取得
サンプルプロジェクトはDockerの公式のものを利用させていただいております。リンクはこちらになります。
$ git clone https://github.com/dockersamples/node-bulletin-board
$ cd node-bulletin-board/bulletin-board-app
Dockerfileの作成
Dockerfileはコンテナを定義するものです。ご自分のお好きなDockerfileを作成していただいて、任意のディレクトリに置いておきます。本記事ではDocker公式のものを利用させていただいているので、Dockerfileは以下のものをとなっております。ソースはこちらです。
FROM node:current-slim
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
EXPOSE 8080
CMD [ "npm", "start" ]
COPY . .
コンテナイメージのビルド
ここでDockerfileの通りにコンテナイメージを作成します。このコマンドを打つ際には、今いるディレクトリにDockerfileがあることを確認しておきます。
$ docker build --tag bulletinboard:1.0 .
正常に終了していれば、Successfully tagged bulletinboard:1.0
と出力されているかと思います。
$ docker images
とTerminal上で打ち、Repositoryに存在していることを確かめておくのもいいかもしれません。
コンテナの起動
コンテナイメージを作成したら、そのコンテナを起動します。
$ docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
コンテナが起動できたら、そのコンテナ上で動いている掲示板アプリケーションにアクセスできることを確認しておきます。ブラウザでlocalhost:8000
にアクセスします( http://localhost:8000 )。
アクセスできることを確認したら、このコンテナイメージはDocker Hubにプッシュしないので削除しておきましょう。
$ docker rm --force bb
Docker Hubでプッシュする
さて、お待たせしました。やっと本題です。ちなみにDocker HubにプッシュするにはDocker Hubアカウントが必要です。もしDocker Hubアカウントがない方はこちらでDocker IDを作成しておいてください。
Docker IDが作成できたら、Terminal上でDocker Hubにログインします。
$ docker login
認証画面(CLI)が出てきたら、Docker IDとご自身で設定されたパスワードを入力してログインを完了させておきます。
ここで注意点なのですが、Docker Hubにプッシュできるコンテナイメージにも条件があります。コンテナイメージの名前を<Docker ID>/<Repository Name>:<tag>
としておかないといけない、という条件です。
Docker Hubにプッシュしたことのない人からすれば寝耳に水な訳です。私はこのパターンでした。面倒な作業をもう一回やらないといけないのかと思いましたが、公式ページを見ていると後からでもできるようでした。
$ docker tag bulletinboard:1.0 <Docker ID>/bulletinboard:1.0
というコマンドを打ち、コンテナイメージの名前・タグを変更します。これでDocker Hubにプッシュできるようになりました。Docker Hubにプッシュします。
$ docker push <Docker ID>/bulletinboard:1.0
エラーが何もなかった場合、ご自身のDocker Hubのリポジトリにプッシュされているハズです。確認しておきましょう( https://hub.docker.com/ )。
おわりに
Dockerは最近注目され始めている技術で、自分の分野(データサイエンス)にもDockerが浸透し始めました。正直自分はネットワークとかサーバの分野には明るくないのですが、自分のローカルを汚さなくて良い点、別の環境でも同じ分析環境を作成できる点で非常に嬉しいです。自分はパソコンを購入して再度環境構築するのが面倒だったので、いっそのこと、とDockerを導入してみました。Gitも勉強しているので、DockerとGitは親和性が高いので今後は連携させて行きたいですね。