(今更ながら)はじめての docker push で細かいところで躓いたので残しておきます。
予め、DockerHub でアカウントを作成しておきます。
https://hub.docker.com/
1. Docker コマンドを一般ユーザで実行可能にする
自分の環境では sudo docker push が動作しなかった(コマンド打っても応答なし)ため、sudo 無しで実行できるように準備しておきます。
※このユーザ名は自分のローカル環境上のユーザです(DockerHubのアカウント名ではない)
sudo usermod -g docker {自分のユーザ名}
sudo gpasswd -a {自分のユーザ名} docker
docker info など実行して sudo なしで実行できることを確認します。
もし動作しない場合は、OSの再起動行えばうまくいくはず。
2. Dockerfile を作る
何でも良かったのですが、apache spark のイメージを作りました。
alpine は軽量で嬉しいです。
FROM alpine:3.10
LABEL maintainer "blueskyarea"
ENV SPARK_VERSION=2.1.1
ENV HADOOP_VERSION=2.7
RUN apk add --no-cache curl bash openjdk8-jre libc6-compat \
&& ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2 \
&& wget https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \
&& tar -xvzf spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \
&& mv spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION} spark \
&& rm spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz
EXPOSE 8080
3. Docker イメージを作る
docker build --tag=blueskyareahm/spark-base:2.1.1-hadoop2.7 .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
blueskyareahm/spark-base 2.1.1-hadoop2.7 e2829908cbf7 xx hours ago 318MB
4. Docker イメージを push する
まず、docker login を行います。
Username と Password は DockerHub のアカウント作成時に登録したものです。
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password:
Login Succeeded
docker push していきます。特に問題なければ、すぐに終わります。
docker push blueskyareahm/spark-base:2.1.1-hadoop2.7
つまづいたところ
docker push 時に "denied: requested access to the resource is denied" のメッセージが表示され push 出来なかった。
$ docker push blueskyarea/spark-base:2.1.1-hadoop2.7
The push refers to repository [docker.io/blueskyarea/spark-base]
5ffdb0ebdb14: Preparing
531743b7098c: Preparing
denied: requested access to the resource is denied
DockerHub 上の docker_id と docker Image 名が一致していないことが問題。
docker_id は blueskyareahm ですが
最初、blueskyarea/spark-base:2.1.1-hadoop2.7 でイメージを作成していました。
そのため、アクセス拒否されていたようです。
以下の手順にて、正しい名前でイメージ名を作成したあと
# 間違った名前のイメージを元に abc というコンテナを作成
docker run -d --name abc blueskyarea/spark-base:2.1.1-hadoop2.7
# abc コンテナを元に、正しい名前で commit する。
docker commit abc blueskyareahm/spark-base:2.1.1-hadoop2.7
docker push で上手くいきました。
docker push blueskyareahm/spark-base:2.1.1-hadoop2.7