Dockerの使い方 2日でDocker習得編 (udemy 米国AI開発者がゼロから教えるDocker講座)


Docker マスコットのmobyくん

目標 

祝日丸一日 8/10   半日勤務日 8/11の合計2日(実質1.5日)でDockerを叩き込む

以下、学習のログ (1日目)

前提

Q 仮想化とは?
 仮想化は、PCの中に仮想的なコンピューターを作る技術です。一台のPC内に、MAC、Windowsなど別のPCが入っているイメージです。(そう見せかける技術)

Q 仮想化とコンテナの違い
 コンテナは仮想OSを立ち上げる必要がありません!ホスト(自分のPC)のOSのカーネルを共有することによって、
 独立した環境設定を作る技術です。

クラウドとのつながりが深いので、クラウドの勉強もするとより解像度が上がりそうです。(今度、深めます)

Qクラウドとは?
 サーバーの一部を貸し出すことです。
 ex)AWS
AWSの用意したマシンのリソース(容量)のうち、ある部分だけを仮想マシンを作ってもらい、使わせてもらうことです。

概念基本

基本操作

LINUXコマンド 内容

cd <path>|        pathに移動 (cd = change the directory)
pwd|              現在のディレクトリを表示
mkdir|             <new folder> 新しいフォルダを作成
touch <new file>| 新しいファイルを作成
ls |              cd のフォルダ一覧を表示
rm <file> |      fileを削除
rm-r <folder> |  folderを削除 

kernerlとShell

shellを起動するためのアプリがターミナル

1 Docker image 作成(hubを使う)

1 Docker hub へログイン
$docker login

2 hubからimageをpullする
$docker pull

3 docker image を起動(run) (コンテナを作る)
$docker run -it <image> bash

4 コンテナから出る 
$exit

5 ホストにあるコンテナ一覧表示
$docker ps -a

6ホストにあるイメージを表示
$docker images

7exit状態のコンテナに入る
$docker restart

8指定したプログラムを実行
$docker exec -it<container> bash

9コンテナから新しいimageを作る
$docker commit images

10新しい名前にをタグづけする
$docker tage <oldname><newname>

11 docker hub にあげる
$docker push

docker layer のイメージ 
(point) 新しく層(layer)を追加するだけで、コンテナに機能(プログラムex pythonなど)を追加できる。

3 Docker コンテナ

Q runとは? 
A run = create+ start

コンテナの削除

$ docker rm  削除(1〜)  (※複数指定したい場合は、スペースあける)
$ docker system prune 全削除

コンテナの名前をつける
$docker run --name<name> image

コンテナの使い方 2つ
1 常に起動    
2 時々使い、すぐ捨てる

detatch mode (コンテナを起動後、deatchする)
$docker run -d <image>

foregraound mode (一回きりの起動で捨てる)
$docker run --rm <image>

4 Docker file

Docker file→Docker image を作る(ビルド)

dockerfileの作り方
INSTRUCTION (命令コマンド)  argument(引数) で作る
主な4つ
FROM
ADD
RUN
CMD

FROM image   元となるイメージ
FROM ubuntu:latest

RUN Linux コマンドの実行
RUN touch test (ファイルを作成)

(重要)Docker image layerの数は最小限にする
 (理由)runするたびにコンテナが作られ、開発現場において、容量が圧迫される
(layer を作るのはrun,copy,addの3つ)

CMD コンテナのデフォルトのコマンドを指定
CMD[executable(コマンド)]
最後に記述する
・1つのDockerfileに一つだけ

docker context と docker deamonの仕組み

Docker Context(状況・環境) =Docker fileのあるFolder のこと
Docker Context(★フォルダまるごと)をデーモンに渡し、デーモンが処理を行うことでコンテナが作られる。

COPYとADD

基本COPYでよい
ADDはホストに圧縮したファイルがあって、それを解凍してコンテナ落としたいときに使う。

ENV 環境変数を設定 (↓よくある書き方2選)
ENV 1
2 =

WORKDIR
デフォルトだとdcokerfileからdockerimageを作る際、コンテナ側のroot直下にフォルダを作成する。
それを避けるために、WORKDIRで作りたいフォルダを指定する。

ホストのファイルシステムをコンテナにマウントする

目的
・コンテナを軽くするため(共有するものであるため)
コンテナは解析をするための場所(実行環境)として使い、ホストにコードを置く。

<マウントのやり方>
docker run (-it) -v <hostのパス> <containerのパス> (bash)
 ★-vをつけてコンテナを実行する
 ★かなりの頻度で使う
 ★コンテナ操作側がroot権限で実行するため、セキュリティ上問題

root権限問題の解消 (ユーザーIDとグループIDを指定して、コンテナをRUNする)
run -u <ユーザーID>:<グループID>
        $(id -u):$(id -g) 

#Linuxコマンド
ユーザーIDの指定 
id -u
グループIDの指定
id -g

パーミッション(アクセス権限)見方

d   rwx    rwx        rwx       (実際 drwxrwxw-xwなどと書かれる)
 (所有者)  (所有グループ)  (その他)

"d"ディレクトリ  "-"ファイル   "l"シムリンク

ホストのポートをコンテナのポートにつなげる

※ポート・・アクセスできる入り口
ネットワーク通信で必要な「プロトコル」 「IPアドレス」と「ポート番号」が必要
ex)マンション 、「どのような方法」で「どこのマンション(コンピュータ)」の「何号室(何番ポート)」を使うか

重要     ホスト→コンテナへポートを繋げるやり方

-p <host-port>:<container-port>

コンテナをWEBサービスとして立てる

CPU・メモリの上限を設定する

*共同開発だと1台のホストサーバー(クラウド上など)に負荷がかかりすぎて、ダウンすることもある・・。

<やり方>

$docker run -it --rm --cpus 4 --memory 2g ubuntu bash
                      (CPU上限) (メモリ上限)

コンテナの情報を一覧表示

dockler inspect <container>
docker inspect <container> | grep -i cpu #特定の情報のみ表示 ここではCPU

補足 
・コンテナを実行するとroot権限(管理者権限=何でもできる権限)になる。
・環境変数
・OSが持っている変数(全てのプログラムに適用される) 変更可能
ex)HOME,PATH,USER
・プロンプト($) 意味 ここから入力しなさい
・CLI コマンドでのマシンとの対話
・Registory ソフトの情報が書いてあるところ