1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

k8s環境ハンズオン docker学習編

Last updated at Posted at 2020-01-17

k8s環境ハンズオン docker学習編

もくじ

  • Dockerの概念を理解する。
  • Dockerの基本操作を覚える。

Dockerの概念を理解する

dockerコンテナ実行してdockerの理解を深める

hello-worldというdockerコンテナを実行:
docker run hello-world
10.jpg

ちなみに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

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イメージがアップロードされているのが解る。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?