大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

(環境構築後)docker-composeを使ったDocker環境での開発ルーティン

1.Docker Desctopを起動

2.Windows Powershellを開く。

3.docker-compose.ymlがあるディレクト入りで下記実行。docker起動。

docker-compose up -d

4.コンテナにログイン

docker exec -it laravel_app bash

 5.下記にアクセス

http://localhost:8000

6.コンテナ停止と削除

docker-compose down

 

DockerにPython環境構築

前回の続き。

https://rintaro2019.hatenablog.com/entry/2021/05/05/201052

 

今回は下記を参考にDockerにPython環境構築します。 

 

※dockerはインストール済みの状態。

下記記事の内容に、requirements.txtにbeautifulsoup4だけ入れてやってみる。

https://techacademy.jp/magazine/47408

beautifulsoup4

 

①Docker Desktopを起動

②設定ファイルを作成したディレクトリで下記コマンド実行→ビルド&起動

docker-compose up -d --build

 

-dオプションについて

コンテナをバックグラウンド実行します。このオプションを付けない場合、コンテナ起動時に実行されるコマンドを実行した状態になり、例えばそのコマンドのコンソール出力が表示された状態になります。

https://knowledge.sakura.ad.jp/13795/

③optディレクトリができているので、コードを書いてその中にファイルを保存。

④下記コマンドでコンソールに入って、実行

docker-compose exec python3 bash

docker-compose exec {サービス名} {コマンド名}

 ⑤コンテナ停止と削除

docker-compose down

 

<上記に至るまでに調べたこと>

・dockerにpython

https://techacademy.jp/magazine/47408

https://qiita.com/reflet/items/4b3f91661a54ec70a7dc

・docker全般
https://knowledge.sakura.ad.jp/13795/
https://knowledge.sakura.ad.jp/14427/

 

pythonコンテナに、beautiful soupも入れ込みたい。

疑問〇スクレイピングをするには、HTML取得ライブラリも要るっぽいので、それも入れたい。何を入れたら良いのか。

requests

BeautifulSoupを使う場合には、だいたいこのモジュールも呼び出すことになる。
requestsは取得したHTTP構造から必要な情報(テキスト)を取得するのに使う。

pip install requests

https://web-kiwami.com/python-beautyfulsoup4.html

 

HTML の取得は requests を使い、HTML のパース処理を Beautiful Soup でやるのが基本的な使い方です。

https://qiita.com/Chanmoro/items/db51658b073acddea4ac

 

例えば Python から HTTP API を利用する場合、何も考えずにすぐ requests などの便利な HTTP クライアントモジュールを入れてしまいがちだが、冷静になって考えると「その程度の用途なら urllib.request で十分では」と思うことは少なくない。

 https://qiita.com/hoto17296/items/8fcf55cc6cd823a18217

 疑問〇dockerfileとかってどこに置いたらいいの?

https://www.metrocode.co/blog/post/use-docker-for-local-development

←ずばり答え!

 

疑問〇どのタイミングでコンテナ削除すればいいの?不要な時っていつ?

①DockerにPythonの実行環境を構築

まずはurllibだけでやってみることに。

urllibは付属しているのでわざわざインストールしなくても良いっぽい。

https://www.atmarkit.co.jp/ait/articles/1910/15/news018.html

 

■ちなみに、基本のイメージの作成方法は下記っぽい。
(1) サーバOSとか、基本のイメージを取得(CentOSとか) ※以降実施したコマンドは全てメモしておくこと!
(2)↑の中で、必要なツールをインストール
(3)実施したコマンドを写したDockerfileを作成
(4)作成したDockerfileを使ってDockerイメージを作成
(5)このDockerイメージを使用して、コンテナを起動

・サーバのOSは何が良いのか。
CentOSでよさそう。
https://wiki.python.org/moin/BeginnersGuide/Download

・webサーバアプリは何が良いのか。→ApacheかNginxか
https://qiita.com/kamihork/items/49e2a363da7d840a4149

実際には、Docker Hubで公開されているDockerイメージそのままではなく、そこに必要なミドルウェアやアプリをインストールして利用する場合が出てきます。

