###### tags: `docker` # Docker/k8s 輪読会 ch2.4~2.6 :whale: ## :white_check_mark: 今回の目標 * LinuxとDockerコマンドを復習する * docker-composeで実行する * ch3: [実用的なコンテナの構築とデプロイ](https://hackmd.io/@rhHzPg4WS26yfiXdOaOMTg/HJCnty4pS) ## :no_entry: 注意事項 * Docker CEのインストールおよび設定を終えている前提です * docker-composeのインストールが完了している前提です * 本の内容通りに進まないため、本の内容は各自で復習してください * 発表者はDockerの素人です、お許しください :bow: 2章後半[ソース](https://github.com/nakajima1412/docker-k8s/tree/master/ch2) ## 復習: Linux & Docker コマンドの練習 ### Linux環境の構築 ---  下記のDokcerfileを作成し、Linuxのコマンドを色々叩きましょう 1. イメージの指定 2. aptで`htop tree`パッケージをインストール 3. bash 起動 バックスラッシュは改行しても1行のコマンドとするためのものです ==Dockerfile== ```dockerfile= FROM debian:stretch-slim RUN apt update && apt install -y \ htop \ tree CMD ["/bin/bash"] ``` Dockerfileのあるディレクトリでイメージを作成します docker build [オプション] [イメージ名] [パス] ```bash $ docker build -t debian-ex . ``` imageができているか確認 ```bash $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE debian-ex latest ae41d24b056a 12 seconds ago 71.8MB ``` docker run -[オプション] [イメージ名] [実行内容] でコンテナ内に入ります ```bash $ docker run -it debian-ex bash ``` docker内に入ると次のようなコンソールが表示されます ```bash root@97b10cc4b4bc:/# ``` ### Linuxコマンドの演習 --- Docker内のコンソール上で色々なコマンドを叩いてみましょう コマンドを意味と関連付けると覚えやすいと思います 参考:[Linuxコマンドは単語の意味を理解するとグッと身近なものになる](https://qiita.com/tetsuya/items/46888bb4dfc8a6bfef02) * top, htop 実行中のプロセスをグラフィカルに表示するコマンド サーバの障害発生時にはまず叩くコマンド ※普通は`top`を使いますが、イメージのなかにないです:innocent: ```bash root@97b10cc4b4bc:/# htop ``` 停止するのは`ctrl + C` * ls, tree `ls`:ディレクトリの一覧を表示するコマンド, オプションによって色々できる `tree`:木構造表示 ```bash root@97b10cc4b4bc:/# ls root@97b10cc4b4bc:/# ls -a #all オプション root@97b10cc4b4bc:/# ls -lt #long format + time sort オプション root@97b10cc4b4bc:/# tree #表示終了は q を押す ``` * cd ディレクトリ移動するコマンド `change directory` の略語と思われます ```bash root@97b10cc4b4bc:/# cd etc root@97b10cc4b4bc:/# ls #etc内のファイルを確認 ``` * cat, less ファイルの中身を確認するコマンド ※今回のイメージには`less`コマンドはありません ```bash root@97b10cc4b4bc:/# cat /etc/os-release ``` * exit サーバから出るコマンド ```bash root@97b10cc4b4bc:/# exit ``` 実行後は通常のコンソールに戻ります ```bash $ ``` ### Linux 環境の破棄 Linuxコマンド演習で作成した環境を破棄します * 全コンテナの確認 ```bash $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5eb5503bddcf debian-ex "bash" 23 minutes ago Exited (0) 13 minutes ago cocky_kalam 97b10cc4b4bc debian-ex "bash" About an hour ago Exited (0) 23 minutes ago wizardly_thompson ``` * 停止中のコンテナの破棄 途中で `y` を入力 ```console $ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 5eb5503bddcf9863383605388100a268f7be920fb9521951bb24c1ac942f4921 97b10cc4b4bc6e9564c2daf38e0cbf13dae25d9965dbf8bc9c726d04573d118a Total reclaimed space: 348B ``` * イメージの確認 ```bash $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE debian-ex latest f8d60d795e4d About an hour ago 72.9MB ``` * イメージの削除 ```bash $ docker image rm debian-ex Untagged: debian-ex:latest Deleted: sha256:f8d60d795e4d4b6f7d473b2a491c0c84ea243fc58e2df45d42a7049f22e93d17 Deleted: sha256:a803bac52663f792af1a270ddfdf4f70e1b21f7aa4d3a46896d8b9d9ca0437cb Deleted: sha256:c2b8c1ff1294a0342cf8322478573997d18cf0ab581741344fe233ac6dd20481 ``` ### Dockerfile作成演習1 :steam_locomotive: --- slパッケージをインストールしたイメージを作成し、このイメージからslコマンドを実行するコンテナを実行してください。 * Dockerfile | 項目 | 内容 | | ---------- | ------------------- | | イメージ | debian:stretch-slim | | CMD | /usr/games/sl | * ヒント 下記のDockerfileの空欄部分を完成させる ==Dockerfile== ```dockerfile= FROM RUN ENV TERM xterm #環境変数の設定 CMD [""] ``` 実行するもの ```bash $ apt update $ apt install -y sl ``` ### 解答例 ```dockerfile= FROM debian:stretch-slim RUN apt update && apt install -y sl ENV TERM xterm CMD ["/usr/games/sl"] ``` ```bash docker build -t sl . docker run --rm sl ``` ### Dockerfile作成演習2 :fish: --- asciiquariumパッケージをインストールしたイメージを作成し、このイメージからslコマンドを実行するコンテナを実行してください。 * Dockerfile | 項目 | 内容 | | ---------- | ------------------- | | イメージ | fedora:latest | | ENTRYPOINT | /usr/bin/asciiquarium | * ヒント 実行するもの ```bash $ dnf install asciiquarium ``` ENTRYPOINT: P42をみてください ### 解答 ```dockerfile= FROM fedora:latest RUN dnf install -y asciiquarium ENTRYPOINT /usr/bin/asciiquarium ``` ```bash $ docker build -t fish . $ docker container run -it fish ``` ## 2.5 Docker Compose でマルチコンテナを実行する Composeはysml形式の設定ファイルで、複数のコンテナ実行を一括で管理できます。 また、ネットワーク、依存関係、環境変数を設定することができます。 ### yamlファイル --- [Get started with Docker Compose](https://docs.docker.com/compose/gettingstarted/)を例に解説します。 全体のコードは[こちら](https://github.com/nakajima1412/docker-k8s/tree/master/ch2/ex5)においておきます。 ==dcoker-compose.yml== ```yaml version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine" ``` * version docker-composeのバージョンを指定します。 ```yaml version: '3' ``` * services 起動コンテナを定義します。 今回は`web`,`redis`の2つの起動を定義しています。 ```yaml services: web: redis: ``` コンテナイメージは、次の`image`か`build`によって指定する必要があります。 * image コンテナを起動するDocker imageを指定します。 redisは公式のイメージを指定しています。 ```yaml image: "redis:alpine" ``` * build Dockerfileをもとに`$ docker build -f `を実行します。 ```yaml build: . ``` * ports ポートフォワーディング行います。 `ホストのポート:コンテナのポート`を指定します。 dockerコマンドの場合、 `-p 5000:5000` オプションと同一です。 ```yaml ports: - "5000:5000" ``` * volume ボリュームをマウントします。 ```yaml volumes: - .:/code ``` * environment 起動するコンテナの環境変数を定義します。 今回はflaskの環境設定をしています。 ```yaml environment: FLASK_ENV: development ``` ### コンテナの起動 ```bash $ docker-compose up ``` `ctrl` + `C` でコンテナ内から抜けることができます。 オプションで`-d`をつけることで、バックグラウンドで起動できます ```bash $ docker-compose up -d ``` ### コンテナの停止・削除 ```bash $ docker-compose down ``` ### テキストの内容を実行 ch2.5の内容を実行してみましょう(homework) ```yaml= version: "3" services: echo: image: example/echo:latest ports: - 9000:8080 ``` ## docker-compose実行演習 [Dockerfile作成演習1](https://hackmd.io/xjO0dMYJTPeVhE76r41Xbg?view#Dockerfile%E4%BD%9C%E6%88%90%E6%BC%94%E7%BF%921-)で作成した`sl`イメージを用いて、docker-composeを実行してください。 dokcer-compose | 項目 | 内容 | | -------- | -------- | | service | 3 | | 起動コンテナ | sl | | イメージ | sl | ### 解答例 ```bash $ docker-compose up ``` [ソースファイル](https://github.com/nakajima1412/docker-k8s/tree/master/ch2/ex6)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up