Dockerについて学ぶ〜イメージの操作〜

Dockerについて入門したいので,その学習メモ
使用している教材は「Docker/Kubernetes 実践コンテナ開発入門

今回はDockerイメージの操作について

基本情報

Dockerの操作はイメージに関する操作とコンテナに関する操作の2つに大別される

Dockerイメージ

DockerイメージはDockerコンテナを作成するためのテンプレート
OSとして構成されたファイルシステムや,コンテナ上で実行するアプリケーションや依存しているライブラリ・ツール,どのプロセスがコンテナ上で実行されるかと言った実行環境などの設定情報を含んでいる

Dockerコンテナ

Dockerイメージを基に作成される,ファイルシステムとアプリケーションが実行されているもの

Dockerfile

Docker独自のドメイン固有言語を使ってイメージの構成を定義し,FROMやRUNといった命令を記述
Dockerfile自身がDockerイメージになるわけではなく,テンプレートを構築することをDockerイメージをビルドすると言う

ポートフォワーディング

Dockerコンテナは仮想環境なので,外から1つの独立したマシンのように扱えるが,アプリケーションで設定した公開ポートはコンテナポートと呼ばれるコンテナ内に限定されたポートとなる
つまりHTTPリクエストを受けるアプリケーションの場合,コンテナの外から来たリクエストをコンテナ内で実行しているアプリケーションにまで到達させる必要がある

そこでポートフォワーディングdocker container runコマンドに-pオプションでポートを指定する
-pオプションは{ホスト側のポート}:{コンテナポート}の書式で記述

$ docker container run -d -p 9000:8080 hoge/huga:latest

ホスト側のポートは省略可能で,この場合はホスト側で空いているポートが自動的に割り当てられる

Dockerのイメージ操作

イメージのビルド
$ docker image build -t イメージ名[:タグ名] Dockerfile配置ディレクトリのパス
-fオプション

docker image buildコマンドはデフォルトでDockerfileを探す
そうでないDockefileを利用したい場合は-fオプションを利用

--pullオプション

docker image buildでイメージをビルドする際,DockerfileのFROMで指定されているイメージを一度レジストリからダウンロードし,それをベースイメージにして新たにイメージをビルドする
--pullオプションでtrueを指定すると,docker image build時にベースイメージを強制的に再取得させることが出来る
ローカルにベースイメージのキャッシュが存在している場合,Dockerは差分を活かしてビルドしようとする
docker image build時に確実に最新のベースイメージを取得してからイメージをビルドしたい場合は--pull=trueをつける

DockerHub

GitHubと同様にユーザーや組織がリポジトリを持つことでDockerイメージを管理している
docker searchコマンドでDockerHubのレジストリに登録されているリポジトリを検索できる

$ docker search [options] 検索ワード

--limitを指定することで表示件数を制限可能

イメージの取得

DockerレジストリからDockerイメージをダウンロードしてくるには,Docker image pullコマンドを利用する

$ docker image pull [options] レポジトリ名[:タグ名]

docker image pullでダウンロードしてきたイメージは,そのままDockerコンテナとして利用できる

イメージ一覧

docker image lsではコマンドの実行対象であるDockerホストに保持されているイメージの一覧を表示する
Dockerホストとは,Dockerデーモンを実行しているホスト環境

$ docker images ls [options] [リポジトリ [:タグ]]
イメージのタグ付け

docker image tagはDockerイメージのお特定のバージョンにタグ付けを行う
イメージIDはDockerイメージが変更・コピーされた際に変わる
Dockerで1つのタグに紐付けられるイメージは1つまでで,latestは最新のものにしか付けられない
Dockerイメージのタグはある特定のイメージIDを持つDockerイメージを識別しやすくするために利用されており,リリース番号を付けてイメージを管理しやすくするために使われる

イメージの公開

docker image push コマンドは保持しているDockerイメージをDockerHubレジストリに登録できる

$ docker image push [options] リポジトリ名 [:タグ]

DockerHubは自分が所有しているリポジトリにしかPush出来ないのでdocker image tagコマンドでイメージの名前空間を変更する

$ docker image tag example/echo:latest DockerHubのID/echo:latest

docker image pushでイメージを指定してDockerHubへPushする

docker image push DockerHubのID/echo:latest

公開するリポジトリにPushするイメージやDockerfileには,パスワードやAPIキーといった情報を含めないよう注意

所感

イメージとコンテナの関係,Dockerfileの役割を理解したところでDockerとはどんなものなのか分かった気がする
次はコンテナの操作についてやっていく