<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on Ivon's Blog</title><link>https://ivonblog.com/ja-jp/tags/docker/</link><description>Recent content in Docker on Ivon's Blog</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><managingEditor>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</managingEditor><webMaster>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</webMaster><copyright>Ivon's Blog (ivonblog.com）の記事のシェアを歓迎します。記事を引用する際は元のURLを明記し、CC BY-NC-ND 4.0ライセンスに従ってください。商用利用の場合は、私宛にメールでご連絡ください。</copyright><lastBuildDate>Sat, 17 Aug 2024 01:00:00 +0800</lastBuildDate><atom:link href="https://ivonblog.com/ja-jp/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>AndroidにUbuntuを入れる：TermuxのQEMUでx86_64 Linux仮想マシンをエミュレートする</title><link>https://ivonblog.com/ja-jp/posts/termux-qemu-system-linux/</link><pubDate>Sat, 17 Aug 2024 01:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/ja-jp/posts/termux-qemu-system-linux/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Androidスマートフォン/タブレットに、完全なLinuxシステムの仮想マシンをインストールする方法を紹介します。rootは不要です。&lt;/p&gt;
&lt;p&gt;TermuxではQEMUを使ってLinux仮想マシンをエミュレート実行でき、&lt;a href="https://ivonblog.com/ja-jp/posts/termux-proot-distro/" target="_blank" rel="noreferrer"&gt;proot-distro&lt;/a&gt;環境の不足を補えます。&lt;/p&gt;
&lt;p&gt;なぜQEMUを使うのでしょうか。proot-distroが提供するLinux環境はchrootに似ていますが、それでもPodman、Docker、Snap、Flatpak、Systemdに依存するプログラムなど、動かないパッケージがあります。そのため仮想マシンが必要になります。&lt;/p&gt;
&lt;p&gt;QEMUを使うと、x86またはARMアーキテクチャの仮想マシンをエミュレートし、完全なLinuxデスクトップシステムを実行できます。下の画像はAndroidスマートフォンでXubuntuシステムを動かしている画面です。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://ivonblog.com/ja-jp/posts/termux-qemu-system-linux/images/Screenshot_20240817_001947.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 width="1080"
 height="462"&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;これでほぼすべてのソフトウェアが動かせます。画像はPodmanの実行結果です。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://ivonblog.com/ja-jp/posts/termux-qemu-system-linux/images/Screenshot_20240816_235500.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 width="1080"
 height="462"&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;ついでに言うと、QEMUは&lt;a href="https://ivonblog.com/posts/limbo-pc-emulator/" target="_blank" rel="noreferrer"&gt;Limbo PC Emulator&lt;/a&gt;の背後で使われているエミュレータです。Limboの更新が止まった後でも、TermuxのQEMUパッケージで仮想マシンを動かせます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; ほとんどのAndroidスマートフォンにはKVMカーネルモジュールがありません（&lt;a href="https://ivonblog.com/ja-jp/posts/termux-qemu-system-tensor-linux" target="_blank" rel="noreferrer"&gt;Root化したPixelスマートフォンでpKVMを使いQEMUを高速化&lt;/a&gt;のみ）。そのためTermuxのQEMUは、PC版LinuxのようにKVMで仮想マシンの実行を高速化できません。KVMがない場合、QEMU仮想マシンの実行速度は非常に遅く、仮想マシン内のプログラム実行速度はTermuxネイティブパッケージの5分の1にも届かない程度です。テキストだけのプログラムならなんとか使えますが、文書作業の体験はよくありません。ゲームはなおさらです。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/ja-jp/posts/termux-qemu-system-linux/featured.webp"/></item><item><title>AndroidスマホでDockerを動かす：Termuxにheadless Alpine Linux QEMU仮想マシンをインストールする</title><link>https://ivonblog.com/ja-jp/posts/run-docker-in-qemu-android/</link><pubDate>Sun, 19 Dec 2021 14:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/ja-jp/posts/run-docker-in-qemu-android/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;注：単にDockerを動かしたいだけなら、この記事の方法は性能がよくありません。より実用的な方法はこちらを参照してください：&lt;a href="https://ivonblog.com/ja-jp/posts/run-docker-natively-on-android/" target="_blank" rel="noreferrer"&gt;Androidスマホでネイティブ性能のDockerを動かす&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We need to go deeper…&lt;/p&gt;
