プロジェクトを進めなければならないが、Linux環境のアパッチとMySQLが必要な状況だ。ドッカーを利用して環境を構成してみよう。何か整理ができなくて散漫な知識だけど一応書いておく。まず、私が使っているパソコンはWindows10 Proがインストールされている状態だ遼によると、Windows10 Pro以上でのみドッカーを設置できるという。 それ以下のバージョンでもインストールすることはできるが、仮想環境のための複雑なプロセスが追加されるため、頭が痛くなる。
あ!!もう一度確認してみたら、2020年5月にWindows 10 May 2020 Update(20H1)アップデートがリリースされ、WSL2が正式リリースされ、Windows 10 Homeでも可能だという。 Windows 10/11 Professional / Education / Enterprise エディション WSL2 ベース Docker Engine 使用可能 Hyper-V ベース Docker Engine 使用可能
Windows 10/11 Home エディション WSL2ベース Docker Engine 使用可能
ドッカーは仮想環境を使用するため、「Windows機能のオン/オフ」で「Hyper-V」機能をすべてチェックして機能をインストールしなければならない。
**[1]問題発生及び解決**私の場合、図に示す”Hyper-Vハイパーバイザー”がチェックされない問題が発生した。たくさん迷って結局、私のパソコンのBIOSで仮想環境に対する設定がオフになっていることが分かり、これをつけてくれた。よく覚えていないがBIOS設定に入ってVirtualなんとかいう2つをすべてEnableに変更させてくれた。そして再びHyper-Vを設定すると、上図のようにすべてチェックが完了した。WSL2 (Windows Subsystem for Linux 2) インストールであれ、なぜしたのか思い出せないが、Hyper-V設定の過程で迷ってWindowsのPOWER SHELLを管理者として実行し、以下の命令を実行してくれた。 (なぜか必要かも知れないから書いておく)
# dism.exe /online /enable-protocols /protocolname :Microsoft-Windows-Subsystem-Linux /all /norestart
**[2]問題発生及び解決**wsl kernel version toolowこれもよく思い出せませんが、ドッカーをインストールする過程で上記のようなエラーが発生しましたが、これは命令ウィンドウからwsl -updateに簡単に解決されたようです。
C:\Users\bong> wsl –アップデート
C:\Users\bong> wsl –アップデート
wsl — アップデート
[参考] https://parang4jq.uc.edu.kh/enx/wsl-kernel-version-too-low/ 最終インストールが完了した私のドッカー環境紆余曲折を経て、ドッカー設置が完了した私の環境を確認してみましょう。https://ko.linux-console.net/common-images/install-apache-on-centos-7/Start-Enable-Apache.pngC:\Users\bong> wsl -l -vC:\Users\bong> docker バージョンC:\Users\bong> wsl -l -vC:\Users\bong> docker バージョンWSL-VWSL-Vドッカー版ドッカー版ドッカー設置および必要なイメージ実行、偶然見つけた内容だが、以下の資料がよく整理された感じだ。 この内容を最初に読むべきだったのに、全部迷って探した。 ㅠ.ㅠhttps://www.lainyzine.com/ko/article/a-complete-guide-to-how-to-install-docker-desktop-on-windows-10/ ドッカーのインストールはDocker Desk Topをダウンロードしてインストールすればよい。グーグルで検索してウィンドウ用にインストールしてくれる。インストールが完了したら、コマンド ウィンドウを開いてドッカーに必要な画像をインストールしてみよう。必要なドッカーコマンドコンテナ照会(ps)C:\Users\bong> ドッカーC:\Users\bong> ドッカードッカーps中止となったコンテナを含めて照会(ps-a)しますC:\Users\bong> ドッカー -aC:\Users\bong> ドッカー -aドッカーズ-aドッカー中止です(stop)C:\Users\bong> docker stop <コンテナ名またはID>C:\Users\bong> docker stop <コンテナ名またはID>docker stop <コンテナ名またはID>ドッカー開始(start)及び再起動(restart)C:\Users\bong> docker start <コンテナ名またはID> C:\Users\bong> docker restart <コンテナ名またはID>C:\Users\bong> docker start <コンテナ名またはID> C:\Users\bong> docker restart <コンテナ名またはID>docker start <コンテナ名またはID>docker start <コンテナ名またはID>docker restart <コンテナ名またはID>コンテナ接続 (attach)C:\Users\bong>dockerattach<コンテナ名またはID>C:\Users\bong>dockerattach<コンテナ名またはID>docker attach <コンテナ名またはID>コンデーナ削除(rm)C:\Users\bong> dockerrm <コンテナ名またはID>C:\Users\bong> dockerrm <コンテナ名またはID>dockerrm <コンテナ名またはID>ドッカー画像の削除(rmi)及び強制削除(rmi-f)C:\Users\bong> dockerrmi <コンテナ名またはID>C:\Users\bong> dockerrmi <コンテナ名またはID>dockerrmi <コンテナ名またはID>コンテナ付き強制削除C:\Users\bong> dockerrmi-f <コンテナ名またはID>C:\Users\bong> dockerrmi-f <コンテナ名またはID>dockerrmi-f <コンテナ名またはID>ドッカーにアパッチウェブサーバーイメージ実行ウィンドウにドッカーを設置したので、ドッカーイメージでアパッチを上げて実行してみよう。1.アパッチイメージダウンロード(pull)最新バージョンのアパッチでダウンロードする。C:\Users\bong> docker pull httpd:latestC:\Users\bong> docker pull httpd:latestdocker プル httpd:削除2.画像設置確認(status)設置された画像を確認します。C:\Users\bong> ドッカーのステータスC:\Users\bong> ドッカーのステータスドッカー状態3.アパッチコンテナを実行します(フォルダ共有なしの形で実行する場合)C:\Users\bong> docker run -d –name apache -p 8080:80 httpd を実行するC:\Users\bong> docker run -d –name apache -p 8080:80 httpd を実行するdocker run -d –name apache -p 8080:80 httpd[オプション説明] -d: detached mode (サーバーモードであるため)–name: コンテナに名前を付ける (コンテナ区分のため)-p: [ホストポート]: [コンテナポート]ホストのポートをコンテナポートにフォワーディング (同じポートを使用してもよい)4.ホストとコンテナ間のフォルダを共有するようにして実行するときC:\Users\bong> docker run -dit –name apache -p 8080:80 -vC:/Users/bong/Desktop/apache_htdocs:/usr/local/apache2/htdocs/httpd を実行しますC:\Users\bong> docker run -dit –name apache -p 8080:80 -vC:/Users/bong/Desktop/apache_htdocs:/usr/local/apache2/htdocs/httpd を実行しますdocker run -dit –name apache -p 8080:80 -vC: /usr/local/apache_htdocs: /usr/local/apache2/htdocs[オプション説明] -dit: -dオプション + -i オプション + -tオプション。 (バックグラウンド + コンテナ内のターミナル入力) – v: [ホストフォルダ]: [コンテナフォルダ]。 コンテナフォルダとホストフォルダが同じフォルダを共有する。ドッカーボリュームを利用してhostとcontainerがフォルダを共有する方式だ。 上記命令でホストの”~/Desktop/apache_htdocs”フォルダをアパッチコンテナの”/usr/local/apache2/htdocs/”と共有する。つまり、便利なためにアパッチのウェブサーバーrootディレクトリをホストと共有する。結果確認ホストとフォルダを共有する形でドッカーにアパッチを実行した。C:\Users\bong\Desktop\apache_htdocsパスにindex.htmlファイルを次のように作っておいてブラウザで結果を確認してみようファイル名:index.html<!doctype html><html><head><meta charset=”UTF-8″><title>これはタイトル</title></head> <body><H2>タイトル領域</H2><HR>の内容です </body></html>結果ブラウザを開いてアドレスバーにhttp://localhost:8080に接続してみる。 上で作成したindex.html がよく見られる。 成功だ。Docker-Composeやdocker-composeが楽に見えたので、この方法で進めた。Docker-Compose 실행docker compose -p “project name” up –build 첫 docker compose -p “project name” up -d “プロジェクト名” up -d “プロジェクト名” をビルドする※ 命令実行時にエラー関連-pオプションを除いて実行する場合、”project nammust not be empty docker compose”エラーが発生しました。=>プロジェクト名を必ず入力するように最近変更されたようです。Docker-Composeコマンドを修正して再実行しますdocker compose -p “myprj” -f docker-compose.yml up -d[オプション説明] – p: プロジェクト名で必須値です。Docker-Compose中止生成されたドッカー画像がすべて一緒に消えます。docker compose -p “myprj” ダウン[オプション説明] – p: プロジェクト名で必須値です。docker-composeを使用するためには、まずdocker-compose.ymlファイルを作成する必要があります。ファイル名:docker-compose.ymlversion: ‘3’ services:nginx:image:nginx:certbot restart: – ./conf/nginx.conf: /etc/nginx.conf – ./data/certbot/conf: /etc/lets encrypt – ./data/certbot encrypt – . / certbot ports :- 80:80-443 : image: certbot/certbotrestartbot restart : untvolumes: –.etclate v。/data/certbot/www:/var/www および certbot証明書の発行後に修正されたdocker-compose.ymlバージョン: ‘3’ services:nginx:image:nginx:crypto restart: – ./data/nginx: /etc/nginx/conf.d – ./data/certbot/conf: /etc/letsencrypt – . /data/certbot/www: “80:80”- “443” コマンド: “//bin/sh ‘h & wait${; sleep 6h & wait $}!}; nginx -s reload; done & nginx -g \\”daemon off;\\””certbot:image: certbot/certbot restart: 停止していないボリュームの場合を除き、次のように設定します。 -./data/certbot/www: /var/www/certbot エントリポイント: “/bin/sh-c’trap exit TERM; while :; do certbot reneed; sle 12h & wh&waile & wh&wal!}; 完了;””ファイル名 : nginx.confですserver { listen 80; listen [::]:80; server_name localhost; // location /.well-known/acme-certbot/{all を許可します。 root /var/www/certbot;}}認証書の発行後、修正されたnginx.confですserver { listen 80; server_name localhost; # サーバをオフにします。 /.well-known/acme-request/{ root /var/www/certbot;} location / {return 301 https://$host$request_uri;}}server { listen443 ssl; # サーバをオフにします。ssl_etcryptserver_example.org/fullchain.pem; の例ですrg( ssl_set_slate_key /etc/letsencrypt/live/example.org/privkey.pem; # example.or を参照してください。 /etc/letsencrypt/sl-ssl-nginx.conf; ssl_dhparams.pem; location / { proxy_pass <http://example.org >; proxy_set_real-IP$remote_addr.proxforwarded}} を指定します最終修正されたDocker-Composeファイル最終変更されたDocker-Composeファイルは次のとおりである。Apach、Tomcat、MySql そしてSSL 認証のための設定をすべて含む。最終修正されたDocker-Composeファイル最終変更されたDocker-Composeファイルは次のとおりである。Apach、Tomcat、MySql そしてSSL 認証のための設定をすべて含む。ドッカー画像に接続しますdocker exec -it apache2 /bin/dockerdocker exec -it apache2 /bin/dockerdocker exec -it mysql /bin/docker コマンドドッカー画像に接続後、エディタインストールコンテナに接続すると何もインストールされていませんので、編集のためにvimをインストールしてあげましょう$ $ apt-get update $apt-get install vim $現在接続中のドッカーコンテナを抜け出したい場合は、exitコマンドを入力してください。$ $ exitCreating a localhost SSL certificate This was done by referring to the following.https://dev.to/vishalraj82/using-https-in-docker-for-local-development-nc71 . First, decide which domain name to use.I decided to name it my_host.local.2. Access the docker image and add the domain name (my_host.local) to be used in the /etc/hosts file.127.0.0.1 my_host.local3. The PC does port forwarding, so it registers the same on the PC.Add the same to the C:\Windows\System32\drivers\etc\hosts file on your PC.127.0.0.1 my_host.local4. Check to see if I can get access to the added domain. http://my_host.local:8000 For me, I got access to 8000 because I set port 8000 as web server port.5. Install tools for issuing certificates from docker images.appropriate install libns3-tools -y6. Download and install additional modules for issuing certificates.This should be downloaded from github, but there is no wget, so I installed wget first.You need to download a file that matches your equipment. In my case, I received it as an arm series.appropriate installation wget -yDownload the github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 file to the /usr/local/bin path.wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm647. Change the execution properties of the downloaded file.chmod +x mkcert-v1.4.4-linux arm64@65d: Local/l6d: Local/l/bin_r/bin_l/bin_R/bin_v1k: @r1.4.4.l -s mkcert-v1.4.4- linux-arm64 mkcertroot@65dcf7117d6d:/usr/local/bin# ln-smkcert-v1.4.4-linux-arm64mkcert9. Set local equipment to be CA root.mkcert install@65dcf7117117d:/s local CA generation is now installed in the system.mkcert \-cert-file my_host.local.crt \-key-file my_host.local.key \my_host.local.localroot@65dcf7117d6d:/usr/local/bin# mkcert \> -cert-file my_host.local.crt \> -key-file my_host.local.Key \> My_host, local authentication is located in “My_host.local time).Key’s in kindergarten.This certificate expires on November 11, 2025.root@65dcf7117d6d:/usr/local/bin# mv my_host.local.crt/etc/nginx/certs/my_host.local.crtroot@65dcf7117d6d:/usr/local/bin# mv my_host.local.key/etc/nginx/certs/my_host.local.key12. Modify the docker-compose.yml file to use the certificate.You only need to modify the nginx.conf file here.12. 12. Modify the docker-compose.yml file to use the certificate.You only need to modify the nginx.conf file here.※Caution: The following should always be added to the /etc/host file because it will reset if the docker is re-run.127.0.0.1 my_host.local127.0.0.1 my_host.local127.0.0.1 my_host.local