→DBサーバと分けた方が良いのか? ずばりの回答が以下。
https://teratail.com/questions/123306
やり方の例が以下。
https://qiita.com/nagi244/items/e5de6fc062fdcc5004e9

・dockerコンテナ・イメージって毎日使い終わるたびに削除すべきなの?

https://qiita.com/chroju/items/ce9cae248cc016745c66

Docker入門

dockerインストールを完了してコマンドが使用できる状態。

以下記事に従ってdockerの流れを実践。

https://knowledge.sakura.ad.jp/13795/

https://docs.docker.jp/docker-for-windows/index.html

 

①Docker Desktopを開く

→dockerコマンドで操作できるようになる。

②試しにhello-worldイメージを取得して起動する

docker run hello-world

ローカル環境にDockerイメージが無いため、Docker Hubに探しに行き、存在すればDockerイメージをダウンロード。

hello-worldイメージのダウンロードが完了したら、そのイメージを使用してコンテナを起動させている。このhello-worldイメージは、コンテナ起動をしたら、コンテナの中でHello from Docker!~のメッセージを出力するようなDockerイメージなので、そのメッセージが出力されたら、無事起動できたということ。

③イメージ取得確認

>docker images

④コンテナとその状態確認

>docker ps -a

⑤コンテナの削除

# docker rm <コンテナ名> (コンテナ名はdocker ps -aで確認)
または
# docker rm <CONTAINER ID> (コンテナIDはdocker ps -aで確認)

→④で削除できたかどうかを確認

停止中のコンテナをそのままにしておくと、ゴミデータが残ったままになったり、ディスク圧迫にもつながるので、不要になったコンテナは削除を忘れないように!

 

⑥イメージの削除

# docker rmi <Dockerイメージ名> (docker imagesのREPOSITORYで確認?)
または
# docker rmi <IMAGE ID> (docker imagesで確認)

→③で削除できたかどうかを確認。

イメージについても、不要なイメージは削除しましょう。特に、JenkinsなどのCI(Continuous Integration) ツールを使用して、Dockerイメージの作成やコンテナ起動を自動で実行するような場合、気づかないうちに不要データが残り続けて、ディスクを圧迫することになるので注意しましょう。(Disk Fullを起こすと、Docker環境の復元も困難になる場合があるので、十分注意したほうが良いです。)

https://knowledge.sakura.ad.jp/13795/

 

■その他のTips

・イメージの取得

docker pull <image name>

・取得したイメージを使用してコンテナを起動

docker run -d --name <命名したいコンテナ名> -p 8181:80 nginx

-d オプション・・・コンテナをバックグラウンド実行します。このオプションを付けない場合、コンテナ起動時に実行されるコマンドを実行した状態になり、例えばそのコマンドのコンソール出力が表示された状態になります。

–name オプション・・・コンテナ名を指定します。(これが無いと、自動で指定される)

-p オプション・・・ホストとコンテナ間のポートフォワード設定。-p ホストとコンテナ間のポートフォワード設定。基本的には、「-p <ホスト側のポート>:<コンテナ側のポート>」で書きます。(ホスト側を省略すると自動で設定されます。)コンテナは、Dockerにより作成されるネットワークに属するため、このオプションを使わないと、ホストのIPアドレスを用いて、コンテナで使用しているポートにはアクセスができません。

STATUSが「Up」のコンテナの停止

docker stop <container name>

Windows 10 Homeでdocker環境構築

・Windows10HomeでVirtualBoxを使っている状況でdockerを使いたい場合は、Docker Toolboxのインストールが必要らしい。 https://kawadev.net/docker-windows-python3/ ・dockerにはwindows home用のインストール方法も書いてあるけど、「Windows 上で WSL2 機能の有効化」とやらが必要なのと、VirtualBox共存を解決できるかが不明なので、toolboxにしてみる。 https://docs.docker.jp/docker-for-windows/install-windows-home.html

・Docker Tolboxとは

Toolbox には以下の Docker ツールが入っています。 Docker Machine を操作する docker-machine コマンド Docker Engine を操作する docker コマンド Docker Compose を操作する docker-compose コマンド Docker GUI である Kitematic シェルに接続できる Docker コマンドライン環境 Oracle VirtualBox https://qiita.com/KIYS/items/8ac37f6757a6b7f84569 https://docs.docker.jp/toolbox/overview.html →もうダウンロードできなくなってる!!!

