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[@ダイジェスト値]
ダイジェストは、@を挟んで指定します。
ダイジェストは、イメージを指定するときに使用します。
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の技術のキーワードを少なからず。覚えた方がいい気がします。
この記事が気に入ったらサポートをしてみませんか?