가능한 대답은 다음 두 가지입니다. (1) Docker로 포트를 직접 설정하고 Nginx / Apache를 사용하여 가상 호스트를 프록시하거나 (2) Dokku 를 사용 하여 포트와 가상 호스트를 관리합니다 (이 방법 1을 수행하는 방법을 배웠습니다).
방법 1a (도커를 사용하여 직접 포트 할당)
1 단계 : 원하는 포트 번호를 할당하여 호스트에 nginx.conf 또는 Apache를 설정합니다. 호스트에서 실행되는이 웹 서버는 가상 호스트 프록시를 수행합니다. Docker와 관련하여 특별한 것은 없습니다. 일반적인 가상 호스트 호스팅입니다. 다음으로 2 단계에서는 Docker가 올바른 호스트 포트 번호를 사용하도록 특수 부분이 제공됩니다.
2 단계 : 다음과 같이 Docker의 포트 매핑을 설정하려면 "-p"를 사용하여 Docker에서 포트 번호를 할당하고 다음과 같이 Docker 내에서 사용자 지정 환경 변수를 설정하려면 "-e"를 사용합니다.
port=12345
IMAGE=myapps/container-1
id=$(docker run -d -p :$port -e PORT=$port $IMAGE)
echo $id
echo $id > /app/files/CONTAINER
docker ps
docker logs $id
docker kill $id
방법 1b 하드 코딩 된 애플리케이션 포트
... 애플리케이션이 하드 코딩 된 포트 (예 : 포트 5000)를 사용하는 경우 (즉, 방법 1a에서와 같이 PORT 환경 변수를 통해 구성 할 수 없음) 다음과 같이 Docker를 통해 하드 코딩 할 수 있습니다.
publicPort=12345
id=$(docker run -d -p $publicPort:5000 $IMAGE)
방법 2 (Dokku가 포트를 알아 내도록 함)
현재 Docker 가상 호스트를 관리하기위한 꽤 좋은 옵션은 Dokku 입니다. 다가오는 옵션은 Flynn 을 사용하는 것일 수 있지만 현재 Flynn은 시작 단계에 있으며 아직 준비가되지 않았습니다. 따라서 지금은 Dokku를 사용합니다. Dokku 설치 지침을 따른 후 단일 도메인에 대해 "VHOST"파일을 생성하여 가상 호스트를 활성화합니다.
echo yourdomain.com > /home/git/VHOST
이제 앱이 SSH를 통해 Dokku로 푸시되면 (이 작업을 수행하는 방법은 Dokku 문서 참조), Dokku는 VHOST 파일을보고 푸시 된 특정 앱 ( "container-1"을 푸시했다고 가정 해 보겠습니다)을 생성합니다. 다음 파일 :
/home/git/container-1/nginx.conf
그리고 다음과 같은 내용이 있습니다.
upstream container-1 { server 127.0.0.1:49162; }
server {
listen 80;
server_name container-1.yourdomain.com;
location / {
proxy_pass http://container-1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
서버가 재부팅되면 Dokku는 Docker가 다른 포트를 임의로 할당하는 대신 처음 배포 된 포트 (여기서는 49162)에 매핑 된 포트로 애플리케이션을 시작하도록합니다. 이 결정 론적 할당을 달성하기 위해 Dokku는 처음 할당 된 포트를 저장하고 /home/git/container-1/PORT
다음 실행시 PORT
환경을이 값으로 설정하고 Docker의 포트 할당을 호스트 측과 앱 측 모두에서이 포트로 매핑합니다. 이것은 Dokku가 설정 PORT=5000
한 다음 VPS 측에서 Dokku가 앱 측에서 5000에 매핑하는 임의의 포트를 파악 하는 첫 번째 출시와 반대 입니다. 그것은 둥글지만 (앞으로 바뀔 수도 있습니다) 작동합니다!
VHOST가 작동하는 방식은 다음과 같습니다. SSH를 통해 앱을 git push 할 때 Dokku는 /var/lib/dokku/plugins/nginx-vhosts
. 이러한 후크는 여기 Dokku 소스 코드에도 있으며 nginx.conf
올바른 가상 호스트 설정으로 파일 을 작성하는 역할을합니다 . 아래에이 디렉토리가 없으면을 /var/lib/dokku
실행 해보십시오 dokku plugins-install
.