PRIME TECH TALK #6 Docker編(3) おせんべいずないと

開催日 2020年2月6日

著者環境
macOS Mojave ver
10.14.6
docker desktop
ver 2.2.0.3

今回は、Docker run コマンドをふかぼり!

教材
日本語訳
http://docs.docker.jp/engine/reference/run.html#run-general-form
本国
https://docs.docker.com/engine/reference/run/

講座

Docker runコマンドは、ホスト上にあるコンテナを実行するためのコマンドです。

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

ダイジェスト 一意のIDのことをいいます。

Docker RUNコマンドはRUNコマンド以降に引数がありいろいろ設定を追加できます。

オペレーター専用のオプション

デタッチド とフォアグランド

Docker コンテナを起動する場合、デタッチド (バックグラウンド)かフォアグラウンド で実行します。

デタッチド (-d)

オプションは-dをつけることでデタッチド になります。

$ docker run -d -p 80:80 my_image service nginx start

Unable to find image 'my_image:latest' locally
docker: Error response from daemon: pull access denied for my_image, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

教材を実行するとエラーになります。
解説
$ docker run コマンドで、コンテナを実行します。
-d オプションでデタッチド になります。
-p 80:80 -pオプションで、コンテナのポートを指定します。
my_image イメージ名です。
service nginx start nginxコマンドを開始します。

すぐ落ちてしまう例

$ docker run -d -p 8080:80 nginx:latest service nginx start

結果
CONTAINER IDのロングが表示されます。

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11111a1a1aa1 nginx:latest "service nginx start" About a minute ago Exited (0) About a minute ago admiring_greider

STATUS が Exited (0) なので、 停止したコンテナになってることがわかります。

生存している例

$ docker run -d -p 8080:80 nginx:latest nginx -g 'daemon off;'

結果
CONTAINER IDのロングが表示されます。

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dbfb82cd7b14 nginx:latest "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp loving_agnesi

STATUSが、Up About a minute 起動していることがわかります。

フォアグラウンド 

コンテナの識別

名前(-name)

ここまででも出ましたが、CONTAINER ID(識別子)は、3種類あり、
docker run コマンド後のロング識別子、docker psのCONTAINER IDに表示される、短い識別子、docker psのNAMESに表示される名前の三種類です。
--name オプションのサンプル

 $ docker run -d -p 8080:80 --name="test"  nginx:latest nginx -g 'daemon off;'

結果

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1aa111aa1a11 nginx:latest "nginx -g 'daemon of…" 8 seconds ago Up 7 seconds 0.0.0.0:8080->80/tcp test

NAMESにtestが表示されます。

--nameオプションを追加しないと、 Dockerデーモンが自動的におしゃれな名前をつけてくれます。

PID相当の機能

PIDとはプロセスIDでプロセスIDをファイルに出力します。

空のディレクトリを作り移動します。

$ mkdir hatodocker5 && cd hatodocker5
$ docker run -d -p 8080:80 --cidfile=“cid.txt” nginx:latest service nginx start

結果
識別子が表示されます。
作成したディレクトリをみると、cid.txtが出力され、cid.txtをエディターで表示すると、識別子が表示されます。

image[:タグ]

コンテナを実行するイメージのバージョンを指定できます。
タグは : で挟んでバージョンを指定します。

image[@ダイジェスト値]

Docker run リファレンス — Docker-docs-ja 17.06.Beta ドキュメントdocs.docker.jp


ダイジェストは、@を挟んで指定します。
ダイジェストは、イメージを指定するときに使用します。

PID設定(-pid)

例 コンテナ内でhtopを実行する

今回これが一番面白い。
htopとはLinuxのプロセスのビューワーです。

空のディレクトリを作成と移動します。

$ mkdir hatodocker6 && cd hatodocker6

Dockerfileを作成します。

$ touch Dockerfile

内容はサイト通りに、

FROM alpine:latest
RUN apk add --update htop && rm -rf /var/cache/apk/*
CMD ["htop"]

をDockerfileに貼り付けます。

解説
alpine の最新バージョンをベースイメージとします。
RUN命令でコマンドを実行します。
apkは、パッケージマネージャで、パッケージやアプリケーションをインストールできます。
rm -rf /var/cache/apk/* はキャッシュを削除します。
CMD は、htopを実行します。

 myhtop とタグ付けたイメージの作成します。

$ docker build -t myhtop .

次のコマンドを使用してhtop、コンテナー内で実行します。

$ docker run -it --rm --pid=host myhtop

control + c で停止します。

UTSの設定

UTS名前空間は、ホスト名とNIS ドメイン名を管理します。

IPC設定

IPCでは、Dockerコンテナ間でメモリを共有して管理します。

今回は、ここまで。感想は、LINUXの技術のキーワードを少なからず。覚えた方がいい気がします。







この記事が気に入ったらサポートをしてみませんか?