✏️ Docker network
- Docker 가 실행중인 NGINX 에 접속하기 위해서 NGINX 가 어떤 위치에 존재하고 있는지 알아야 할 필요가 있다.
-- 기본 OS --
-- UTM --
-- Cent OS --
-- Docker --
NGINX 실행중
✏️ NGINX 웹페이지 접속하기
📍 NGINX 실행
- 도커 내부에서 실행 시켜야한다.
- 데몬 옵션 추가
- name 변경
- 종료시 자동삭제 옵션 추가
docker run -d --name=nginx_1 --rm nginx
📍 iproute2 설치
- nginx 에 접속하기 위해선 해당 웹의 ip 를 알아야 하는데 docker 에 의해 설치된 nginx 는 실행할 수 있을정도의 프로그램만 설치되기 때문에 ip 를 조회하는 기능이 없다.
- 아래 명령어로 ip 를 조회하는 프로그램을 설치해주어야 한다.
apt-get update
apt-get install iproute2
📍 ip 확인
ip addr
- ip 를 확인했으면 아래 명령어로 빠저나오면 된다.
exit
ping 172.17.0.2
📍 접속
- 아래 명령어로 접속했을 때 html 소스가 나오면 성공
curl http://172.17.0.2:80/
curl 172.17.0.2
✏️ 포트포워딩
- 기본 OS 의 Chrom 에서 CentOS 의 81 번 포트로 받은 것을 NGINX 의 ip 로 포트포워드 하는것을 뜻한다.
- 즉 기본OS 에서 리눅스 안의 도커가 실행중인 웹서버에 접속하는 것을 뜻한다.
📍 nginx 의 정보 상세확인
- fgrep 을 사용해 ip 정보만 지정해서 확인할 수 있다.
- 이렇게 획득한 ip 는 리눅스에선 잘 접속되지만 기본 OS 의 웹에선 접속되지 않는다.
- 기본 OS 에서는 리눅스 까지만 접속이 가능하기 때문에 이 상태로는 접속이 불가능하다.
docker inspect nginx_1 | fgrep IPAddress
📍 nginx 종료
- 현재실행중인 nginx 를 중지한다.
- run 할 때 추가한 옵션때문에 자동 삭제된다.
docker stop nginx_1
📍 nginx 포트포워딩 적용해서 다시 실행
- 다시 포트포워딩 옵션을 추가해 nginx 를 run 해준다.
- 81 포트 (리눅스의 ip) 로 접속이 확인되면 80포트 (docker 의 ip) 로 포워딩하는 명령어
docker run -d --name=nginx_1 --rm -p 81:80 nginx
📍 81 포트로 접속
- 이제 리눅스 ip 의 81 포트로 접속하면 도커에서 실행중인 nginx 에 접근이 가능하게 된다.
- 아래의 ip 를 url 에 입력하면 된다.
- 만약 포트번호를 생략하면 자동으로 80 포트로 접근되고,
리눅스가 실행했던 enginx 가 실행된다.
192.168.64.2:81
✏️ 포트 변경하기
- 81 포트를 80 포트로 바꿀 수도 있다.
- 하지만 이미 리눅스에서 80 포트를 사용하고있다면 하나의 포트에서 두개의 프로그램이 실행될 수 없기때문에 사용이 불가능하다.
- 80 포트가 사용중일 때 80포트로 포트포워딩을 하면 오류가 발생한다.
root@localhost ~]
3c5bf4757c9fd910d37a73b8fc4006faf607578a678dc21228a986ed4296fdf6
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx_1 (0670cec3466bfbf38fa91ca6ec8329e8f79b7f43f77ab6308d4a72fed3ba6c73): Error starting userland proxy: listen tcp4 0
📍 사용중인 80 포트 종료하기
- 현재 80포트는 리눅스에서 실행된 nginx 가 실행되고 있다.
systemctl stop nginx
- 다시 80 포트로 포트포워딩을 하면 정상적으로 docker 의 nginx 가 실행된다.
docker run -d --name=nginx_1 --rm -p 80:80 nginx