Translate

2015年3月12日木曜日

The Docker User Guide: Working with Docker Images を翻訳してみる



 本ページは、以下のサイトを翻訳したものです。
 Working with Docker Images
 https://docs.docker.com/userguide/dockerimages/



このサイトを翻訳中にDockerfileチューとリアルへのリンクが出てきて
ついそっちを先に訳してしまいました。

以下、翻訳したものです(参照の際は at your own risk でネ)。

-------

Docker イメージの動作


イントロダクションでは、Dockerイメージはコンテナのベースであることを議論しました。前セクションでは、例えばubuntuイメージや training/webapp イメージのような、既存のDockerイメージを使用しました。

Dockerホスト上のイメージをダウンロードしたDockerストアも学習しました。イメージがホスト上に存在しない場合、レジストリ(デフォルトではDocker Hub レジストリ)からダウンロードして使用しました。

このセクションでは、次のようなDockerイメージを探検します:

Dockerホスト上のローカルイメージの管理および動作
基本イメージの作成;
Docker Hub リポジトリへのイメージのアップロード


ホスト上のイメージのリスト


ローカルホスト上に保持しているイメージをリスト表示してみましょう。docker imagesコマンドを次のように使います:

 $ sudo docker images
 REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
 training/webapp  latest   fc77f57ad303  3 weeks ago  280.5 MB
 ubuntu           13.10    5e019ab7bf6d  4 weeks ago  180 MB
 ubuntu           saucy    5e019ab7bf6d  4 weeks ago  180 MB
 ubuntu           12.04    74fe38d11401  4 weeks ago  209.6 MB
 ubuntu           precise  74fe38d11401  4 weeks ago  209.6 MB
 ubuntu           12.10    a7cf8ae4e998  4 weeks ago  171.3 MB
 ubuntu           quantal  a7cf8ae4e998  4 weeks ago  171.3 MB
 ubuntu           14.04    99ec81b80c55  4 weeks ago  266 MB
 ubuntu           latest   99ec81b80c55  4 weeks ago  266 MB
 ubuntu           trusty   99ec81b80c55  4 weeks ago  266 MB
 ubuntu           13.04    316b678ddf48  4 weeks ago  169.4 MB
 ubuntu           raring   316b678ddf48  4 weeks ago  169.4 MB
 ubuntu           10.04    3db9c44f4520  4 weeks ago  183 MB
 ubuntu           lucid    3db9c44f4520  4 weeks ago  183 MB

ユーザガイドでこれまでに使用したイメージを参照することができます。どのイメージも起動の際にDocker Hubからダウンロードしてきたものです。

リスト上には3つの重要なイメージ情報を読み取ることができます。

  • リポジトリの出自、例「ubuntu
  • 各イメージのタグ、例「14.04
  • 各イメージのID


リポジトリは潜在的に複数の異なる版のイメージを保持しています。このubuntuイメージのケースでは、Ubuntu 10.04、12.04、12.10、13.04、13.10、そして 14.04というバージョンをカバーしています。各バージョンはタグによって特定づけており、次のようなタグづけされたイメージで参照する事ができます:

 ubuntu:14.04

次のように、タグイメージを参照してコンテナを実行します:

 $ sudo docker run -t -i ubuntu:14.04 /bin/bash

もしかわりに「Ubuntu 12.04」イメージを使いたいのであれば:

 $ sudo docker run -t -i ubuntu:12.04 /bin/bash

もしバージョンを特定しないのであれば、ubuntuを使う例として、普通は「ubuntu:latest」イメージを使います。

 Tips:
 「ubuntu:12.04」のような特定タグのイメージの使用を推奨します。いつも使っているイメージのバージョンが何か明確にすることができます。


新しいイメージの取得


新しいイメージをどうやって取得するのでしょうか?Dockerは、ホスト上に存在しないイメージは自動的にダウンロードします。
ただしコンテナの起動の際に時々潜在的に追加されます。もしイメージの事前ダウンロードを実行したい場合は、docker pullコマンドを使います。「centos」イメージをダウンロードシてみましょう。

 $ sudo docker pull centos
 Pulling repository centos
 b7de3133ff98: Pulling dependent layers
 5cc9e91966f7: Pulling fs layer
 511136ea3c5a: Download complete
 ef52fb1fe610: Download complete
 ...
 
 Status: Downloaded newer image for centos

