Docker入門
発表者K.H
Dockerとは
仮想化技術の1つ
他の仮想化技術としてVM等があるが、VMとの違いを次スライドで説明する。
コンテナと仮想マシンの違い
ハードウェア
ホストOS
(カーネル)
仮想化ソフト
ゲストOS
(カーネル)
ゲストOS
(カーネル)
アプリ アプリ
カーネルを共有しているかどうかの違いのみ
仮想マシン
ハードウェア
ホストOS
(カーネル)
コンテナ管理ソフト
コンテナ コンテナ
アプリ アプリ
コンテナ
ホストマシン ホストマシン
カーネルとは
OSのコアとなるもの
• 仮想マシンでは1台につき1つのカーネルが存在しているため起動に時間がかかる
• 仮想マシンでは完全に環境を分離することができるというメリットも有る
• コンテナではホストOSのカーネルを共有しているため起動が早い
コンテナとは
・プロセスの一つ
ただし、メモリ・CPUなどは仮想的に分離されているためアクセスできない
dockerで解決できること
• 再現性の確保
• 同じ環境を再現しやすい
• 同じ環境を他の人に移すことができる
• Aでは動くのにBでは動かないということがなくなる
• 構成のコード化(Infrastructure as Code)
• 環境構築の手順を自動化できる
dockerを試してみる
dockerを試すにはイメージが必要となり今回はdocker hub(https://hub.docker.com/)から入手する
。
今回使用するのは以下のnginxのイメージ
dockerを試してみる
コンテナイメージをDLする
# docker container run -d nginx:1.22.1-alpine
$docker image pull nginx:1.22.1-alpine
「nginx:」以降の赤字はタグと呼ばれているものでありバージョン等が使用される。使用できる
タグはDocker hubの公式サイトに記載されている。
使用できるタグはdocker hubの説明を参照
dockerを試してみる
ローカルに持ってきたnginxのイメージを使用してコンテナを起動する。
# docker container run -d nginx:1.22.1-alpine
$docker container run -d nginx:1.22.1-alpine
430a8f685612c7d6cab5452f9a1c89e07ef501c2eceab6424bea6e5824ef1ef6
イメージがローカルに存在しない場合はDocker hubからダウンロードするため時間がかかる。
-d オプションをつけることでバックグランドで起動することができる。
使用できるタグはdocker hubの説明を参照
起動しているコンテナを確認する
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
430a8f685612 nginx:1.22.1-alpine "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 80/tcp
inspiring_yonath
dockerを試してみる
起動したコンテナを停止する
# docker container run -d nginx:1.22.1-alpine
$docker container stop {container id}
container idを指定して対象のコンテナを停止する。
container idは「$docker container ls」で確認することができる。
コンテナを削除する
# docker container run -d nginx:1.22.1-alpine
$docker container rm {container id}
# docker container run -d nginx:1.22.1-alpine
$docker container prune
上記どちらかのコマンドでコンテナを削除することができる。
rmコマンドでは指定したcontainer idのコンテナのみを削除する。
pruneコマンドでは使用していないイメージを削除することができる。
コマンドの短縮
本スライドで紹介したコマンドは以下のように省略することができる。
スライドで紹介したコマンド 省略形
docker image pull docker pull
docker container run docker run
docker container ls docker ps
docker container rm docker rm
Dockerイメージの作成
DockerイメージはDocker hubから入手する以外にも自分で作成することが可能である。
ここではDockerイメージ作成の流れは以下になる
1. Dockerfileの作成
2. 1を使用してビルド実行
Dockerfileの作成
以下のようなファイルを用意する
#元となるイメージを指定
FROM centos:7
#ホストからイメージにファイルを転送する
COPY docker-entrypoint.sh /var/tmp
#イメージ内でコマンドを実行
#RUNコマンドを複数記載すると重くなるためできるだけまとめて記載する
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!!" ]
Dockerfile
Dockerfileの作成
以下のようなファイルを用意する
#! /bin/bash
#環境変数を表示
env
#DockerfileのCMDで引数で渡されたものを無条件で実行する
exec "$@"
docker-entrypoint.sh
ビルド
指定したDockerfileを使用してDockerイメージを作成する
$docker build {option} PATH
引数は以下の通り
• PATH
• Dockerfileが保存されているパスを指定する。
• option
• 指定しなくてもビルド可能である
• よく使われるオプションは以下
-t
イメージ名を指定
指定しない場合は以下の様になるためほぼ必須 $docker images
REPOSITORY TAG IMAGE ID
<none> <none> 5fb7f4b1c423
-f Dockerfileの名前を指定
Docker run
作成したイメージを実行する
$ docker run test
HOSTNAME=bc551d715b4e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
_=/usr/bin/env
Hello World!!

Docker入門