SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Docker】入門⑤ コマンドを用いたDockerイメージ操作の基本

基本コマンドの最終回。

前提としては以下の記事と同様にインストールのみが完了している状態とします。
私はLinux(EC2)サーバ上にDockerをインストールしています。

www.wantanblog.com

Dockerイメージの操作

Dockerイメージの取得

Dockerイメージの取得自体は前回の記事でもやっている「pull」です。
pullコマンドについて少し詳しく見ていきます。

イメージの取得はそもそも以下のDockerHubから行っています。
Docker Hub

DockerHubを開いて例えば「mysql」の検索を行ってみます。

f:id:wantanBlog:20200205233632p:plain

検索結果を見てみると公式のイメージには右上に「OFFICIAL IMAGE」のマークがついていることが分かります。
とりあえず公式のイメージを開いてみます。

f:id:wantanBlog:20200205234447p:plain

そこから「Tags」のタブを開くとイメージのバージョンを確認できます。

f:id:wantanBlog:20200205234929p:plain

以前の「run」コマンドで使用した「centos:latest」の「latest」はこのバージョンを表していたのです。

つまりpullコマンドで最新版を取得する場合には以下のようになります。

docker image pull mysql:latest

またあえてバージョンを指定する場合には以下のようになります。

docker image pull mysql:8.0.19

今回はとりあえずmysqlイメージを取得しましたがイメージはなんでもよいです。

Dockerイメージ一覧の表示

先ほど取得したイメージが取得できているかを確認します。
一覧の出力には以下のコマンドを用います。

docker image ls

・出力結果

REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.19 791b6e40940c 3 days ago 465MB
nginx latest 5ad3bd0e67a9 2 weeks ago 127MB
centos latest 470671670cac 2 weeks ago 237MB

「ls」なので一覧表示のコマンドとしては覚えやすいかもしれません。

イメージの削除

イメージの削除は「rm」です。これもLinuxコマンドと共通しているので覚えやすいですね。
rmの後にイメージ名を入力します。

docker image rm mysql

またはIMAGE IDを指定します。

docker image rm 791b6e40940c
DockerHubでのイメージ検索

DockerソフトウェアからDockerHubのイメージを検索することができます。

docker search mysql

・出力結果

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9096 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3215 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 674 [OK]


確認すべきはSTARSやOFFICIAL(公式マーク)の部分でしょうか。
公式のイメージであれば、基本的には危険性はないでしょう。

DockerHubとの連携

Dockerアカウントの作成

以下の公式サイトからアカウントを登録します。

Docker Hub

現時点では右上の「Get Started」から必要情報を入力して登録を完了させます。

f:id:wantanBlog:20200211030013p:plain

登録後、送信されたメールからログインすることで使用開始できます。

とりあえずアカウント名とパスワードを覚えておきましょう。

DockerHubへのログイン/ログアウト

以下のコマンドでログインできます。

docker login

求められるユーザ名とパスワードを正しく入力すればログインに成功するはずです。

Username:
Password:

ログイン成功時のメッセージ。

Login Succeeded

ログアウトはログインと同様にログアウトコマンドを打てばOKです。

docker logout

DockerHubへのプッシュとtarファイルの作成

ここでは公式イメージから作成したDockerコンテナに手を加えてそれをDokcerイメージとして再出力します。
私の場合は公式イメージは「CentOS」イメージで、tmux等のインストールを行ったコンテナ(以下、devos)があります。

コンテナからイメージ作成

先ほど説明したコンテナの「devos」を使用します。
イメージの作成にはcommitコマンドを用います。

docker container commit -a "wantanblog" devos wantanblog/devos:1.0

-a」は著作者を記述するオプションです。
devos はコンテナの識別子、wantanblog/devos:1.0はタグと言われるもので、タグ名とバージョンを指定しています。

イメージが作成されていることは一覧を出力すれば確認できます。

docker image ls

REPOSITORY  TAG IMAGE ID   CREATED SIZE
wantanblog/devos 1.0 82804b108146 7 minutes ago 299MB

イメージのアップロード

作成したイメージをDockerHubへアップロードします。
アップロードではpushコマンドを使用します。

pushを行う際には作成したアカウントでログインしておくようにします。

docker image push wantanblog/devos:1.0

pushするとアカウントの方にイメージが上がっていることがブラウザから確認できます。

f:id:wantanBlog:20200212003042p:plain

これで自分で作成したイメージをDockerHub上にアップロードすることが可能です。

コンテナをtarファイル出力

コンテナはtarファイル化することによって、別のコンテナに移行し展開することが可能となります。

docker container export devos > devos.tar

作成されたファイルはホストのカレントディレクトリに配置されるようです。

  • rw-rw-r-- 1 ec2-user ec2-user 297517568 Feb 11 13:35 devos.tar
tarファイルからのイメージ作成

作成したtarファイルからイメージの作成を行います。
今回は同一のマシン上で行っていますが、別のマシン上にtarファイル自体を移行すれば完全手動ではありますが別の環境でも展開できます。

cat devos.tar | docker image import - wantanblog/devos:1.1
イメージのtarファイル保存

先ほどはコンテナからtarファイルへの出力を行いましたが、イメージからtarへの書き出しをsaveコマンドを使用します。

docker image save -o nginx.tar nginx

コンテナからのイメージ生成と同様にホスト上に作成されます。

・出力結果

  • rw-rw-r-- 1 ec2-user ec2-user 297517568 Feb 11 13:35 devos.tar


なお、saveでイメージを保存した場合には、イメージの展開には以下のloadコマンドを使用します。

docker image load -i nginx.tar

注意点としてはexportコマンドで出力したファイルはimportコマンドで取り込みを行い、
イメージのsaveコマンドで出力したファイルはloadコマンドで読み込むということです。

これは内部的なディレクトリの構成が異なるためらしいようです。

コマンド確認はここまで、後は必要になったら調べ直します。
次回からは少し進めます。