それぞれのレイヤのイメージがダウンロードされ、イメージのダウンロードするまで待機せずにイメージを実行することが可能になります。

 $ sudo docker run -t -i centos /bin/bash
 bash-4.1#


イメージの検索


Dockerの機能の一つは、たくさんの人が様々な目的で構築されたDockerイメージがあります。多くはDocker Hubへアップロードサれています。Docker Hub Webサイト上でこれらのイメージを検索することができます。



 

docker searchコマンドを使えば、コマンドラインからでも検索は可能です。Webアプリケーション開発で使用するRubyとSinatraがインストールされたイメージを探してみましょう。docker searchコマンドを使って、sinatraという用語が含まれるすべてのイメージを検索することができます。


 $ sudo docker search sinatra
 NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
 training/sinatra                       Sinatra training image                          0                    [OK]
 marceldegraaf/sinatra                  Sinatra test app                                0
 mattwarren/docker-sinatra-demo                                                         0                    [OK]
 luisbebop/docker-sinatra-hello-world                                                   0                    [OK]
 bmorearty/handson-sinatra              handson-ruby + Sinatra for Hands on with D...   0
 subwiz/sinatra                                                                         0
 bmorearty/sinatra                                                                      0
 ...


sinatra」という単語を使っているたくさんのイメージを見つけることができました。docker searchコマンドの結果として、イメージの名前、説明、スター数(イメージの社会的人気度-イメージを気に入ったらユーザがスターを与えることができる)、オフィシャル、そして自動化(Automated)ビルドステータスのリストが返ってきます。オフィシャルリポジトリはStackbrewプロジェクトによって構築・管理されています。また自動化(Automated)リポジトリとはイメージのソースや内容が実証されている自動化されたビルド(Automated Builds)です。


ここでは、有効なイメージ群をレビューして「training/sinatra」を使うことを決めました。これまで、2つのイメージリポジトリのタイプを学習してきました。1つは「ubuntu」イメージのような、ベースイメージもしくはルートイメージと呼ばれるものです。これらのイメージは Docker Inc により構築・検証・サポートされています。これらのイメージは単一の単語の名前により識別することができます。

もうひとつは、今回選択した「training/sinatra」イメージのような、ユーザイメージです。ユーザイメージはDockerコミュニティのメンバに所属し、構築・管理されています。ユーザイメージは、ここでは「training」のように、構築した人のユーザ名をプレフィックスとして識別することができます。


イメージのダウンロード(pulling)


docker pull コマンドを使って適当なイメージ、ここでは「training/sinatra」、を識別してダウンロードを実行することができます。

 $ sudo docker pull training/sinatra

チームは自身のコンテナを実行することでイメージを使用することができます。

 $ sudo docker run -t -i training/sinatra /bin/bash
 root@a8cb6ce02d85:/#


自分たちのイメージの作成


チームは「training/sinatra」イメージがかなり使いやすいことがわかりました。しかし、それは彼らが必要とするものではありませんでした。彼らは「training/sinatra」イメージに若干の変更を必要としています。イメージの変更・作成する2つの方法が有ります。
 

  1. イメージから作成したコンテナを変更して新たなイメージとしてコミットする
  2. イメージを作成する手順を定義したDockerfileを使う


イメージの変更およびコミット


イメージを変更するために、最初に更新対象のコンテナを作成する必要があります。


 $ sudo docker run -t -i training/sinatra /bin/bash
 root@0b2616b0e5a8:/#

 注意:
 すぐに必要となるので、作成したコンテナID(0b2616b0e5a8)を書き留めておいてください。

コンテナ上で json gem を追加します。

 root@0b2616b0e5a8:/# gem install json

希望する変更をコンテナにくわえたら、exitコマンドを使ってコンテナから出ましょう。

コンテナには希望する変更を加えたので、docker commitコマンドを使ってコンテナのコピーをイメージとしてコミットすることができます。

 $ sudo docker commit -m "Added json gem" -a "Kate Smith" \
 0b2616b0e5a8 ouruser/sinatra:v2
 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

上記のように docker commit コマンドを使いました。その際に「-m」と「-a」の2つのフラグを指定しました。「-m」フラグは、バージョン管理システム上のコミットのように、コミットメッセージの指定を許可します。「-a」フラグは変更者の指定を許可します。