・Dockerとは コンテナ型仮想化。ホストOSのカーネルを利用する。 通常、1コンテナ1プロセスで使用するためWebサーバコンテナとかDBサーバコンテナとかログ管理コンテナとか複数のコンテナを立てる構成。 ホストOSのカーネルと異なるOSは動かせない。

DockerではDocker Engineを中心に複数のコンポーネント単位で機能が開発されている。必要に応じて複数のコンポーネントを組み合わせて使用する。 ・Docker Engine Dockerイメージ作成やコンテナ起動などを行うDockerのコアコンポーネントLinuxカーネルの機能を使ってメインの処理を行い、Dockerデーモンとして動作する。 ・Docker Compose 同一ホストOS上の複数コンテナを一括管理するコンポーネント。"docker-compose.yml"ファイルに複数コンテナの構成情報を定義し、docker-composeコマンドで起動や停止などの管理をする。通常、複数のサーバ群(コンテナ群)で1つのサービスを構成するため、それらをまとめるcomposeの需要がある。 ・Docker Machine 非Linux環境用にDockerの実行環境をコマンドで自動生成するコンポーネント

Docker Hubは公式レジストリサーバです。 公式のDockerイメージ(officialと記載されているもの)の他に一般のユーザの独自イメージも公開されている。

Dockerfileはコンテナの構成情報を定義したファイルである。 buildコマンドでDockerfileからDockerイメージを作成する。 https://qiita.com/gold-kou/items/44860fbda1a34a001fc1

Dockerイメージはコンテナを立ち上げるために必要なミドルウェアなどの設定やコマンドが、ひとまとめになったテンプレートです。

コンテナはDockerイメージをもとに作られたWebサーバやDBサーバなどが動く仮想環境のこと。

①Docker Tolboxのインストール https://qiita.com/KIYS/items/8ac37f6757a6b7f84569 https://docs.docker.jp/toolbox/overview.html

①Docker Desktopインストールのために、Windows 上で WSL2 機能の有効化。 https://docs.microsoft.com/en-us/windows/wsl/install-win10#manual-installation-steps (1)Power Shellを管理者権限で開いて、下記コマンド(Windows Subsystem for Linuxオプションを有効化) dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart (2)Windowsロゴ+Rを押す→下記を入力してOK押す→要件に合っているか確認 入力:winver For x64 systems: Version 1903 or higher, with Build 18362 or higher. For ARM64 systems: Version 2004 or higher, with Build 19041 or higher. (3)Power Shellを管理者権限で開いて、下記コマンド(仮想化の有効化) dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart (4)PC再起動 (5)the Linux kernel update packageをダウンロード・インストール (6)Power Shellを管理者権限で開いて、下記コマンド(WSL2をデフォルトバージョンに指定) wsl --set-default-version 2 (7)Linuxディストリビューションをインストール ※以下ステップに移る (8)下記コマンドで各LinuxディストリビューションのデフォルトWSLバージョンを確認可能。 wsl -l -v

②Docker Desktopインストール https://docs.docker.jp/docker-for-windows/install-windows-home.html https://docs.docker.com/docker-for-windows/install/ インストーラに含まれるもの: Docker Engine, Docker CLI client, Docker Compose, Notary, Kubernetes, and Credential Helper. インストールページ:https://www.docker.com/products/docker-desktop

③WSL2のメモリ上限を設定 https://kahoo.blog/howto-wsl2-docker-install/#WSL2-2 下記ファイルをログインユーザフォルダ直下に設置 ファイル名:.wslconfig

[wsl2] memory=2GB

④dockerコマンドが使えないので、パスを通す https://qiita.com/yagrush/items/fbb7d23d1d4f73eb27a1#%E3%82%82%E3%81%97docker%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%89 [システム環境変数]グループボックス内の「Path」を選択して [編集]ボタン https://rintaro2019.hatenablog.com/entry/2019/09/03/234609

→>docker --version 実行OK

Windows10にVagrantとVirtualBoxでCentOSの仮想環境を構築⑭VirtualBox Guest Additionsのインストール

https://qiita.com/sudachi808/items/edc304b3ee6c1436b0fd 上記の通りに実行。

