docker imageを独自リポジトリにpushする

docker

前回の記事でsonatype/nexus3(以下、nexus3)を立てたのでそこにdocker imageをpushしてみる。

最終ゴールはkubernetesの勉強環境をつくるですが、そこまでは色々と試してみます。

では、記事です。

筆者の動作確認環境

この記事で使用している動作確認環境は下記のとおりです。

・H/W :Raspberry Pi 4 Model B 8GB
・OS  :ubuntu-20.04.3

 

dockerのイメージを作成→コンテナを稼働させる

dockerについては、作るアプリや環境に合わせて勉強を進める予定なので、まずはイメージを作成し、コンテナを動作させるところまで。

dockerファイル(Dockerfile)を作成し、イメージを作成する。

nexus3へのイメージの登録前にまずはdockerでイメージを作成するまでのかんたんなおさらい。ほぼ自分の備忘録です。

Dockerfileの作成

dockerがインストールされたサーバの任意のディレクトリで「Dockerfile」というファイル名のファイルを作成。下記の内容を書いて保存。

FROM ubuntu:latest
RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Tokyo

作成した中身としては、

  1. ubuntu osの最新のイメージを取得
  2. パッケージを最新化
  3. 時計を日本時間に合わせる

の3つの設定を加えています。サンプルなのでこれくらいで。

イメージの作成

Dockerfileを作成したらイメージを作成するのがDockerの作業の順序かなと。

$ docker build -t [REPOSITORY NAME]:[TAG ID]

ex)
$ docker build -t pedalclecle.com/ubuntu:0.0.1

# ビルドを実行してイメージが作成されたことを確認する。
$ docker images

REPOSITORY         TAG    IMAGE ID     CREATED     SIZE
pedalclecle/ubuntu 0.0.1  156eb13131d9 3 hours ago 228MB
ubuntu             latest a457a74c9aaa 4 weeks ago 65.6MB

コンテナの作成

イメージが作成できたら、実際に動作するコンテナを作成する。

$ docker run -it [REPOSITORY[:TAG]]

ex)
$ docker run -it pedalclecle/ubuntu:0.0.1
root@a457a74c9aaa:/#                   # ←コンテナのこコマンドプロンプト

# 動作させたままExitする場合は、Ctrl+P Ctrl+Q。exitとするとコンテナが終了する。。

# デタッチ後、コンテナの稼働状況を確認する.
$ docker ps
CONTAINER ID IMAGE         COMMAND CREATED        STATUS        PORTS NAMES
1ecbcffcf05e ubuntu:latest "bash"  13 seconds ago Up 12 seconds       hardcore_austin

docker psコマンドで、稼働中のコンテナの一覧を取得できます。

nexus3へのイメージの登録

※前提としてnexus3上にdocker用のリポジトリがあることが前提。

リポジトリにログイン

$ docker login [REPOSITITORY URL]

ex)
# リポジトリにログインする
$ docker login localhost:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See

docker login
Login Succeeded

リポジトリにプッシュ

Login Succeededが出ればOK。次は実際にイメージをリポジトリにプッシュ。

# tagを作成する
$docker tag pedalclecle/ubuntu:0.0.1 localhost:5000/pedalclecle/ubuntu:0.0.1

# リポジトリにプッシュする
$ docker push localhost:5000/pedalclecle/ubuntu:0.0.1
The push refers to repository [localhost:5000/pedalclecle/ubuntu]
ff88ec5666ff: Pushed
a4e6047a1093: Pushed
f23e4e62fbd7: Pushed
424106ffabb5: Pushed
0c20a4bc193b: Pushed
0.0.1: digest: sha256:09ce143a8c0a251a088b397610e4df16131c68354547af13f063dd2c077f24e9 size: 1371

nexus3で登録を確認

プッシュができたらnexus3で登録を確認。

つまづきポイント

nexus3にイメージを登録するまでにいくつか躓いたので共有。

docker loginコマンドでログインできない

事象:docker loginコマンドを実行したら401エラーが出てnexus3へのログインに失敗。

nexus3の設定はあまり考えずに設定していたところ下記のエラーが出てログインに失敗しました。

$ docker login localhost:5000
Authenticating with existing credentials...
Login did not succeed, error: Error response from daemon: login attempt to http://localhost:5000/v2/ failed with status: 401 Unauthorized

対処:nexus3の設定を変更

「Allow anonymous docker pull:」のチェックを外したら問題は解消

pushしてもリポジトリに反映されない

事象:docker pushしてもリポジトリに反映されない

docker pushコマンドを実行しても下記のように「no basic auth credentials」と出てリポジトリにイメージが反映されない

$ docker push localhost:5000/pedalclecle/ubuntu:0.0.1
The push refers to repository [localhost:5000/pedalclecle/ubuntu]
ff88ec5666ff: Preparing
a4e6047a1093: Preparing
f23e4e62fbd7: Preparing
424106ffabb5: Preparing
0c20a4bc193b: Preparing
no basic auth credentials

対処:docker loginしたときのユーザとdocker pushするときのユーザが異なる

下記のコマンド順序でコマンドを実行したときに発生。もしくはログインしないでdocker pushした時に発生。

# 下記の順でコマンドを実行したときに発生。
$ sudo docker login localhost:5000/pedalclecle/ubuntu:0.0.1  # sudoでログイン
↓
$ docker login ocalhost:5000/pedalclecle/ubuntu:0.0.1        # 一般ユーザでプッシュ

まとめ

docker pushを独自リポジトリに実行することはとりあえずできました。通常はdocker hubにプッシュになると思いますが、nexus3を使ってみたくて回りくどい手順になりました。

 

 

 

コメント

タイトルとURLをコピーしました