k8s環境ハンズオン docker学習編
もくじ
- Dockerの概念を理解する。
- Dockerの基本操作を覚える。
Dockerの概念を理解する
dockerコンテナ実行してdockerの理解を深める
hello-worldというdockerコンテナを実行:
docker run hello-world
ちなみにrunには(コンテナの起動・プロセスの確認・停止)の3つを連続で行う意味がある。
コンテナ実行後はゴミがたまるので不要なキャッシュを削除する:
docker container prune
[y]
コンテナと仮想マシン
コンテナと仮想マシンの違いはカーネルを共有しているかどうか。
カーネルを共有していれば、スピードが速く、バグも少なくできる。
イメージとコンテナ
DOCKERイメージ:
・実行環境を定義したもの
・docker hubなどのリポジトリに保管
(dockerイメージ=実行環境のテンプレート)
DOCKERコンテナ:
・dockerイメージをじっこうして出来る実行環境
(dockerコンテナ=dockerイメージを実行した実際の実行環境)
※プログラムだとイメージはクラス、コンテナはインスタンス
おさらい
Dockerの基本操作を覚える。
イメージ検索(DockerHub)
イメージ検索
ドッカーイメージの検索方法について学習する。
ドッカーイメージはイメージレジストリにある。
ドッカーイメージ保存先は「amazon」「google」「azure」「dockerhub」などが提供している。
今回はdockerhubを検索する。
https://hub.docker.com/
dockerhubはドッカーがイメージレジストリを探すデフォルトに設定されている。
ドッカーイメージにはtag とimageidがある。
tagにはOSとそのver情報が記載されている。
nodeでtagを検索するとalpineというosが見つかる。
これはdocker向けの軽量なosです。
「
イメージが軽量でないとダウンロードできないので軽量であることは必須条件。
検索イメージに書いてあるタグをクリックするとgithubに飛ぶ。
そこにはdockerfileがある。
dockerfileはそのイメージがどのように構成されているか定義しているファイル。
「
イメージ取得/一覧/削除
- イメージ取得には下記のコマンドを使います。
docker image pull NAME[:TAG]
指定されたイメージを取得します。
# 引数
# NAME Dockerイメージ名
# TAG タグ名。省略した場合はlatest。
- イメージ一覧の取得には下記のコマンドを使います。
docker image ls
# 取得済みdockerイメージ一覧を表示します。
# 引数 なし
- イメージ削除には下記のコマンドを使います。
docker image rm IMAGE
指定されたイメージを削除します。
引数
IMAGE DockerイメージID
docker image prune
使われていないイメージを一括削除します。
引数 なし
演習としてdockerイメージ取得・一覧・削除の操作を行う。
- ①centosをdockerhubでイメージ取得
- ②取得したイメージ一覧でイメージID確認
- ③イメージ削除
①centosをdockerhubでイメージ取得
- centosのイメージ検索してタグを取得。
- タグを元にcentosのイメージをダウンロードしてみる。
docker image pull centos:7
- ②取得したイメージ一覧確認してイメージ削除
IMAGE Docker 5e35e350aded
コンテナ実行/停止/一覧/削除
- コンテナ実行には下記のコマンドを使います。
docker container run [OPTION] NAME[:TAG] [COMMAND]
# 指定されたイメージを実行します。
# 引数
OPTION オプション
NAME dockerイメージ名
TAG タグ名。省略した場合はlatest
COMMAND 実行時にdockerコンテナに与えるコマンド
オプション | 説明 |
---|---|
-d | バックググランド実行させる |
-it | Shell実行する際に合わせて指定 |
-e KEY=VALUE環境変数を与える | |
--name NAME実行時のコンテナ名 | |
-p container:host | コンテナポートのホストにマッピング |
- コンテナ停止には下記のコマンドを使います。
docker container stop CONTAINER
# 指定したコンテナを停止します。
# 引数
CONTAINER コンテナID
- コンテナ停止には下記のコマンドを使います。
docker container ls [OPTION]
# コンテナを一覧表示します。
# 引数
OPTION
-a 指定せば全て
- コンテナ削除には下記のコマンドを使います。
docker container rm CONTAINER
# 指定されたコンテナを削除します。
# 引数
CONTAINER Dockerコンテナ名
- コンテナ削除とイメージ削除するには下記のコマンドを使います。
docker system prune
# 使用されていないデータを削除します。
# 引数 なし
演習としてコンテナ実行一覧停止削除の操作を行う。
- ①nginxイメージ実行
- ②実行中コンテナ一覧の確認
- ③コンテナ指定して停止
- ④停止中コンテナ含めた一覧確認
- ⑤不要なコンテナ削除
①nginxイメージ実行
-
nginxイメージを探し、タグを取得。
-
取得した[]タグを使ってnginxイメージ実行
docker container run -d nginx:1.17.2-alpine
↓
イメージが手元にないと自動でダウンロードして起動します。
②実行中コンテナ一覧の確認
docker container ls -a でnginx起動しているか確認
↓
動いてるのを確認できる。
③コンテナ指定して停止
nginxを停止する
docker container stop agitated_satoshi
オプションにはdocker container lsで確認したNAMESを指定する。
docker system prune
使用されていないデータを削除します。
イメージ作成
dockerイメージ作成方法について学ぶ
-イメージ作成の基本
-dockerfile
-ビルド
イメージ作成の基本はプログラムと同じ
「
-
dockerfile
Doker特有のコマンドを利用してイメージ構築手順を定義。 -
dockerfileサンプル
FROM centos:7
COPY docker-entrypoint.sh /var/tmp
RUN mv /var/tmp/docker-entrypoint.sh /usr/local/bin/; \
chmod +x /usr/local/bin/docker-entrypoint.sh;
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["echo", "Hello World"]
FROM <IMAGE>[<:TAG>] ←元となるイメージ名を指定
COPY <SRC>...<DEST> ←ホストからファイルにイメージ転送
RUN <COMMAND> ←イメージ内でコマンド実行
ENTRYPOINT [<COMMAND>,....] ←デフォルト実行、初期化処理などのコマンド
CMD [<COMMAND>,....] ←メインとなるコマンド
オプション | 説明 |
---|---|
-t | イメージ名を指定する |
-f | Dockerfileの名前を指定する |
-ビルド
docker build [OPTION] PATH
# 指定されたDockerfileを利用してdockerイメージを作成します。
引数
OPTION オプション
PATH Dockerfileが保存されているパス。
演習としてDockerイメージの作成、実行を行う
- ①Dockerfileの作成(ベースはCentos7)
- ②環境変数を表示するシェルを作成、コピー
- ③echoコマンドを実行させる
- ④ビルド
- ⑤実行・動作確認
①Dockerfileの作成(ベースはCentos7)
構築したVMの/root/study直下にDockerfile作成。
vi dockerfile
FROM centos:7
COPY docker-entrypoint.sh /var/tmp
RUN mv /var/tmp/docker-entrypoint.sh /usr/local/bin/; \
chmod +x /usr/local/bin/docker-entrypoint.sh;
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["echo", "Hello World"]
上記シェルの処理:
RUNにまとめることで複数のコマンドを実行できる。
chmod +x:実行権限を付与
ENTRYPOINTで ["docker-entrypoint.sh"]を起動
②環境変数を表示するシェルを作成、コピー
構築したVMの/root/study直下にシェルを作成。
vi docker-entrypoint.sh
# ! /bin/sh
env
exec "$@"
上記シェル解説:
env←環境変数表示するコマンド
exec "$@"←cmdで引数に渡されたものを無条件に実行する、
④ビルドする。
docker build -t test .
docker image ls を使用するとtestというイメージが作成出来ている。
testコンテナを実行してみる。
docker run test
シェルに指定された環境変数・ハローワルドが表示される。
続いて、コンテナイメージを削除する。
docker container prune
イメージ公開(DockerHub)
作成したDockerイメージを(DockerHub)に公開する。
- ①Dockerfileの作成(ベースはCentos7)
- ②環境変数を表示するシェルを作成、コピー
- ③echoコマンドを実行させる
- ④ビルド
- ⑤実行・動作確認
DockerHubへ公開する手順
- Dockerイメージへ付与するタグ名
- Dockerイメージのタグ追加
- DockerHubへログイン
- DockerHubへ公開
Dockerイメージへ付与するタグ名のルールは以下の通り
基本構成:ユーザ名/イメージ名:タグ
全角と記号は文字列として使用できない
ユーザ名はdockerアカウント公開するためには必須
- Dockerイメージのタグ追加
docker tag SRC_NAME[:TAG] TRG_NAME[:TAG]
引数
SRC_NAME タグ付けしたいdockerイメージ名
TRG_NAME 追加したいタグ名
- DockerHubへログイン
docker login [-u USER] [-p PASSWORD]
引数
-u USER ユーザ名
-p PASSWORD パスワード
- DockerHubへ公開
docker push IMAGE_NAME[:TAG]
引数
IMAGE_NAME 公開したいdockerイメージ名
続いて演習で作成したイメージのビルド・公開・確認を行う。
前提条件:
先ほど作ったdockerfileとdocker-entrypoint.shがある
dockerfileをユーザーネーム付きでビルドする。
docker build -t <username>/test:v.1.0.0 .
ビルドが完了したので、出来ているか、確認する。
docker image ls
出来ているので、試しにビルドしたイメージを実行させる。
docker run <username>/test:v.1.0.0
公開するためログインする
docker login
ユーザ名、パスワードを入力する。
ログインが出来たらdocker pushで公開する。
docker push <username>/test:v.1.0.0
成功したので、実際にサインインして公開されているかどうか見てみる。
testイメージがアップロードされているのが解る。