CoreOS のように Docker コンテナの pull 以外にソースの出入り口がない環境では、Docker Hub (またはその他のリポジトリ) を経由してイメージを取り込む必要があります。
以下は、Docker Hub を経由して CoreOS 上にイメージを取り込むチュートリアルです。
チュートリアル
Docker Hub 上にリポジトリを作る
何はともあれアカウントを取得して、リポジトリを作りましょう。
- Docker Hub アカウントを取得
- "Create Repository" でリポジトリを作成
- 今回は 1000k/rails-chat/ という名前で public リポジトリを作ってみました
Docker CLI からイメージをリポジトリに登録する
お手元の CLI からイメージを転送します。
-
docker tag
でイメージにタグをつける -
docker login
して Docker Hub に接続する -
docker push
でイメージを Docker Hub に登録する
例:
# イメージ一覧を確認
docker images
# イメージ名か IMAGE ID を指定してタグを付ける
# ※{user_name}/{image_name}:{tag} というように、先頭に `{user_name}/` を付けないと「rootリポジトリに push はできません」というエラーが出る
docker tag 7d9495d03763 1000k/rails-chat:latest
# Docker Hub にログイン
docker login --username=yourhubusername --email=youremail@company.com
# push する
docker push 1000k/rails-chat:latest
CoreOS に取り込む
core@core-01 ~ $ docker pull 1000k/rails-chat
core@core-01 ~ $ docker run -p 80:3000 -d 1000k/rails-chat
core@core-01 ~ $ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e9cd5355bb2 1000k/rails-chat "rails s -b 0.0.0.0" 4 seconds ago Up 4 seconds 0.0.0.0:32768->3000/tcp reverent_bardeen
以上。素敵な鯨ライフを。
トラブルシューティング
docker login が 403 Forbidden で弾かれる
Docker Toolbox Windows版で docker login
しようとしたら、正しいID/PWなのになぜか弾かれました。
$ docker login --username=yourhubusername --email=youremail@company.com
Password: {合ってるパスワード}
Error response from daemon: Unexpected status code [403] : <html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
こんな時は以下のコマンドで PowerShell 経由で叩くようにすると、なぜかうまくいきました。
$ docker-machine ssh default
$ docker login --username=yourhubusername --email=youremail@company.com
Password: {合ってるパスワード}
WARNING: login credentials saved in /home/docker/.docker/config.json
Login Succeeded
根本的な直し方では無いですが、ひとまずこれで何とかなります。
docker pull してもイメージが落ちてこない
core@core-01 ~ $ docker pull 1000k/rails-chat
Using default tag: latest
Pulling repository docker.io/1000k/rails-chat
Tag latest not found in repository docker.io/1000k/rails-chat
エラーメッセージの通り、:latest
というタグを付けたイメージを push していないからです。上記のチュートリアルを参考に :latest
というタグを付けたイメージを作って、docker push
しましょう。