먼저 Ubuntu20.04 이미지를 받아야 한다. 이번에는 내가 원하는 버전이 있으므로 태그를 달아 pull을 받아준다. 명령어는 다음과 같다.
docker pull ubuntu:20.04
앞에 경로를 붙이지 않으면 도커 공식 허브에서 제공되는 이미지를 가져오게 된다.
docker images
도커 이미지를 정상적으로 가지고 왔는지 확인해 본다. 만약 오류가 난다면 오타일 확률이 높다. :
의 위치를 유의해서 명령어를 작성해 줘야 한다. 내가 오타난 부분 중 하나이다. 태그를 헷갈리지 말자..
컨테이너를 생성해 줘야 한다. -i와 -t옵션을 통해 상호 입출력이 가능한 상태로 만들어준다. 명령어는 아래와 같다.
docker run -i -t --name test ubuntu:20.04
컨테이너가 생성되고 접속이 되어 있을 것이다. 정상적으로 생성이 되었지만 두 눈으로 확인을 하기 위해 ctrl + P + Q
를 눌러 컨테이너를 종료하지 않은 채로 나온 뒤 아래 명령어를 실행해 확인해 본다.
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
docker ps
명령어로 간단하게 확인도 되지만 저렇게 원하는 포멧을 설정해서 보면 조금 더 구조가 잘 보인다. 가능하면 --format
을 활용하려고 노력하고 있다. 익숙해 졌을 때 가시성과 활용성을 생각하면 타자가 조금 길어지더라도 깔끔하고 헷갈리지 않고 확실하게 체크해 볼 수 있다. 즉, 휴먼 에러를 줄여주는 코드라고 생각한다.
먼저 컨테이너에 할당되는 가상 IP를 체크해 본다.
ifconfig
위 명령어로 간단하게 확인해 볼 수 있는데 그 전에 net-tools
를 받아야 한다.
apt-get update
apt-get install net-tools
ifconfig
위 순서로 명령어를 사용해 보면 ifconfig
명령어가 정상적으로 동작하는 것을 확인할 수 있다.
조회된 내용을 살펴보면 eth0
과 lo
인터페이스가 있는데 eth0
는 도커 가상 IP 주소를 할당 받은 인터페이스이고 lo
는 로컬 호스트이다.
이때, 아무런 설정을 하지 않았기 때문에 이 컨테이너는 외부에서 접근이 불가능하다. 외부 접근을 위해서는 eth0
의 IP와 포트를 호스트의 IP에 바인딩해야 한다.
위에 생성한 컨테이너는 잊고 다시 다른 컨테이너를 생성하면서 포트를 바인딩해 본다. 일단 명령어는 아래와 같다.
docker run -i -t -p 80:80 ubuntu:20.04
중간에 새로운 옵션인 -p가 추가되었다. -p는 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 해 준다. 이 옵션의 형식은 호스트의포트:컨테이너의포트
이다.
docker run -i -t -p 3306:3306 -p 호스트IP:7777:80 ubuntu:20.04
위 명령어는 다른 예시인데 끊어서 확인해 보면 -p 3306:3306
은 호스트의 3306 포트를 컨테이너의 3306 포트와 연결한다. -p 특정IP:7777:80
은 바인딩 하고 싶은 포트를 가지고 있는 IP를 입력하고 해당 IP의 7777포트를 컨테이너의 80번 포트와 바인딩을 한다는 뜻을 가지고 있다. 참고로 80번 포트는 아파치 웹 서버 포트이다.
아파치 웹 서버를 설치해 준다. 중요하지 않기 때문에 간단하게 명령어를 작성한다. 명령어는 아래와 같다.
apt-get update
apt-get install apache2 -y
service apache2 start
이제 서버에접속하는 단계를 가진다. 아파치 웹 서버의 실행이 정상적으로 되었다면 호스트IP:80
으로 접근이 가능하다.
서버를 열어보기 전에 netstat -ntlp
명령어로 포트가 정상적으로 실행되고 있는지 확인해 보면 좋다.
위 페이지 처럼 이제 정상적으로 접근이 가능하다!