前回の記事でsonatype/nexus3(以下、nexus3)を立てたのでそこにdocker imageをpushしてみる。
最終ゴールはkubernetesの勉強環境をつくるですが、そこまでは色々と試してみます。
では、記事です。
筆者の動作確認環境
この記事で使用している動作確認環境は下記のとおりです。
・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
作成した中身としては、
- ubuntu osの最新のイメージを取得
- パッケージを最新化
- 時計を日本時間に合わせる
の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を使ってみたくて回りくどい手順になりました。
コメント