また、(先ほど書き留めたID)0b2616b0e5a8により、作成したいイメージのコンテナを指定します。そしてイメージのターゲットを指定します:

 ouruser/sinatra:v2

このターゲットを詳しく見ていきましょう。我々が書き込んでいるイメージは、新規ユーザ"outeruser"として編成しています。またイメージ名として、ここではオリジナルイメージ名である「sinatra」を指定しました。最後にあるイメージのタグは「v2」と指定しました。

docker imageコマンドを使って新イメージ「ouruser/sinatra」を参照することができます。

 $ sudo docker images
 REPOSITORY          TAG     IMAGE ID       CREATED       VIRTUAL SIZE
 training/sinatra    latest  5bc342fa0b91   10 hours ago  446.7 MB
 ouruser/sinatra     v2      3c59e02ddd1a   10 hours ago  446.7 MB
 ouruser/sinatra     latest  5db5f8471261   10 hours ago  446.7 MB

新イメージを使って新たなコンテナを作成するには、次のように実行します:

 $ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
 root@78e82f680994:/#

Dockerfileからイメージを構築


docker commitコマンドの利用は、とても簡単なイメージ拡張方法ですが、チーム間でのイメージを開発プロセスで共有するには少々厄介で簡単ではありません。代わりに新しいコマンド、docker build、を使って新規イメージをスクラッチから構築することができます。

docker buildコマンドを実行するには、Dockerにイメージの構築方法を伝えるためのインストラクションの集まりで構成されたDockerfileを作成します。

まず最初にディレクトリを作成しDockerfileを作成しましょう。

 $ mkdir sinatra
 $ cd sinatra
 $ touch Dockerfile

それぞれのインストラクションはイメージの新たなレイヤを作成します。開発チームにおけるSinatraイメージの構築のための簡単な例を見てみましょう。

 # This is a comment
 FROM ubuntu:14.04
 MAINTAINER Kate Smith
 RUN apt-get update && apt-get install -y ruby ruby-dev
 RUN gem install sinatra

Dockerfileが何をしているか見てください。それぞれのインストラクションは文(statement)の先頭にあり、大文字で書かれています。

 INSTRUCTION statement

 注意:
 #を使ってコメントを表示できます。

最初のインストラクション"FROM"はDockerにイメージの元をがなにかを示しています。この場合は「Ubuntu 14.04」をイメージのベースとしています。

次のインストラクション"MAINTAINER"は誰が新イメージを管理しているかを指定しています。

最後に2つのインストラクション"RUN"を定義しています。RUNインストラクションは、パッケージのインストールのような、イメージ内でコマンドを実行します。ここではAPTキャッシュの更新、RubyおよびRubyGemsのインストール、そして sinatora gem をインストールしています。

 注意:
 Dockerfileにはもっとたくさんのインストラクションが使えます




