Docker에서 포트 포워딩 설명
포트 포워딩이란?
포트 포워딩:
인터넷에서 특정 포트 번호로 패킷이 도착했을 때 미리 설정해 둔 LAN측의 기기로 패킷을 전송하는 기능입니다.
※인용원: htps //w w. 이 t 보오 k. 니후 / s dy / t6. HTML
※이번은 포트 포워딩에 대해서 Docker를 기초로 이야기하기 때문에, Docker에 대해서는 해설하지 않습니다.
Docker 이미지
스크립트
Dockerfile
sample.go
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// クライアントからリクエストを受けた場合
log.Println("received request")
// HTTPリクエストを受けた場合
fmt.Fprintf(w, "Hello Docker!!")
})
log.Println("start server")
server := &http.Server{Addr: ":8080"}
if err := server.ListenAndServe(); err != nil {
log.Println(err)
}
}
Dockerfile
FROM golang:1.9
RUN mkdir /echo
COPY main.go /echo
CMD ["go", "run", "/echo/main.go"]
Docker 이미지 빌드
$docker image build -t sample:latest .
Sending build context to Docker daemon 5.12kB
Step 1/4 : FROM golang:1.9
1.9: Pulling from library/golang
55cbf04beb70: Pull complete
1607093a898c: Pull complete
9a8ea045c926: Pull complete
d4eee24d4dac: Pull complete
9c35c9787a2f: Pull complete
8b376bbb244f: Pull complete
0d4eafcc732a: Pull complete
186b06a99029: Pull complete
Digest: sha256:8b5968585131604a92af02f5690713efadf029cc8dad53f79280b87a80eb1354
Status: Downloaded newer image for golang:1.9
---> ef89ef5c42a9
Step 2/4 : RUN mkdir /echo
---> Running in 99e306a53ced
Removing intermediate container 99e306a53ced
---> f9b0ec578390
Step 3/4 : COPY main.go /echo
---> b71ab1e040bd
Step 4/4 : CMD ["go", "run", "/echo/main.go"]
---> Running in fff606860921
Removing intermediate container fff606860921
---> 2c9096d1911b
Successfully built 2c9096d1911b
Successfully tagged sample:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sample latest 2c9096d1911b 16 seconds ago 750MB
Docker 컨테이너 실행
배경 에서 컨테이너 실행
※호스트측과 컨테이너측의 포트를 나눈 것은, 액세스시에 어느 쪽으로부터 액세스했는지를, 알기 쉽게 하기 위해서입니다.
$ docker run -d -p 9000:8080 2c9096d1911b
5e3f8c5181b99c72002fe1917044c38426132c863350c47db828909294823b0b
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e3f8c5181b9 2c9096d1911b "go run /echo/main.go" 4 seconds ago Up 3 seconds 0.0.0.0:9000->8080/tcp objective_leavitt
HTTP 액세스
$ curl http://localhost:9000
Hello Docker!!
여기까지 그림
요약
이런 느낌으로 포트 포워딩으로 포트의 연결을 실시해 주는 것으로, 가상 환경에 대해서도 액세스 할 수 있게 되는 것입니다.
여담입니다만, -p 옵션으로 포트 포워딩으로 설정을 했습니다만, 만약 호스트측의 설정을 하지 않는 경우 어떻게 된다고 생각합니까?
// こんな感じでコンテナ側のポートしか設定しない場合です
$ docker run -d -p 8080 abcdefg
아무도 알고 있는 분 많다고 생각합니다만, 좋게 비어 있는 포트 번호를 할당해, 그 포트 번호와 연결을 실시해 줍니다.
위를 실행 한 후 docker ps를하고 PORTS를 확인하면 어떤 포트와 연결되어 있는지 알 수 있으므로 시도한 적이없는 분은 꼭 시도하십시오.
Reference
이 문제에 관하여(Docker에서 포트 포워딩 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatsuo-iriyama/items/e4bf2404411343116e3e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)