DockerとDocker SDKを触る
勉強会の様子(社員のみ閲覧可能)
話したいこと
Dockerfileの書き方
Dockerイメージ, Dockerコンテナのでき方
Docker SDKの紹介
Dockerのふんわりとしたイメージ
プログラムの実行環境を作れる (Dockerfile, docker build)
作った環境を実行できる (docker run)
作った環境を共有できる (Docker registory)
Docker-docs-ja Part 1:概要説明とセットアップ Dockerの概念
Docker とは開発者やシステム管理者が、コンテナでアプリケーションを **構築(build)、実行(run)、共有(share)**するためのプラットフォームです。アプリケーションをデプロイするために、コンテナを利用する事をコンテナ化( containerization )と呼びます。
Dockerの基本的な使い方
Dockerfileを書く
Dockerfileをビルドする docker build -> Docker イメージができる
Dockerイメージを実行する docker run -> Dockerコンテナが動く
code:Dockerfile
# 元となるDockerイメージ
FROM ubuntu:20.04
# 使うものの準備 コードのコピーとか
RUN touch hoge.txt
# アプリケーションの実行 サーバーアプリケーションとか
CMD 'sleep', '5m'
code:sh
docker build . -t myapp
docker run --name run-myapp myapp
Dockerfileの書き方例
TODOアプリのDockerfile APIの方ですが...
FROM
作成するDockerイメージの元となるイメージを指定する
イメージを探す場所
LABEL
Dockerイメージにメタデータを追加する
COPY
ファイルやディレクトリをコピーする
RUN
イメージ内でコマンドを実行する
CMD
コンテナ実行時の処理を設定する
最後の一つしか処理されない
WORKDIR
ワークディレクトリを設定する
Dockerfileのベストプラクティス
Dockerfileを書く上での推奨とされることがまとめられている
ビルド時にキャッシュをうまく使う書き方
お作法
どういう中身なのか
Dockerイメージ
レイヤはデータや命令の情報を持っている
レイヤがまとまっている
Dockerfileで命令を追加するとレイヤが増える
http://docs.docker.jp/v1.9/engine/userguide/storagedriver/imagesandcontainers.html#id2
http://docs.docker.jp/v1.9/_images/image-layers.png
Dockerコンテナ
Dockerイメージに書き込み可能なレイヤが追加される
コンテナ内でのファイル書き込みや操作はコンテナ・レイヤに保存される
あるコンテナでの操作はそのコンテナ・レイヤ以外に影響しないので同じイメージを共有できる
http://docs.docker.jp/v1.9/_images/container-layers.png
Docker-docs-ja Part 1:概要説明とセットアップ イメージとコンテナ
基本的にコンテナは何もしない(指定したプロセスが動いている)
我々がDockerfileなどでコマンドを指定してコンテナ上でアプリケーションを動かす
コンテナは自分自身のファイルシステム(Dockerイメージ)に含まれるコードやバイナリにアクセスできる
Docker Engine
Docker Engineとは何ですか?
http://docs.docker.jp/v1.12/_images/engine-components-flow.png
Dockerのアーキテクチャとは
http://docs.docker.jp/v1.12/_images/architecture.png
https://docs.docker.com/engine/api/v1.24/
unix:///var/run/docker.sock
curl --unix-socket /var/run/docker.sock http:/v1.24/images/json
Docker SDK for Python
https://docker-py.readthedocs.io/en/stable/
pythonでイメージ取得
コンテナ実行
umamichi.icon Nodeもあった https://www.npmjs.com/package/node-docker-api
Docker SDKで何が作れる
dockerを操作するオレオレアプリを作る(?)
ユーザーから入力されたコードをコンテナに投げて実行結果の成否判定とかすると競技プログラミングのジャッジシステムが作れます
あまり思いつかない
最後
DockerイメージとDockerコンテナは命令やデータを保存したレイヤのまとまり
Docker SDKを使うとプログラムからDockerを操作できて楽しい(?)
Docker SDKを使ってDockerを扱いたい場面がフロントエンドにあるのかな...
面白い技術だと思うので触ってみてもらえたらなと思います
気ままに書いている間に公開されていたとても詳しい記事です
https://qiita.com/zembutsu/items/24558f9d0d254e33088f
https://qiita.com/SatoshiSobue/items/a612ebbb3a9242c09db5
https://qiita.com/yuki_ycino/items/cb21cf91a39ddd61f484
Getting started http://docs.docker.jp/get-started/toc.html
#Docker #勉強会
Created by ihachihiro