では、ここまでのDockerfiledocker buildコマンドでイメージをビルドしてみましょう。

 $ sudo docker build -t ouruser/sinatra:v2 .
 Sending build context to Docker daemon 2.048 kB
 Sending build context to Docker daemon
 Step 0 : FROM ubuntu:14.04
  ---> e54ca5efa2e9
 Step 1 : MAINTAINER Kate Smith
  ---> Using cache
  ---> 851baf55332b
 Step 2 : RUN apt-get update && apt-get install -y ruby ruby-dev
  ---> Running in 3a2558904e9b
 Selecting previously unselected package libasan0:amd64.
 (Reading database ... 11518 files and directories currently installed.)
 Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libasan0:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libatomic1:amd64.
 Preparing to unpack .../libatomic1_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libatomic1:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libgmp10:amd64.
 Preparing to unpack .../libgmp10_2%3a5.1.3+dfsg-1ubuntu1_amd64.deb ...
 Unpacking libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ...
 Selecting previously unselected package libisl10:amd64.
 Preparing to unpack .../libisl10_0.12.2-1_amd64.deb ...
 Unpacking libisl10:amd64 (0.12.2-1) ...
 Selecting previously unselected package libcloog-isl4:amd64.
 Preparing to unpack .../libcloog-isl4_0.18.2-1_amd64.deb ...
 Unpacking libcloog-isl4:amd64 (0.18.2-1) ...
 Selecting previously unselected package libgomp1:amd64.
 Preparing to unpack .../libgomp1_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libgomp1:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libitm1:amd64.
 Preparing to unpack .../libitm1_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libitm1:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libmpfr4:amd64.
 Preparing to unpack .../libmpfr4_3.1.2-1_amd64.deb ...
 Unpacking libmpfr4:amd64 (3.1.2-1) ...
 Selecting previously unselected package libquadmath0:amd64.
 Preparing to unpack .../libquadmath0_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libquadmath0:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libtsan0:amd64.
 Preparing to unpack .../libtsan0_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libtsan0:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package libyaml-0-2:amd64.
 Preparing to unpack .../libyaml-0-2_0.1.4-3ubuntu3_amd64.deb ...
 Unpacking libyaml-0-2:amd64 (0.1.4-3ubuntu3) ...
 Selecting previously unselected package libmpc3:amd64.
 Preparing to unpack .../libmpc3_1.0.1-1ubuntu1_amd64.deb ...
 Unpacking libmpc3:amd64 (1.0.1-1ubuntu1) ...
 Selecting previously unselected package openssl.
 Preparing to unpack .../openssl_1.0.1f-1ubuntu2.4_amd64.deb ...
 Unpacking openssl (1.0.1f-1ubuntu2.4) ...
 Selecting previously unselected package ca-certificates.
 Preparing to unpack .../ca-certificates_20130906ubuntu2_all.deb ...
 Unpacking ca-certificates (20130906ubuntu2) ...
 Selecting previously unselected package manpages.
 Preparing to unpack .../manpages_3.54-1ubuntu1_all.deb ...
 Unpacking manpages (3.54-1ubuntu1) ...
 Selecting previously unselected package binutils.
 Preparing to unpack .../binutils_2.24-5ubuntu3_amd64.deb ...
 Unpacking binutils (2.24-5ubuntu3) ...
 Selecting previously unselected package cpp-4.8.
 Preparing to unpack .../cpp-4.8_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking cpp-4.8 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package cpp.
 Preparing to unpack .../cpp_4%3a4.8.2-1ubuntu6_amd64.deb ...
 Unpacking cpp (4:4.8.2-1ubuntu6) ...
 Selecting previously unselected package libgcc-4.8-dev:amd64.
 Preparing to unpack .../libgcc-4.8-dev_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package gcc-4.8.
 Preparing to unpack .../gcc-4.8_4.8.2-19ubuntu1_amd64.deb ...
 Unpacking gcc-4.8 (4.8.2-19ubuntu1) ...
 Selecting previously unselected package gcc.
 Preparing to unpack .../gcc_4%3a4.8.2-1ubuntu6_amd64.deb ...
 Unpacking gcc (4:4.8.2-1ubuntu6) ...
 Selecting previously unselected package libc-dev-bin.
 Preparing to unpack .../libc-dev-bin_2.19-0ubuntu6_amd64.deb ...
 Unpacking libc-dev-bin (2.19-0ubuntu6) ...
 Selecting previously unselected package linux-libc-dev:amd64.
 Preparing to unpack .../linux-libc-dev_3.13.0-30.55_amd64.deb ...
 Unpacking linux-libc-dev:amd64 (3.13.0-30.55) ...
 Selecting previously unselected package libc6-dev:amd64.
 Preparing to unpack .../libc6-dev_2.19-0ubuntu6_amd64.deb ...
 Unpacking libc6-dev:amd64 (2.19-0ubuntu6) ...
 Selecting previously unselected package ruby.
 Preparing to unpack .../ruby_1%3a1.9.3.4_all.deb ...
 Unpacking ruby (1:1.9.3.4) ...
 Selecting previously unselected package ruby1.9.1.
 Preparing to unpack .../ruby1.9.1_1.9.3.484-2ubuntu1_amd64.deb ...
 Unpacking ruby1.9.1 (1.9.3.484-2ubuntu1) ...
 Selecting previously unselected package libruby1.9.1.
 Preparing to unpack .../libruby1.9.1_1.9.3.484-2ubuntu1_amd64.deb ...
 Unpacking libruby1.9.1 (1.9.3.484-2ubuntu1) ...
 Selecting previously unselected package manpages-dev.
 Preparing to unpack .../manpages-dev_3.54-1ubuntu1_all.deb ...
 Unpacking manpages-dev (3.54-1ubuntu1) ...
 Selecting previously unselected package ruby1.9.1-dev.
 Preparing to unpack .../ruby1.9.1-dev_1.9.3.484-2ubuntu1_amd64.deb ...
 Unpacking ruby1.9.1-dev (1.9.3.484-2ubuntu1) ...
 Selecting previously unselected package ruby-dev.
 Preparing to unpack .../ruby-dev_1%3a1.9.3.4_all.deb ...
 Unpacking ruby-dev (1:1.9.3.4) ...
 Setting up libasan0:amd64 (4.8.2-19ubuntu1) ...
 Setting up libatomic1:amd64 (4.8.2-19ubuntu1) ...
 Setting up libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ...
 Setting up libisl10:amd64 (0.12.2-1) ...
 Setting up libcloog-isl4:amd64 (0.18.2-1) ...
 Setting up libgomp1:amd64 (4.8.2-19ubuntu1) ...
 Setting up libitm1:amd64 (4.8.2-19ubuntu1) ...
 Setting up libmpfr4:amd64 (3.1.2-1) ...
 Setting up libquadmath0:amd64 (4.8.2-19ubuntu1) ...
 Setting up libtsan0:amd64 (4.8.2-19ubuntu1) ...
 Setting up libyaml-0-2:amd64 (0.1.4-3ubuntu3) ...
 Setting up libmpc3:amd64 (1.0.1-1ubuntu1) ...
 Setting up openssl (1.0.1f-1ubuntu2.4) ...
 Setting up ca-certificates (20130906ubuntu2) ...
 debconf: unable to initialize frontend: Dialog
 debconf: (TERM is not set, so the dialog frontend is not usable.)
 debconf: falling back to frontend: Readline
 debconf: unable to initialize frontend: Readline
 debconf: (This frontend requires a controlling tty.)
 debconf: falling back to frontend: Teletype
 Setting up manpages (3.54-1ubuntu1) ...
 Setting up binutils (2.24-5ubuntu3) ...
 Setting up cpp-4.8 (4.8.2-19ubuntu1) ...
 Setting up cpp (4:4.8.2-1ubuntu6) ...
 Setting up libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ...
 Setting up gcc-4.8 (4.8.2-19ubuntu1) ...
 Setting up gcc (4:4.8.2-1ubuntu6) ...
 Setting up libc-dev-bin (2.19-0ubuntu6) ...
 Setting up linux-libc-dev:amd64 (3.13.0-30.55) ...
 Setting up libc6-dev:amd64 (2.19-0ubuntu6) ...
 Setting up manpages-dev (3.54-1ubuntu1) ...
 Setting up libruby1.9.1 (1.9.3.484-2ubuntu1) ...
 Setting up ruby1.9.1-dev (1.9.3.484-2ubuntu1) ...
 Setting up ruby-dev (1:1.9.3.4) ...
 Setting up ruby (1:1.9.3.4) ...
 Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
 Processing triggers for libc-bin (2.19-0ubuntu6) ...
 Processing triggers for ca-certificates (20130906ubuntu2) ...
 Updating certificates in /etc/ssl/certs... 164 added, 0 removed; done.
 Running hooks in /etc/ca-certificates/update.d....done.
  ---> c55c31703134
 Removing intermediate container 3a2558904e9b
 Step 3 : RUN gem install sinatra
  ---> Running in 6b81cb6313e5
 unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping
 unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping
 Successfully installed rack-1.5.2
 Successfully installed tilt-1.4.1
 Successfully installed rack-protection-1.5.3
 Successfully installed sinatra-1.4.5
 4 gems installed
 Installing ri documentation for rack-1.5.2...
 Installing ri documentation for tilt-1.4.1...
 Installing ri documentation for rack-protection-1.5.3...
 Installing ri documentation for sinatra-1.4.5...
 Installing RDoc documentation for rack-1.5.2...
 Installing RDoc documentation for tilt-1.4.1...
 Installing RDoc documentation for rack-protection-1.5.3...
 Installing RDoc documentation for sinatra-1.4.5...
  ---> 97feabe5d2ed
 Removing intermediate container 6b81cb6313e5
 Successfully built 97feabe5d2ed

