<style>
h2 {
text-align:left
}
</style>
# Docker入門
![Docker Logo](https://i.imgur.com/PsoELx6.png)
Presented by MasanoriIwakura
---
## 自己紹介
iwamasa
<img src="https://avatars0.githubusercontent.com/u/28638961?s=400&u=009a8e698165d1f983669457dc93db3eb46a5b9d&v=4"
widh="100" height="100"/>
- 自称サーバーサイド〜ミドルエンジニア
- インフラやフロントエンドも少し触ります
- マイブームはDocker、DevOps、AWS
- 好きな声優:<font color="#FE9A2E">伊波杏樹🍊</font>
---
## Dockerとは
Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアである
VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。
※Wikipediaより
---
# いきなり製品紹介
# されても・・・
---
## 従来の基盤から考えてみよう
---
## オンプレミスでの開発
1. サーバーを調達
2. OSのインストール・設定
3. ミドルウェア等のインストール
4. アプリケーションをデプロイ
---
## 冗長化する場合、
<img src="https://i.imgur.com/GuFcHO4.png"/>
---
### 新しくサーバーを調達する必要がある
<img src="https://i.imgur.com/GuFcHO4.png"/>
<img src="https://i.imgur.com/GuFcHO4.png"/>
---
## しかも、
1台ずつ同じ設定をしなければならない
<img src="https://i.imgur.com/OEh6Mmf.png"/>
<img src="https://i.imgur.com/OEh6Mmf.png"/>
---
## 仮想サーバーの場合
<img width="30%" height="30%" src="https://i.imgur.com/yRND6rj.png"/>
<img width="25%" height="25%" src="https://i.imgur.com/CeVLqyl.jpg"/>
1. OSのインストール・設定
2. ミドルウェア等のインストール
3. アプリケーションをデプロイ
---
## 冗長化する場合
1台サーバーがあればその中に複数台構築が可能
複製も楽に行える
<img width="40%" height="40%" src="https://i.imgur.com/HsCHgMF.png"/>
<font size="-1">※Docker公式の画像を拝借</font>
---
# オンプレ・仮想
# 共通の問題点
---
## 環境差異による障害
→検証環境では動いたのに本番では動かない
<div style="text-align:left; margin-top:1em;">
😈インストール漏れ
<br>
😈設定漏れ
</div>
---
# そこで、
---
## Docker使えば解決できる!!
![Docker Logo](https://i.imgur.com/PsoELx6.png)
---
## Dockerでできること
- 検証環境の構成をそのまま本番へ展開
→環境差異がなくなる
- 環境をコードで管理
→どの環境でも同じ手順でインストール・設定
---
# つまり、
---
### 検証した環境をリリースできる!
### インストール漏れもなくなる!
![](https://i.imgur.com/muQFVfI.png)
---
# 具体的な開発例
---
## 従来の場合
1. アプリ開発
2. サーバー構築・設定
3. ミドルウェアの構築・設定
4. アプリをデプロイ
---
## Dockerを使用する場合
1. アプリ開発、Dockerfileの作成
2. サーバー構築・設定
3. Dockerをインストール
4. Docker上にコンテナ(アプリ)を展開
★ミドルウェアの構築が不要に!!!
★環境差異がなくなる!!!
---
## Dockerの開発環境
- Docker for Windows
- Docker for Mac
- WSL (Windows Subsystem for Linux)
---
## 手軽に試したい場合
- Play with Docker
---
## Play with Docker
インストールの手間がないため、手軽に試せる
https://labs.play-with-docker.com/
---
# 実際に試してみよう
---
アカウント作成・ログイン
<img width="80%" height="80%" src="https://i.imgur.com/araVrzk.png"/>
---
アカウントがない場合は以下から作成
<img width="50%" height="50%" src="https://i.imgur.com/Pek9vtR.png"/>
---
インスタンス作成
<img width="100%" height="100%" src="https://i.imgur.com/Jc4vF5f.png"/>
---
起動すると以下の画面が表示される
![](https://i.imgur.com/sBzvbMJ.png)
---
## Docker上でNginxを使う
以下のコマンドを実行
```bash
$ docker run --name nginx-study -d -p 80:80 nginx
```
![docker run nginx](https://i.imgur.com/RAYa4Hc.png)
---
## 説明
- docker run ・・・コンテナの実行
- --name ・・・コンテナに名前を付与
- -d ・・・デーモン実行
- -p ・・・ポートフォワーディング
---
## 起動を確認
```bash
$ docker ps
```
![docker ps](https://i.imgur.com/hdObEGq.png)
---
## 画面表示確認
![view nginx](https://i.imgur.com/GnJo2pH.png)
---
たったこれだけ!!!
![It works](https://i.imgur.com/T4doknz.png)
---
コンテナの停止・削除
```bash
# コンテナ停止
$ docker stop nginx-study
# コンテナ削除
$ docker stop nginx-study
```
---
## 作成したHTMLを表示する
```bash
# サンプルHTMLを取得
$ git clone https://github.com/MasanoriIwakura/docker-nginx.git
# 実行
$ docker run --name nginx-study -d -p 80:80 \
-v ${PWD}/docker-nginx/html:/usr/share/nginx/html nginx
```
- -v ・・・ホストのディレクトリとコンテナのディレクトリを紐付ける
---
こんな感じで表示される
![](https://i.imgur.com/XhIJrvK.png)
---
## 次回予告
Docker Composeを使って複数コンテナを連携してみよう!
例) PHPコンテナ と MySQLコンテナを連携
---
### ご静聴ありがとうございました。
<!--
話すことメモ
# 自己紹介
# 従来のインフラ構成
- オンプレ
- 仮想
# Docker(コンテナ)について
# 従来の問題点
# Dockerで解決できること
# 開発例
# ハンズオン
- 開発環境
- Docker for Mac
- Docker for Windows
- WSL
- Play with Docker
- 単一コンテナの実行(Nginx)
- Dockerfileの作成・実行
- Docker Composeについて
- 本番環境での使用例
- Kubernetesについて
- クラウド(AWS)での使用
-->
{"metaMigratedAt":"2023-06-14T21:39:46.221Z","metaMigratedFrom":"Content","title":"Docker入門","breaks":"true","contributors":"[{\"id\":\"46a06160-0a53-4802-bc04-b5cdc3540e7e\",\"add\":4684,\"del\":782}]"}