docker入門

# windows10 homeでdocker環境を構築(chocolatery)
1. chocolateryが使えるように設定<br>※1<br>参考 : https://chocolatey.org/

2. 以下コマンドを実行※1

```cmd:cmd
 choco install docker 
 choco install docker-machine 
```

3. windows homeの場合そのまま使えないためvirtualboxをインストール

```cmd:cmd
 choco install virtualbox 
```

4. ホストがあるか確認

```cmd:cmd
 docker-machine ls
```

5. ホストがないなら作成する。<br>

```cmd:cmd
例)　docker-machine create -d virtualbox default
```

6. ``` docker-machine ls```を実行しステータスがrunningになっていることを確認<br>もしstopになっていたらvirtualboxの仮想マシンを起動できていない


```cmd:cmd
docker-machine.exe env --shell cmd default
```

8. 以下のコマンドを実行(上記のコマンドを実行したときにこれ実行してください的なのが出てくるのでそれをコピペ)

```cmd:cmd
@FOR /f "tokens=*" %i IN ('"C:\ProgramData\chocolatey\lib\docker-machine\bin\docker-machine.exe" env --shell cmd default') DO @%i 
```

9. ipアドレスの確認 

```cmd:cmd 
docker-machine ip 
```

# dockerコマンドを使ってみる
1. コンテナの情報を確認

```cmd:cmd
docker ps -a
```

2. イメージの確認

```cmd:cmd
 docker images 
```

3. コンテナを立ち上げる (-i -tではなく-dにするとバックグラウンドで立ち上がる)

```cmd:cmd
docker run -i -t -p 8080:80 --name 識別するための好きな名前 イメージの名前
```

4. コンテナの停止

```cmd:cmd
docker stop コンテナID又は--nameで指定した名前
```

5. コンテナ再起動

```cmd:cmd
docker start コンテナID又は--nameで指定した名前
```

6. コンテナをシェルで立ち上げる(docker start後)

```cmd:cmd
docker attach コンテナID又は--nameで指定した名前
```

7. コンテナ削除
```cmd:cmd
docker rm コンテナID又は--nameで指定した名前
```

8. イメージ削除

```cmd:cmd
docker rmi イメージID     (例：docker pull amazonlinux
``` 

9. プル

```cmd:cmd
 docker pull プルしたいイメージ
```

10. docker fileを使う
 - Dockerfileという名前でファイルを作成（拡張子なし）中身は以下のような感じ<br> 

```
From amazonlinux
RUN yum update -y
RUN yum install httpd -y
```
 - Dockerfileという名前でファイルを作成（拡張子なし）
 - Dockerfileが置かれている場所で以下を実行するとnewawsってimageが作成される(newawsは好きな名前でok)
 - コンテナ作成

```cmd:cmd
docker build -t newaws .
```
 - できたことを確認

```cmd:cmd
docker images
```
 - イメージと同じように使える

```cmd:cmd
docker run -it --privileged --name aws newaws
```



#docker上でamazonlinuxを立ち上げapacheで接続
1.amazonlinuxのイメージをダウンロード

```cmd:cmd
docker pull amazonlinux
```

2.仮想サーバーに接続

```cmd:cmd
docker-machine ssh default
```

3.魔法の呪文？

```cr:cmd
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
```

4.-vをつけることでサーバーとdockerのディレクトリをリンクさせる(docker-machineは Windows環境であれば、
C:\Users をVirtualBox共有フォルダとしてdockerホストの /c/Users に自動マウントしてくれます)

 - --privilegedと/sbin/initはsystemctlを有効にするためにつける
-pでdockerの80番ポートを仮想サーバーの8080ポートで使用するという意味

```terminalal:cmd
docker run  -v /c/Users/yoy_n/docker:/var/www --privileged -d -p 8080:80 --name aws amazonlinux /sbin/init
```

もしdockerfileを使用するなら

```terminal:cmd
docker build -t newaws .
docker run -v /c/Users/yoy_n/docker:/var/www --privileged -d -p 8080:80 --name aws newaws /sbin/init
```

 - Dドライブを-vで使用したいなら

```
# VboxManageで D:\ を d として共有フォルダを追加
VBoxManage sharedfolder add dev --name d --hostpath 'D:/' --automount

# dockerホスト上に共有フォルダ d を /d にマウントする
docker-machine ssh dev 'sudo mkdir -p /d'
docker-machine ssh dev 'sudo mount -t vboxsf -o uid=0,gid=0 d /d'

# dockerホストにマウントした /d をコンテナ内の /d でData Volumeとして利用する
docker run -v /d:/d ubuntu ls -la /d
```

5.立ち上げ

```terminal:cmd
docker exec -it aws /bin/bash
```

6.webルート確認

```terminal:cmd
httpd -S -D SSL
```

7.var/www/htmlになっていたら以下実行

```terminal:cmd
mkdir var/www/html
#apache起動
systemctl start httpd
systemctl status httpd
```

#番外編
1.virtualboxとローカルPCのファイル共有

2.環境変数の設定
 - PC->プロパティ->システムの詳細設定->環境変数->システム環境変数
 - 変数名　VBoxManage
 - 変数値　C:\Program Files\Oracle\VirtualBox

3.設定後cmd再起動

```terminal
VirtualBox VMs/VM-Share
```

4.virtualboxでローカルPCの共有したいpathを指定
参考:https://pc-karuma.net/virtualbox-folder-share/

5.仮想環境（virtualbox）で下記コマンド実行(sample2はvirtualboxで指定した名前)

```terminal
sudo mount -t vboxsf sample2 /var/www/html
```

※1　管理者権限でインストール必要

# mysqlの設定

```cmd:cmd
#mariadbがインストールされているか確認
$ yum list installed | grep mariadb
mariadb-libs.x86_64                   1:5.5.56-2.amzn2                 installed

#mysqlがインストールされているか確認
$ yum list installed | grep mysql

#mysqlがインストールできるか確認
$ yum info mysql
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
エラー: 表示するパッケージはありません

#mysql8.0リポジトリの追加（このリポジトリに5.7も含まれています）
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

#mysql8.0リポジトリの無効化
$ sudo yum-config-manager --disable mysql80-community

#mysql5.7リポジトリの有効化
$ sudo yum-config-manager --enable mysql57-community

#mysql5.7がインストールできるか確認
$ yum info mysql-community-server

#mysqlインストール
$ sudo yum install mysql-community-server -y
$ mysqld --version
mysqld  Ver 5.7.22 for Linux on x86_64 (MySQL Community Server (GPL))

#自動起動設定
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
$ systemctl status mysqld.service


set global validate_password.policy = "LOW";
set global validate_password.special_char_count = 0;

systemctl status mysqld.service

mysql -u root -p -D sample -P 13306 -A
```

```sql:sql
status;
CREATE DATABASE sample_db;
use nikatsu_sample

SELECT CURRENT_USER();
-- 説即しているdb名
SELECT DATABASE();
show databases;
use データベース名;
```

#コンテナをイメージに出力

```cmd:cmd
docker commit コンテナ名 イメージファイル名
```