docker buildコマンドの引数に「-t」フラグを使って新規イメージは「ouruser」に所属し、「sinatra」というリポジトリ名でタグを「v2」と指定しました。

また「.」を使ってDockerfileのロケーションをカレントディレクトリ上のDockerfileを指定しました。

 注意:
 Dockerfileのパスについても指定可能です。


では、動作時のビルドプロセスについてみていきましょう。Dockerはまず最初にビルドコンテキスト(基本的にはビルドしているディレクトリのコンテンツ)をアップロードします。これは、Dockerデーモンが実際にイメージのビルドを実行するのでローカルコンテキストが必要になるためです。

次に、Dockerfile内のインストラクションが順番に実行されるところをみていきましょう。各ステップで、新規コンテナを構築し、そのコンテナ内でインストラクションを実行し、変更をコミットするところが確認できます-ちょうどdocker commit ワークフローを早い段階で確認できました。すべてのインストラクションの実行がおわると、97feabe5d2ed というイメージ( ouruser/sinatra:v2 としてもタグ付けされる)がのこり、すべての中間コンテナがクリンナップのために削除されました。

 注意:
 ストレージドライバとは関係なく、イメージは最大127レイヤまでしか保持できません。
 この制限は、イメージサイズ全体の最適化をうながすためにグローバルに設定されています。

