私はdockerの初心者であり、hello worldページを表示する最も単純なdocker-compose.ymlを試して、最終的に完全なLEMPで構築します私のサーバーと同じ設定を持つスタック。ただし、ほとんどのチュートリアルは廃止されており、dockerを使用する方法が多すぎるため、Docker composev3のみを使用する方法を見つけることができませんそれはまだ実際です。私はドキュメントをチェックしましたが、初心者にとっても非常に混乱しており、過去5時間動作させるように試みていたので、私はSOに質問したいと思いました。
docker-compose.yml
version: '3'
services:
web:
image: bitnami/nginx:1.10.3-r0 #using this version as it's the same on my server
volumes:
- "./test.conf:/etc/nginx/sites-available/test.local"
- "./test.conf:/etc/nginx/sites-enabled/test.local"
- "./code:/var/www/html" #code contains only a basic index.html file
ports:
- "80:80"
test.conf
server {
listen 80;
listen [::]:80;
server_name test.local;
index index.html; #Only a basic helloworld index.html file
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
}
これにはDockerfileが必要ですか?チュートリアルはそれが必要であると述べていないようです。
注:
ボリュームを追加しようとしました
- "./default.conf:/etc/nginx/conf.d/default.conf"
nginx:latestを使用しても、何も変更されず、ウェルカムページは引き続き読み込まれます。「不明:ディレクトリをファイルにマウントしようとしていますか? (またはその逆)?指定されたホストパスが存在し、予期されたタイプであるかどうかを確認してください。
docker-compose.ymlについての更新:
"./code:/usr/share/nginx/html"
、/usr/share/nginx/html
フォルダーには、デフォルトのindex.htmlファイルが含まれています(予期されています)"./code:/usr/share/nginx/html"
、/usr/share/nginx/html
フォルダは[〜#〜]空[〜#〜]!"./:/usr/share/nginx/html"
、/usr/share/nginx/html
フォルダーには空の「コード」フォルダーがあり、先ほど削除したランダムなテストファイルがたくさんあります。試行の合間に、リセットスクリプトを実行して、確実に最初からやり直します。
docker rm $(docker ps -a -q)
docker rmi $(docker images -q) --force
docker volume rm $(docker volume ls -q)
ランニング docker inspect <container>
はボリュームに対してこれを返しますが、タイプが「バインド」であることが ボリューム ではなく バインドマウント であることが正常であるかどうかは不明です。
"Mounts": [
{
"Type": "bind",
"Source": "/e/DEV/sandbox/docker",
"Destination": "/usr/share/nginx/html",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
独自のhello worldページをマウントするのは簡単です。公式のnginx:latest
画像を使用して説明しますが、必要に応じてbitnami画像を使用して自分で説明できます。
最初は非常に基本的です。 nginxコンテナを実行するだけです(docker-composeなし)。私はそれを詳細かつ基本的に説明します。もちろん、より高度なコマンドや高速なコマンドを実行してコンテナ内のファイルを読み取ることもできますが、これは初心者にはわかりにくいかもしれません。したがって、コンテナーを実行してmy-nginx
という名前を付けます。
$ docker run --rm -d -p 80:80 --name my-nginx nginx
localhost:80
に移動すると、デフォルトのnginxページが表示されます。これで、コンテナーの名前を使用してコンテナー内で実行できます。 execは「コンテナの内部」に移動するので、ファイルを確認できます。
$ docker exec -it my-nginx bash
root@2888fdb672a1:/# cd /etc/nginx/
root@2888fdb672a1:/etc/nginx# ls
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
cat
を使用してnginx.conf
を読んでください。このファイルの最も重要な行は次のとおりです。
include /etc/nginx/conf.d/*.conf;
つまり、そのディレクトリ内のすべてのconfs
が使用/読み取りされます。 /etc/nginx/conf.d/
に移動します。
root@2888fdb672a1:~# cd /etc/nginx/conf.d/
root@2888fdb672a1:/etc/nginx/conf.d# ls
default.conf
default.conf
が唯一のファイルです。このファイル内に構成が表示されます。
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
サーバーはローカルホスト、ポートは80、表示されるファイルはディレクトリ/usr/share/nginx/html/
にあります
次に、コンテナ内のそのファイルを確認します。
root@2888fdb672a1:/etc/nginx/conf.d# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
...
予期されるファイルです。これは、表示される「ようこそNginxへ」ページです。では、自分のindex.html
をどのように表示できますか? /usr/share/nginx/html
にマウントするだけです。
docker-compose.yaml
は次のようになります。
version: '3'
services:
web:
image: nginx:latest
volumes:
- ./code:/usr/share/nginx/html
ports:
- "80:80"
コードディレクトリには、index.html
とhello worldが含まれています。 docker-compose up -d --build
を実行すると、localhost:80
をカールすると、自分のindex.html
が表示されます。
本当にコードを/var/www/html
ではなく/usr/share/nginx
に配置したい場合は、それを行うことができます。
test.conf
を使用してください。ここで、ファイルを/var/www/html/
に配置するように定義します。
server {
listen 80;
listen [::]:80;
server_name test.local;
index index.html; #Only a basic helloworld index.html file
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
}
作成では、default.conf
を独自のconfで上書きし、nginxに/var/www/html
を参照するように指示します。作成は次のようになります。
version: '3'
services:
web:
image: nginx:latest
volumes:
- "./test.conf:/etc/nginx/conf.d/default.conf"
- "./code:/var/www/html"
ports:
- "80:80"
自分の指定した場所にある間、自分のindex.html
も表示されます。長い答えですが、これが役に立てば幸いです。