&lt;p&gt;基本的に、Androidスマホではdockerを直接動かせません。kernelがそもそも対応していないからです。とはいえ、QEMU仮想マシンという手があります。ただし残念ながらKVMも使えません。&lt;/p&gt;
&lt;p&gt;構成は、TermuxエミュレーターでQEMU仮想マシンを作成し、その仮想マシン内にDockerをインストールして、さらにポートフォワーディングする、という流れです。&lt;/p&gt;
&lt;p&gt;スマホ：Sony Xperia 5 II、Android 11、8GB RAM。&lt;/p&gt;
&lt;p&gt;簡単なApacheサーバーを例にして、仮想マシン内のdockerで作成したWebページをスマホのブラウザで表示できるか確認します。Webページの内容は以下のとおりです。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://i.postimg.cc/rm678bQD/Screenshot-20211219-140212-1.png"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 &gt;&lt;/figure&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. 仮想マシンを作成してDockerをインストールする
 &lt;div id="1-仮想マシンを作成してdockerをインストールする" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%e4%bb%ae%e6%83%b3%e3%83%9e%e3%82%b7%e3%83%b3%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%81%a6docker%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://ivonblog.com/ja-jp/posts/how-to-use-termux/" target="_blank" rel="noreferrer"&gt;Termux&lt;/a&gt;を開き、コマンドを入力します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pkg install qemu-utils qemu-common qemu-system-x86_64-headless&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;virtを含むAlpine Linux OSのISOをダウンロードします&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir alpine &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12.3-x86_64.iso&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;4GBの仮想ハードディスクを作成します&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-img create -f qcow2 alpine.img 4G&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;起動します&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-system-x86_64 -machine q35 -m &lt;span class="m"&gt;1024&lt;/span&gt; -smp &lt;span class="nv"&gt;cpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; -cpu qemu64 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -drive &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pflash,format&lt;span class="o"&gt;=&lt;/span&gt;raw,read-only,file&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PREFIX&lt;/span&gt;/share/qemu/edk2-x86_64-code.fd &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -netdev user,id&lt;span class="o"&gt;=&lt;/span&gt;n1,hostfwd&lt;span class="o"&gt;=&lt;/span&gt;tcp::2222-:22 -device virtio-net,netdev&lt;span class="o"&gt;=&lt;/span&gt;n1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -cdrom alpine-virt-3.12.3-x86_64.iso &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -nographic alpine.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt;アカウントでログインし、ネットワークカードを有効化します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;setup-interfaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Available interfaces are: eth0.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Enter &amp;#39;?&amp;#39; for help on bridges, bonding and vlans.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Which one do you want to initialize? (or &amp;#39;?&amp;#39; or &amp;#39;done&amp;#39;) [eth0]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Ip address for eth0? (or &amp;#39;dhcp&amp;#39;, &amp;#39;none&amp;#39;, &amp;#39;?&amp;#39;) [dhcp]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Do you want to do any manual network configuration? [no]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ifup eth0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;oofnikjが用意したanswerfileを使って、システムを素早くインストールします。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://gist.githubusercontent.com/oofnikj/e79aef095cd08756f7f26ed244355d62/raw/answerfile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;起動時にメッセージを出力できるようにします&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i -E &lt;span class="s1"&gt;&amp;#39;s/(local kernel_opts)=.*/\1=&amp;#34;console=ttyS0&amp;#34;/&amp;#39;&lt;/span&gt; /sbin/setup-disk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;システムをハードディスクへインストールします。途中でrootアカウントのパスワード作成を求められます。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;setup-alpine -f answerfile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="9"&gt;
&lt;li&gt;まず&lt;code&gt;poweroff&lt;/code&gt;コマンドでシャットダウンし、次にこのコマンドで仮想マシンを起動します（自分でスクリプトとして保存しても構いません）。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-system-x86_64 -machine q35 -m &lt;span class="m"&gt;2048&lt;/span&gt; -smp &lt;span class="nv"&gt;cpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; -cpu qemu64 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -drive &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pflash,format&lt;span class="o"&gt;=&lt;/span&gt;raw,read-only&lt;span class="o"&gt;=&lt;/span&gt;on,file&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PREFIX&lt;/span&gt;/share/qemu/edk2-x86_64-code.fd &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -netdev user,id&lt;span class="o"&gt;=&lt;/span&gt;n1,hostfwd&lt;span class="o"&gt;=&lt;/span&gt;tcp::2222-:22,hostfwd&lt;span class="o"&gt;=&lt;/span&gt;tcp::8081-:80 -device virtio-net,netdev&lt;span class="o"&gt;=&lt;/span&gt;n1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -nographic alpine.img
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# mは2GBメモリの割り当て、cpuは2コアCPU、hostfwdはスマホの8081ポートを仮想マシンの80ポートへ転送します。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="10"&gt;
&lt;li&gt;dockerをインストールし、仮想マシン起動時にサービスが自動起動するよう設定します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apk update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk add docker
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service docker start
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rc-update add docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;2. Apacheサーバーをインストールする
 &lt;div id="2-apacheサーバーをインストールする" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-apache%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;ApacheサーバーのイメージをPullします&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull httpd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Apacheコンテナを実行し、仮想マシンの80ポートをDockerコンテナの80ポートへ転送します。さらにdockerコンテナのファイルパスをシステムの&lt;code&gt;/root/website&lt;/code&gt;ディレクトリに対応させます。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d -p 80:80 --name myapache -v /root/website/:/usr/local/apache2/htdocs/ httpd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;テスト用Webページを作成します&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir website &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; website
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi index.html&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Webページには次を入力します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;My Apache Server&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://c.tenor.com/61yCyJVoyr8AAAAd/%E6%A1%B6%E7%A5%9E-%E6%89%93%E5%B7%A5.gif&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;スマホでブラウザを開き、&lt;code&gt;localhost:8081/index.html&lt;/code&gt;を入力すると、DockerのWebページが正常に表示されます。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://i.postimg.cc/HxQRj2hB/Screenshot-20211219-140212.png"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 &gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;3. まとめ
 &lt;div id="3-まとめ" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-%e3%81%be%e3%81%a8%e3%82%81" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;仮想マシン+DockerでApache Serverを動かす程度なら、そこそこ使えそうです。ただしMinecraftサーバーのようなものを実行すると、性能低下はかなり目立ちます。&lt;/p&gt;</description></item></channel></rss>