新しいイメージからコンテナをこうつくできるようになりました。


 $ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
 root@8196968dac35:/#

 注意:
 ここではイメージ生成のための短い概要だけ紹介しています。
 利用可能な他のインストラクションについては飛ばしました。
 ガイドの後ろのほうでよりおおくのインストラクションについて触れます。
 また、各インストラクションのより詳細な説明や例はDockerfileリファレンスにて
 参照できます。
 明確で、読みやすく、保守しやすいDockerfileの書き方は、
 Dockerfile ベストプラクティスガイドを参照してください。


さらに


さらにもっと学習したい方は、Dockerチュートリアルをご利用ください。


イメージ上にタグをセット


コミット後やビルド後に既存のイメージに対してタグを追加することも可能です。「docker tag」を使います。ouruser/sinatra イメージに新規タグを追加してみましょう。

 $ sudo docker tag 5db5f8471261 ouruser/sinatra:devel

docker tag」コマンドはイメージID(ここでは 5db5f8471261)、ユーザ名、リポジトリ名、新規タグ名が必要です。

docker image」コマンドを使って新しいタグを確認しましょう。

 $ sudo docker images ouruser/sinatra
 REPOSITORY          TAG     IMAGE ID      CREATED        VIRTUAL SIZE
 ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 MB
 ouruser/sinatra     devel   5db5f8471261  11 hours ago   446.7 MB
 ouruser/sinatra     v2      5db5f8471261  11 hours ago   446.7 MB


イメージをDocker Hubへプッシュ

ビルドや新規生成した新規イメージを 「docker push」コマンドを使って Docker Hub へプッシュすることができます。 公的あるいは個人的なリポジトリにプッシュして、他の人とイメージを共有することができます。

 $ sudo docker push ouruser/sinatra
 The push refers to a repository [ouruser/sinatra] (len: 1)
 Sending image list
 Pushing repository ouruser/sinatra (3 tags)
 ...


ホストからイメージを削除


コンテナの場合と似たような方法である「docker rmi」コマンドを使って、Dockerホスト上のイメージを削除することもできます。

これ以上必要ないので「training/sinatra」イメージを削除してみましょう。

 $ sudo docker rmi training/sinatra
 Untagged: training/sinatra:latest
 Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d
 Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f
 Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0

 注意:
 ホストからイメージを削除するために、
 「training/sinatra」をベースとする実行中のコンテナがないことを確認して下さい。

次のステップ


これまでは、Dockerコンテナ内の個々のアプリケーションのビルド方法について学習してきました。つぎにDockerコンテナ同士をリンクさせてアプリケーションスタック全体のビルド方法を学習しましょう。

DockerチュートリアルでDockerfileの知識をテストしてみましょう。


コンテナのリンクへ進む。


0 件のコメント:

bolt.new をローカルPC(Windows10)で動かす

生成AIによるコード生成ツールはだいぶ進化しており、 ユーザ要件を入力するとJavaScript/TypeScriptコードにしてくれる サービスが登場し始めた。 特に、 bolt.new はOSS(MITライセンス)があり ローカルPCで動作するとのこと。 ただ生成AIモデルは...