[vagrant@localhost ~]$ sudo yum update kernel [vagrant@localhost ~]$ sudo yum install kernel-devel gcc [vagrant@localhost ~]$ exit vagrant halt

VirtualBoxを開く VirtualBoxマネージャの該当マシンの「設定」→「ストレージ」→コントローラ横の「+ボタン」(光学ドライブ追加)→光学ドライブをコントローラIDEに追加する」→「空のままにする」→OK

コマンドラインvagrant up

VirtualBoxを開く VirtualBoxマネージャで該当マシンの「表示」→メニューバーの「デバイス」→「Guest Additionsを挿入」

コマンドラインで @localhost $ mkdir /mnt/cdrom @localhost $ mount /dev/cdrom /mnt/cdrom @localhost $ sudo ls /mnt/cdrom

カーネルの場所を確認 sudo ls /usr/src/kernels/

カーネルの場所を環境変数に登録 export KERN_DIR=/usr/src/kernels/[①で調べた通り]

③Guest Addtionsのインストール sudo /mnt/cdrom/VBoxLinuxAdditions.run

→下記エラー。 VirtualBox Guest Additions: Kernel headers not found for target kernel 3.10.0-1160.15.2.el7.x86_64. Please install them and execute /sbin/rcvboxadd setup modprobe vboxguest failed

解決策参照:https://qiita.com/wz7777/items/2e62932f2ad5baf2e6a3

headerはインストール済みだった。

[vagrant@localhost ~]$ sudo yum install kernel-devel-3.10.0-1160.15.2.el7

vagrant reload

[vagrant@localhost ~]$ sudo /sbin/rcvboxadd setup →完了。

共有フォルダ設定 vagrant halt ②Vagrantfileを編集 config.vm.synced_folder ".", "/vagrant", type:"virtualbox" vagrant up

→同期確認OK

Windows10にVagrantとVirtualBoxでCentOSの仮想環境を構築⑬Dドライブで仮想マシン構築

仮想マシン用のディレクトリを作成 今回はDドライブ直下に作成。 D:\vagrant\centos7

Vagrantのページから入手したいOSのBoxを選ぶ。

https://app.vagrantup.com/boxes/search

CentOSを選択。検索結果一覧でBox名をクリックし、Newタブをクリックすると、下記のように実行すべきvagrantコマンドが記載されているので、コピーしておく。

vagrant init centos/7 vagrant up

③①で作成したディレクトリに移動し、②のコマンドにより、Vagrantfileを作成する。 Powershellを開く。 cd D:\vagrant\centos7 vagrant init centos/7

④Vagrantfileをエディタで開いて修正する

参考:https://qiita.com/tiwu_dev/items/f135e6b6fbbe3ec6aa54 config.vm.network "private_network", ip: "192.168.33.10"

↑上記一行のコメントアウトを消す。

⑤Vagrantfileの内容に従って仮想マシンを構築、起動させる vagrant up

⑥起動したら、仮想マシンにログイン vagrant ssh

⑦状況確認 vagrant status 仮想マシンのステータスを表示

つくった仮想マシンを削除する場合

vagrant destroy

 

VMのシャットダウンは

vagrant halt

 

休止は

vagrant suspend 

参考サイト

https://qiita.com/hidekuro/items/fc12344d36d996198e96#1-virtualbox-vagrant%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

https://kitsune.blog/linux-environment#Vagrant%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

https://qiita.com/hiroyasu55/items/11a4c996b0c62450940f

Vagrant upのエラー事例

PS D:\vagrant\centos7> vagrant up Bringing machine 'default' up with 'virtualbox' provider... (中略) ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... There was an error while executing VBoxManage, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "d8f773c2-8e47-44b6-ab61-47222531730c", "--type", "headless"]

Stderr: VBoxManage.exe: error: Not in a hypervisor partition (HVP=0) (VERR_NEM_NOT_AVAILABLE). VBoxManage.exe: error: VT-x is disabled in the BIOS for all CPU modes (VERR_VMX_MSR_ALL_VMX_DISABLED)

VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

https://teratail.com/questions/241968 仮想化が無効化になっているので、BIOS設定変更で仮想化を有効にする必要がある。