- 投稿日:2021-04-05T18:48:25+09:00
【ペチオブ】仮想環境ハンズオン 第5回 Docker Compose編
Docker Composeハンズオン ハンズオン資料 Linux基礎編 VirtualBoxハンズオン Vagrantハンズオン Dockerハンズオン Docker Composeハンズオン 今回の目的 今回の目的は、VirtualBox上にVagrantを使ってUbuntu OSのインストール、PHPの実行環境の構築を行います。 YouTube版 【ペチオブ】仮想環境ハンズオン 第5回 Docker Compose編 動画を高評価、チャンネル登録いただけるとより多くの方へオススメ表示されるので良いと思った方はご協力いただけるとありがたいです? 完成版 完成版はGitHubにプッシュしてます。 概要 Composeは、複数コンテナのDockerアプリケーションを定義して実行するためのツールです。 Docker単体だとコンテナ毎にコマンドやオプションをたくさん指定する必要がありましたが、複数のコンテナに対して実行できます。 ハンズオン $ mkdir docker-compose-handson $ cd docker-compose-handson サンプルソースをgit cloneしておく $ git clone https://github.com/ucan-lab/infra-handson-shop shop php/Dockerfile $ mkdir php $ vim php/Dockerfile FROM php:7.4-apache-buster ENV DB_HOST=db ENV DB_NAME=shop ENV DB_USER=phper ENV DB_PASS=secret RUN apt-get update RUN docker-php-ext-install pdo_mysql DB_HOST=db ここだけDockerハンズオンと異なります。 コンテナ名ではなく、サービス名で接続できます。 mysql/Dockerfile Dockerハンズオンと同じDockerfileを作ります。コピペしてきてもokです。 $ mkdir mysql $ vim mysql/Dockerfile FROM mysql:8.0 ENV MYSQL_DATABASE=shop ENV MYSQL_USER=phper ENV MYSQL_PASSWORD=secret ENV MYSQL_ROOT_PASSWORD=secret COPY ./my.cnf /etc/my.cnf mysql/my.cnf Dockerハンズオンと同じmy.cnfを作ります。コピペしてきてもokです。 $ vim mysql/my.cnf [mysqld] character_set_server = utf8mb4 # 文字コード collation_server = utf8mb4_ja_0900_as_cs # 照合順序 docker-compose.yml $ vim docker-compose.yml version: "3.8" services: web: build: ./php ports: - 8200:80 volumes: - ./shop:/var/www/html db: build: ./mysql volumes: - db-storage:/var/lib/mysql volumes: db-storage: YAML (ヤムル) YAML 公式 YAML wiki yamlの書き方 YAML Ain't a Markup Language インデント(字下げ)を使って、データの階層構造を表現する。 そのため、インデントが崩れると実行できなくなるので注意する。 docker-compose.yml オプション説明 version https://docs.docker.com/compose/compose-file 現時点の最新バージョンは3.8 バージョン2系の記述は古いので注意 services コンテナを定義します。 web, db サービスを定義(サービス≒コンテナ) build Dockerfile が存在するディレクトリを指定する https://docs.docker.com/compose/compose-file/#build ports ポートを公開します。(ポート転送) ホストのポート:コンテナのポート volumes ホストパスまたは名前付きボリュームをマウントします。 environment コンテナ内で使用できる環境変数を追加します。 サービスのコンテナをビルド $ docker-compose build Building web ... Successfully built b85983a00e56 Successfully tagged docker-compose-handson_web:latest Building db ... Successfully built 4077115f617f Successfully tagged docker-compose-handson_db:latest サービスのコンテナを作成、開始 $ docker-compose up -d Starting docker-compose-handson_web_1 ... done Starting docker-compose-handson_db_1 ... done -d, --detach Detached mode: Run containers in the background, print new container names. バックグラウンドでコンテナが起動します。 コンテナの一覧 $ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- docker-compose-handson_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp docker-compose-handson_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8200->80/tcp 補足1: Name 補足: db がサービス名、docker-compose-handson_db_1 がコンテナ名です。 db サービスは 3306/tcp, 33060/tcp のポートが起動してます。 補足2: Command Commandに書かれてるコマンドが現在実行中、または最後に実行されたコマンドが表示されています。 補足3: State コンテナのステータスです。 db, webサービスが起動(State: Up)していることを確認します。 補足4: Ports db 3306: 従来のMySQLプロトコルポート 33060: Xプロトコルと呼ばれるMySQLの新しい接続方式のプロトコルポート web 0.0.0.0:8200->80: ホスト側の8200ポートへアクセスするとwebコンテナの80ポートへ MySQL 初期データ設定 dbコンテナのmysqlコマンドを実行してMySQLへログインします。 $ docker-compose exec db bash $ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE テストデータを入れます。 create table shop.items ( id int primary key auto_increment, name varchar(30) comment '商品名', stock int default 0 comment '在庫数' ) comment='商品テーブル'; INSERT INTO shop.items (name, stock) VALUE ("Apple", 10); INSERT INTO shop.items (name, stock) VALUE ("Bad Apple", 1); 動作確認 http://127.0.0.1:8200 ショップアプリがphpを実行してmysqlからデータの取得や更新が行えていればokです。 さいごに お疲れ様でした! Docker Compose ハンズオンいかがでしたでしょうか。 コンテナをまとめて起動、停止できる docker-compose はとても便利ですね。 ボリュームやネットワークの設定も簡単に行えるようになりました。
- 投稿日:2021-04-05T11:57:52+09:00
Nginx not starting: Address already in use (nginx: bind to 0.0.0.0:80 failed)
概要 ローカルでnginxを起動しようとするとタイトルエラーになったので解決方法をメモ 結論 apacheがすでに起動しており、80番portを使っていたため $ sudo nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use) nginx: [emerg] still could not bind() 80番portを使用しているプロセスを確認してみると、httpd(apache)を発見 $ sudo lsof -i:80 httpd 77 root 4u IPv6 0xd09cf808e840caf7 0t0 TCP *:http (LISTEN) httpd 253 _www 4u IPv6 0xd09cf808e840caf7 0t0 TCP *:http (LISTEN) httpd 638 _www 4u IPv6 0xd09cf808e840caf7 0t0 TCP *:http (LISTEN) httpd 671 _www 4u IPv6 0xd09cf808e840caf7 0t0 TCP *:http (LISTE やったこと apacheのstop sudo apachectl stop nginxを起動 sudo nginx 念の為、起動できているか確認 ps -ef | grep nginx 0 24549 1 0 11:33AM ?? 0:00.00 nginx: master process nginx -2 24550 24549 0 11:33AM ?? 0:00.00 nginx: worker process 無事起動できました!
- 投稿日:2021-04-05T10:27:41+09:00
それ行けlive patch! Amazon Linux 2で実機検証
はじめに 某ベンダで、クラウドの人材育成企画と研修トレーニングのデリバリを担当しています。 研修準備のためオンプレとクラウドの運用差分を整理していたのですが、Amazon Linux 2でlive patchができる記事を見つけちゃいました。 ◯ Kernel Live Patching on Amazon Linux 2 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/al2-live-patching.html Oracle Unbreakable Linuxは、Live Patchができることは知ってたのですが、Amazon Linux 2もできるとのこと。上記の手順を参照に気に実機で検証してみました。 前提条件 以下の環境で試します。 [AMI] Amazon Linux 2 AMI (HVM), SSD Volume Type ami-06202e06492f46177 (64-bit x86) [Instance Type] c5.large 設定手順は、rootユーザ権限を前提にします。 カーネルバージョンは↓です。 # uname -r 4.14.209-160.339.amzn2.aarch64 1. パッケージのインストール パッケージbinutils、yum-plugin-kernel-livepatch、kpatch-runtimeを追加します。 # yum install binutils # yum install -y yum-plugin-kernel-livepatch # yum kernel-livepatch enable -y Loaded plugins: kernel-livepatch, priorities, update-motd Loaded plugins: priorities, update-motd Trying to run the transaction but nothing to do. Exiting. Complete! kernel-livepatch enable True done # yum install -y kpatch-runtime # yum update kpatch-runtime 2. kpatchサービスの設定 systemctlコマンドで、kpatchサービスを設定します。 # systemctl enable kpatch.service # systemctl start kpatch.service # systemctl status kpatch.service 3. Amazon Linux 2 Kernel Live Patchingリポジトリの有効化 Kernel Live Patchingリポジトリを有効化します。 # amazon-linux-extras enable livepatch # amazon-linux-extras enable livepatch | grep live 43 livepatch=latest enabled [ =stable ] カーネルパッチリストのアップデート 次は、カーネルパッチリストのアップデートです。 # yum updateinfo list Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities, : update-motd amzn2-core/2/x86_64 | 3.7 kB 00:00 amzn2-core-debuginfo/2/x86_64 | 2.6 kB 00:00 updateinfo list done CVE(Common Vulnerabilities and Exposures)に関する惰弱性の修正パッチリストを表示します。 # yum updateinfo list cves Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities, : update-motd updateinfo list done # え、、、、何も表示されない。。。何故だ、、、と思ってuname -rでkernelのbuild dateを確認すると、どうもまだ新しいディストリビューションらしい(Mar 22 20:14:50 UTC 2021)。。。そのため、CVEに関する惰弱性の修正パッチが出てないみたいです。(本記事執筆時の21年3月31日時点) # uname -a Linux ip-172-31-25-107.ap-southeast-2.compute.internal 4.14.225-169.362.amzn2.x86_64 #1 SMP Mon Mar 22 20:14:50 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 後はパッチを適用するだけだったのに、、、残念。ここからは、想定手順です。 4. livepatchの適用(未検証) kernelのバージョンに合わせて、パッチを適用します。 # yum install kernel-livepatch-44.14.209-160.339.amzn2.x86_64 パッチが適用されていることを確認します。 # kpatch list まとめ LivePatch機能を適用して、再起動後にパッチが外れるか適用されたままなのかまで確認したかったのですが、最後まで辿り着けず。。。選択したAMIが新しくて、修正パッチがないため適用まで確認することが出来ませんでした。思えば、10年前まで惰弱性パッチなんてなくて、修正版の適用は、kernelの入れ替えしかありませんでした。まさか商用Unix並の機能が実装されるなんて、夢にも思いませんでした。パッチの適用検証、修正パッチのサポート期限とか、まだまだ気になることがあるので、講義のデリバリまでの宿題とし後日検証してみたいと思います。
- 投稿日:2021-04-05T02:05:44+09:00
Ubuntu20.10でKVM環境を作って、CentOS Streamを入れてみる
前提 タイトル通りですが、Ubuntuを導入しているThinkPadX240にKVMを入れてみたかったので入れてみました。 そしてついでにCentOS Streamもいれてみました。 そもそもKVMってなんぞいな おそらく多くの人はご存知だとは思いますが改めて調べてみました。 KVM (Kernel-based Virtual Machine:カーネルベースの仮想マシン) は、Linux® に組み込まれたオープンソースの仮想化テクノロジーです。 具体的には、KVM を使用すると、Linux をハイパーバイザーに変貌させることができます。 これによりホストマシンは、ゲストや仮想マシン (VM) と呼ばれる複数の独立した仮想化環境を稼働させることができます。 参照 Redhat:https://www.redhat.com/ja/topics/virtualization/what-is-KVM Linuxをハイパーバイザにしてくれるということですね。では次に、KVMを使った仮想環境の構成を確認してみます。 参照 Wikipedia Kernel-based Virtual Machine:https://ja.wikipedia.org/wiki/Kernel-based_Virtual_Machine KVMで仮想環境を作るためには、KVMそのものの他にもハードウェアをエミュレーションしてくれるQEMUも必要であることがわかります。 また、画像には書かれていませんがこいつら(KVM+QEMU)をうまいこと管理するためのlibvirtというパッケージも導入する必要があります。 導入 前置きが長くなりましたが、したがって今回はまず、KVMとQEMUとlibvirtをインストールしていくことになります。 基本的にはここの通りに勧めていくだけです。 手順1:自分の使っているCPUが仮想化に対応しているかの確認とIOMMUの設定 大丈夫だとは思いますが、一応確認します egrep -c'(vmx|svm)'/proc/cpuinfo と入力してみて返ってきた数値が1以上ならOKみたいです。 OKだった場合はIOMMUの設定を行いましょう。 BIOSの設定は各々の環境で行うとして、Kernelの設定を行います。 /etc/default/grub をテキストエディタで開いて GRUB_CMDLINE_LINUX="intel_iommu=on" これを実行します。その後 sudo update-grub でIOMMUの設定は完了です。 手順2:KVMに必要な諸々をインストール さて、必要な設定が終わったので、実際にKVMをインストールしてみましょう。 sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager インストールが終わったら virsh list --all と入力してみて、エラーを吐かなければインストール成功です 最後に virt-host-validate と打ってみて出てきた項目を確認した後に virt-manager と入力すると こんな感じで画面が出てくるので、あとはOSをインストールするだけ!! 感想 ・意外と簡単だった ・仮想環境について学ぶことができました ・初めてのqiitaたのちい 参考文献 ・Mastering KVM Virtualization - Second Edition ・Kernel-based Virtual machine wikipedia ・KVMとは Red Hat
- 投稿日:2021-04-05T00:40:56+09:00
LinuC合格用 1週間でLPICの基礎が学べる本 2日目まとめ
LinuxでGUI LinuxでGUIを実現する場合、X Window Systemを使用する(ビットマップディスプレイ上でウィンドウシステムを提供する表示プロトコル) X Window System上でデスクトップを実現するウィンドウマネージャは色々あるので、同じLinuxカーネルを使用していても、表示がぜんぜん違う。 まるで別のOSであるかのように見える。 例) GNOME, KDE, XFCE オンラインマニュアル(別にネットにつながっているわけではない) manコマンドで参照するマニュアルファイルは、一般的には/usr/share/manに格納される。 また、manコマンドはセクションを指定できる。 セクション man セクション番号 調べたい内容を実行すると、セクションによって結果が変わる。 セクション番号 説明 1 一般ユーザのコマンド 5 設定ファイルの書式 8 システム管理コマンド 例えば、man passwdまたはman 1 passwdを実行すれば、「passwdコマンドの説明」が表示され man 5 passwdを実行すれば、「/etc/passwdの書式」が表示される。 参考 whatisコマンドは、オンラインマニュアルの最初の行を表示する。 --helpまたは-hオプションで、manより単純な説明が表示される。
- 投稿日:2021-04-05T00:34:19+09:00
実家の古いPCにUbuntuぶち込んだ話
背景 実家に使われなくなったデスクトップPCがあり、親が捨てようか迷っていたので「俺に遊ばせて!」とお願いし、譲ってもらいました。 どうやって遊んでみようかと考えた結果、ちょうどLinux使いたかったので、入っているWindows7を消してUbuntuに入れ替えることにしました。 なんだかんだこういったことするの初めてだったので、記録用に書いておきます。 概要(というか目次) 環境 参考にしたサイト 必要なもの Ubuntuのインストール Rufusのインストールと準備 再起動 最後に 環境 Windows7 ハードはSonyのVAIO(いつのかわからないけど古い) USBは16GBで売られていたものを購入しました。 参考にしたサイト 必要なもの 4GB以上入るUSBメモリ(中身が空、もしくは消えてもよい)(4GBとして売っていても実際は4GB目一杯入らないので注意) 使わなくなったけど蘇生させたいPC、もしくはOSをUbuntuにしたいPC PCがどうなってもいいという勇気 Ubuntuのインストール Ubuntuのダウンロード 上のリンクから を押して、下の画面から最新バージョンをダウンロード ダウンロードされていることを確認して次に進みましょう。 Rufusのインストールと準備 Rufusのダウンロード 上のリンクからRufusのポータブルをダウンロードします インストールが完了したら、起動します。 起動後、USBメモリを挿す前はこんな感じです。 USBを挿すと、下のようにデバイスのところに挿入されたUSBが出ます。 選択からUbuntuを選択するとその他の設定値が自動で決まりますので設定値はそのままで「スタート」ボタンをクリックします。 スタートボタンを押した後いろいろアラートなどが出ますが、すべてOKにして大丈夫です。 状態のところが緑色の準備完了になったらUSBメディアの作成完了です。 ここで何かしら問題が出たら、USBメモリの容量が足りないのが原因だと思われます。 再起動 先ほどのUSBメモリを挿したまま再起動します。そうすると大体の場合はうまくUbuntuが起動するはずです。 いろいろUbuntuの設定をしてもらって使えるようになっているはずです! ※もし私のようにそのままWindowsが開いてしまった場合は、再度再起動します。 再起動の際にF2キー(私のPCの場合)を何度も押してBIOSセットアップ画面を開きます。 「→」キーでBootの欄に移動し、External DeviceからのBootをEnable(Sony製品の場合)にします。 Sony以外の製品の場合「External Device Boot許可」や「USB Boot 許可」などで検索をかけると解決策が出てくると思います。(なげやりでごめんね) 最後に うまくできたでしょうか? 私も初めてだったので、いろいろ躓きました! 少しでも助けになったらうれしいです! ちなみに復活したPCは見事に実家に返還され、私ではなく親が使っています(笑)