파일은 docker 이미지 파일에 의해 제한되지 않습니다. 수정이 가능하며, 컨테이너를 다시 시작하고 업데이트된 파일을 사용할 수 있습니다.
로그 등 컨테이너 실행 중에 기록된 파일 이러한 정보는 외부 저장소에 자동으로 저장될 수 있으며 컨테이너 재시작으로 인해 손실되지 않습니다.
docker run command
docker-compose command
docker run 명령 방법은 -v 매개변수를 사용하여 외부 호스트 디렉터리를 컨테이너 내의 경로에 마운트합니다. 마운트 지점이 여러 개인 경우 이를 통해 지정합니다. -v 매개변수이며 절대 경로만 사용할 수 있습니다. docker-compose 명령은 서비스 방법을 설명하기 쉽습니다. 서비스는 여러 컨테이너를 포함할 수 있으며 외부 경로의 마운트 구성도 다음을 통해 구성됩니다. -v 매개변수입니다. 물론 docker-compose.yml 파일의 상대 경로를 사용할 수 있다는 장점이 있습니다. 또 다른 장점은 docker-compose를 사용하여 컨테이너를 시작하는 명령이 비교적 간단하다는 것입니다.
├── build.sh ├── docker-compose.yml ├── Dockerfile ├── mynginx.conf ├── nginx-vol │ ├── conf.d │ │ └── mynginx.conf │ ├── html │ │ └── index.html │ └── logs │ ├── access.log │ └── error.log └── run.sh
Dockerfile은 이미지 빌드를 위한 구성 파일이고 내용은 다음과 같습니다.
FROM nginx LABEL maintainer="xxx" email="<xxx@xxx.com>" app="nginx test" version="v1.0" ENV WEBDIR="/data/web/html" RUN mkdir -p ${WEBDIR} EXPOSE 5180
nginx 기준으로 새 데이터 파일 경로를 /data/로 지정합니다. web/html이고 노출된 포트는 5180입니다.
docker build -t nginx:test-v1 .
컴파일된 이미지 태그는 test-v1입니다. 로컬 이미지를 볼 수 있습니다.
docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx test-v1 d2a0eaea3fac 56 minutes ago 141MB nginx latest 605c77e624dd 9 days ago 141MB
test-v1 태그가 있는 이미지가 새 이미지라는 것을 알 수 있습니다. 컴파일되었습니다.
nginx 외부 볼륨 nginx-vol 및 관련 conf.d, 로그 및 html 폴더를 만들고 해당 콘텐츠를 해당 디렉터리에 넣습니다. 예를 들어 html 폴더에 있는 iindex.html의 내용은 다음과 같습니다.
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>系统时间</title> <body> <div id="datetime"> <script> setInterval("document.getElementById('datetime').innerHTML=new Date().toLocaleString();",1000); </script> </div> </body> </head> </html>
사실 현재 시간을 표시하는 페이지일 뿐입니다.
로그 섹션은 컨테이너가 실행 중일 때 로그를 외부 저장소에 기록하는 것이 목적입니다. 컨테이너가 중지되거나 이미지가 삭제되더라도 실행 중인 로그는 계속 유지될 수 있습니다.
conf.d 아래는 nginx 맞춤형 구성이며, 내용은 다음과 같습니다.
server { listen 5180; #listen [::]:5180; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /data/web/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # proxy the PHP scripts to Apache listening on 127.0.0.1:80 #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one #location ~ /\.ht { # deny all; }
실제로 포트와 루트 경로는 nginx의 기본 default.conf를 기반으로 수정되었습니다. 목적은 nginx 구성 파일이 가능하다는 것을 보여주기 위한 것입니다. 또한 외부 저장소를 사용합니다. 자체 프로그램이 구성 파일을 수정할 수 있는 경우 이러한 방식으로 컨테이너가 실행되는 동안 구성 파일을 수정할 수 있습니다. 수정된 구성 파일은 실제로 외부 저장소에 저장되므로 컨테이너 실행이 중지됩니다. 이미지 내부의 파일은 복원되지 않습니다.
편의상 실행 명령을 run.sh와 같은 쉘 스크립트에 작성할 수 있으며 내용은 다음과 같습니다.
docker run --name nginx-v1 -p 15180:5180 -v /home/project/nginx-test/nginx-vol/logs:/var/log/nginx -v /home/project/nginx-test/nginx-vol/conf.d:/etc/nginx/conf.d -v /home/project/nginx-test/nginx-vol/html:/data/web/html -d nginx:test-v1
명령에 -v가 3개 있는 것을 볼 수 있는데, 다른 외부 저장소 마운트에 해당합니다. 컨테이너 내의 다른 디렉터리에 다운로드하고 매핑합니다.
-p(소문자에 유의) 뒤의 포트는 각각 호스트 포트와 컨테이너 포트입니다. 즉, 호스트의 15180 포트가 컨테이너의 5180 포트에 매핑되므로 nginx 서비스 포트 5180이 컨테이너에 의해 시작됩니다. 호스트의 15180 포트에 액세스하고 매핑될 수 있습니다.
실행 중인 컨테이너 보기:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf2275da5130 nginx:test-v1 "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 80/tcp, 0.0.0.0:15180->5180/tcp, :::15180->5180/tcp nginx-v1
자세한 매핑 보기:
docker inspect nginx-v1
는 전체 정보를 표시하며 "마운트" 섹션에서 전체 스토리지 마운트 매핑을 볼 수 있습니다.
호스트의 nginx-vol/logs 바로 아래를 보면 컨테이너에서 실행 중인 nginx 로그가 자동으로 외부 호스트의 저장소에 기록되는 것을 확인할 수 있습니다.
ls -l nginx-vol/logs/ total 12 -rw-r--r-- 1 root root 1397 1月 8 15:08 access.log -rw-r--r-- 1 root root 4255 1月 8 15:59 error.log
컨테이너 중지:
docker stop nginx-v1
컨테이너 삭제:
docker rm nginx-v1
docker-compose 설치
apt-get install docker-compose
docker-compose.yml 파일 쓰기
version: "3" services: nginx: container_name: mynginx image: nginx:test-v1 ports: - 80:5180 volumes: - ./nginx-vol/html:/data/web/html - ./nginx-vol/logs:/var/log/nginx - ./nginx-vol/conf.d:/etc/nginx/conf.d restart: always
container_name: 컨테이너 이름 지정
image: 사용 미러 및 해당 태그
ports: 호스트 포트 및 컨테이너 포트 매핑
volumes: 외부 저장소 마운트 매핑
컨테이너 시작
docker-compose up -d Creating network "nginxtest_default" with the default driver Creating mynginx ... Creating mynginx ... done
컨테이너 보기
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 635e2999c825 nginx:test-v1 "/docker-entrypoint.…" 24 seconds ago Up 22 seconds 80/tcp, 0.0.0.0:80->5180/tcp, :::80->5180/tcp mynginx
docker-compose에 따라 컨테이너가 실행되는 것을 확인할 수 있습니다. .yml 구성, 포트, 이름, 마운트가 모두 정상입니다. 호스트의 포트 80에 액세스하는 것은 컨테이너의 5180 서비스에 해당합니다.
컨테이너를 중지하세요
docker-compose down Stopping mynginx ... done Removing mynginx ... done Removing network nginxtest_default
보시다시피 docker-compose를 사용하는 것이 더 쉽습니다.
위 내용은 Docker에 nginx 플러그인 파일을 설치하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!