#Dockerの活用 展望 - 全部で3回 - 1回1時間 - Dockerの基本からDockerを利用したアプリケーションの実施まで ## Dockerとは何か Linux上で動作するアプリケーションのコンテナ実行環境 Build once, run anywhere # 第1回 ``` docker run hello-world ``` ### Virtulization(仮想化) 大きく分けて物理ハードの仮想化とOSの仮想化が存在 - 物理ハードの仮想化 - Hypervisor - Xen - Hyper-V (Microsoft) - VMware (VMware) - Xen (Open Source & citrix) - Emulation - qemu - OS仮想化 - Docker - Linux - Windows - Windows OSを仮想化可能 - Root less(コンテナの実行にルート権限が不要) - Podman (RedHat) - Linux - RedHatが開発してDockerとコマンドが互換 - Singularity - Linux - スパコンセンター等ユーザーの権限を制御する必要がある分野で良く利用されている ## Dockerの良い点 ## Dockerの概念 - Container image - Dockerのアプリケーションの塊 - Container instance - Dockerのcontainer imageから作成した実行可能なアプリケーションの実態 ## 基本的なDockerコマンド docker のimage に対するコマンドとcontainer(imageのインスタンス)に対するコマンドが有る - docker container run - dockerコンテナの実行 - docker runでもOK - 指定したイメージを実行(ホストに無ければダウンロード) - dcoker image pull - Dokcer イメージの取得 - docker pullでもOK - docker container ps - コンテナの一覧 - docker ps でもOK ### 停止する方は pause, stop, kill と3種類 - docker container pause - 実行中のコンテナの一時停止(コンテナが利用しているメモリ等は開放されない, CPUの負荷は無くなる) - docker pauseでもOK - docker container unpause - 一時停止中のコンテナの再開 - docker unpauseでもOK - docker container stop - 実行中のコンテナの停止内部で動作中のアプリケーションは終了 - docker stopでもOK - docker container start - 停止中のコンテナの実行再開 - docker startでもOK - docker container commit -停止中のコンテナからimageを作成 - docker commitでもOK - docker container kill - 実行中のコンテナを問答無用で - docker pauseでもOK ## ホストのディスクVolumeのマウント ## ネットワークの仮想化 - port forwarding - docker network ## Docker Containerの場所 - https://hub.docker.com - Docker本家のコンテナリポジトリー - https://quay.io - Red Hatのコンテナリポジトリー リポジトリーの - https://biocontainers.pro - バイオ系ツールの探索!! # 2回目 少しは役に立つことをやってみる ## apache のサーバーを立ち上げてみる ball001 にログインして各自のユーザー名のディレクトリを作成 作成したディレクトリに移動 `index.html` ``` <html> <head> <meta charset="utf-8"> <title>KDRI genetest server</title> </head> <body> This is Ikeda's private server. </body> </html> ``` dockerコンテナの起動 ただし、8081の部分はそれぞれ別のポートにする ikeda: 8081 takazawa: 8082 sishika: 8083 tfujishi: 8084 ``` docker run -d -p 8081:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4.54 ``` ##Dockerfileの作成 `Dockerfile` に必要な事項を記述 ``` FROM ubuntu:20.04 CMD ["/usr/bin/bash", "--version"] ``` コンテナの作成 ``` docker build -t "自分のユーザー名" . ``` コンテナの実行 ``` docker run "自分のユーザー名"  ``` ### RUN の指定 ``` FROM ubuntu:20.04 RUN apt-get update && apt-get install -y \ vim ``` ### COPYの指定 ``` FROM ubuntu:20.04 RUN apt-get update && apt-get install -y \ vim COPY index.html /tmp/ ``` 任意の名前のDockerfileを指定する場合 ``` docker build -t "自分のユーザー名" -f "Dockerfile" . ``` ``` docker run -it ubuntu:20.04 ``` ## 稼働中のコンテナのファイルをコピーする ``` $ docker run -d -p 8090:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4.54 e5a01cf61a169fbe3bd078799840b0af8906fac09d8892d063acabf735c8797b ``` ``` docker cp e5a01cf61a16:/usr/local/apache2/conf/httpd.conf ./ ``` ``` https://hub.docker.com/_/httpd ``` ## Docker build 自分で必要なアプリケーションをコンテナ化する Dockerコンテナの作成 Dockerfileというファイルに必要な項目を記載してbuildする Dockerfileの構成要素 - FROM - LABEL - RUN - CMD - EXPOSE - ENV - ADD - COPY - ENTRYPOINT - VOLUME - USER - WORKDIR - ONBUILD # 第3回 ##復習 emacs を起動してファイルを編集してみよう ターゲットのコンテナ `silex/emacs` ## 単純に起動 ``` docker run -it silex/emacs emacs ``` ### Volume Mount ``` run -it -v ${PWD}:/work silex/emacs emacs ``` ### uidをさらに設定 ``` run -it -v ${PWD}:/work -u `id -u`:`id -g` silex/emacs emacs /work/emacs.txt ``` # Dockerのstart, stop, kill `count_up.sh` として下記のスクリプトを作成 ``` #!/usr/bin/bash # Count up an int and overwright the file each second. CURRENT=`date` for i in `seq 0 3600` do echo ${CURRENT}: ${i} > "test.txt" sleep 1 done ``` このスクリプトをアプリケーションとして含むコンテナを作成 - Dockerfileの構築 - FROM - COPY - CMD