Docker
OSS の Linux 📝コンテナ(OS)
- site: Docker - Build, Ship, and Run Any App, Anywhere
- github: docker/docker
特徴
- Go でかかれている.
- Linux カーネルにのみ依存.
- デプロイの作業が自動化できる.
- github, bitbucket とも連携.
- Docerfile によってインフラをコードとして扱える.
- ゲスト OS がなくカーネルを共有しているのでオーバヘッドが非常に少ない
- ディスク使用量は少ない.
- インスタンス作成やインスタンス起動は速い
- 性能劣化がほとんどない
- Linux コンテナ上ならば同じ環境が再現できる (Java と同じ考え)
- クライアント・サーバ型のアーキテクチャ
🐥Glossary
イメージ
コンテナ
Docker の使い方 Basics
Hello, World
まずは, 定番の Hello World をしてみる. コマンドラインから,
$ sudo docker run ubuntu /bin/echo 'Hello World'
これを叩くと, ローカルに docker のイメージがない場合は, Docker Hub から勝手にダウンロードしてくれる.
docker は image からコンテナを生成する(クラスからインスタンスを生成するように)
% sudo docker run ubuntu /bin/echo 'Hello World'
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
c4ff7513909d: Download complete
er.io/v1/ 9d: Pulling image (latest) from ubuntu
511136ea3c5a: Download complete
1c9383292a8f: Download complete
9942dd43ff21: Download complete
d92c3c92fa73: Download complete
0ea0d582fd90: Download complete
Hello World
bash を起動してみる
bash を起動して, インタラクティブに操作 -i -t /bin/bash のオプションをつける.
$ sudo docker run -t -i ubuntu /bin/bash
ping してみる
-d をつけると, コマンドを実行しっ放しにしておくことができる.
$ docker run -i -t -d base /bin/ping -i 5 www.google.com
- docker attach {ID} で 起動中のコンテナに乗り込める.
- docker logs {ID}起動中のコンテナの出力を確認できる.
仮想環境構築に docker を使う - apatheia.info]]
port を指定する
docker run 時に -p をつけることで, コンテナから外部にさらすポートを決められる. コンテナ側のポートはホスト側のポートに変換される際, ポート番号が変更される (49153 以降になる) ので, docker port <ジョブの ID> <ポート番号> あるいは docker ps でポートの対応状況を確認する必要がある.
run 起動オブション
代表的なもののみ抜き出した.
% docker help run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
-a, --attach=[] Attach to stdin, stdout or stderr.
-d, --detach=false Detached mode: Run container in the background, print new container id
-i, --interactive=false Keep stdin open even if not attached
-p, --publish=[] Publish a container's port to the host
-t, --tty=false Allocate a pseudo-tty
イメージとコンテナ
一覧表示
現在保持している image は docker images で確認できる.
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 c4ff7513909d 3 days ago 213 MB
ubuntu latest c4ff7513909d 3 days ago 213 MB
また, 過去に生成したコンテナも含めて一覧を確認するコマンドは docker ps -a.
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78941163261a ubuntu:14.04 /bin/bash 12 minutes ago Exited (0) 11 minutes ago clever_perlman
894d649c27d4 ubuntu:14.04 /bin/echo 'Hello Wor 13 minutes ago Exited (0) 13 minutes ago stupefied_rosalind
9d34b4889593 ubuntu:14.04 /bin/echo 'Hello Wor 14 minutes ago Exited (0) 14 minutes ago romantic_bohr
a986cb096871 ubuntu:14.04 /bin/echo 'Hello Wor 15 minutes ago Exited (0) 15 minutes ago tender_sinoussi
cbbca1119327 ubuntu:14.04 /bin/echo 'Hello Wor 15 minutes ago Exited (0) 15 minutes ago mad_babbage
c6824e447da7 ubuntu:14.04 /bin/echo 'Hello Wor 17 minutes ago Exited (0) 17 minutes ago sleepy_bardeen
削除
とりあえず, すべてを一旦削除したい.コンテナをすべて削除.
$ sudo docker rm $(sudo docker ps -a -q)
指定したキーワードで引っかかったコンテナを削除
$ docker ps -a |grep "tsune" | awk '{print $1}' | xargs docker rm
続いて, イメージもすべて削除.
$ docker rmi $(sudo docker images -q)
コミット
コンテナは起動が終了すると破棄される.起動中のコンテナを再利用するためには, 起動中のコンテナを commmit コマンドでイメージに変換する必要がある.
$ sudo docker commit 15cb2a03c788 centos:test
作成したイメージから新たな Docker コンテナを起動するには, -t オプションの後ろにタグを指定します.
$ sudo docker run -i -t centos:test /bin/bash
SSH
ssh でコンテナにアクセスする. コンテナの中で openssh-server を立ち上げ.パスワードを設定.
apt-get install openssh-server
mkdir /var/run/sshd
/usr/sbin/sshd
passwd root
exit
root でアクセスできるように設定変更.
vi /etc/ssh/sshd_config
PermitRootLogin yes
run.sh に sshd が勝手に起動するように修正.
vi run.sh
# 追加
/usr/sbin/sshd -D &
ここまでの作業を commit.
docker commit ${ID} tsune/wordpress
Dockerfile
OS のスクラッチイメージからアプリが動くまでを書いたコード.
Docker 関連技術
Docker Hub
Docker コンテナをクラウドサービス上で共有できる.
🔧Jib
refs: 🔖Java 📝Google Cloud Run w/ Clojure
Googleの開発したJavaアプリのためのコンテナ作成ツール.
Dockerfileを書かなくてもImageをBuildできることが特徴.
Jib を使用して Java コンテナを構築する | Google Cloud
逆引きリファレンス/Tips/Howto
Dockerドキュメント及び関連ドキュメントの逆引きリファレンス.
🔧howto: Dockerイメージのビルド時に環境変数を渡すには?
Dockerfileで変数を取り扱うにはARGとENVという設定項目がある.
- ARG: docker imageをビルドするときに使える外から渡す変数.
- ENV: ビルド後のコンテナ内に設定される内部で使う環境変数.
docker bulid コマンドに —build-arg で環境変数を指定する.
ref. 構築時の変数を指定(—build-arg) — Docker-docs-jaドキュメント
dockerリソース管理
- 容量確認
- docker system df
- docker images
- 削除
- docker system prune: 全ての停止中のコンテナ、未使用イメージ、未使用ネットワークを削除
dockerで NVIDIA GPUをつかう
ホストPCのNVIDIA GPUを使う場合、NVIDIA Container Toolkit をinstallする必要がある.