저번 포스팅에서는 컨테이너를 만들고 바로 삭제했지만, 이번에는 웹 브라우저를 통해 컨테이너에 접근해볼 것이다. 웹 브라우저를 통해 컨테이너에 접근하려면, docker run 커맨드의 옵션으로 포트를 설정해야 한다.
아파치 서버는 80포트를 통한 사용자의 접근에 대해서만 웹 페이지를 제공하므로, localhost의 8080번 port를 80번 포트에 연결해야 한다. 포워딩하는 방법은 -p 옵션을 사용하여, localhost의 포트번호와 컨테이너의 포트 번호를 콜론으로 연결하는 것이다.
-p 8080:80
외부에서 접근 가능한 아파치 컨테이너를 만들어보자. 이번에는 apa000ex2라는 이름의 아파치 컨테이너를 만들고, 8080 포트를 포워딩할 것이다.
① docker run 커맨드
docker run --name apa000ex2 -d -p 8080:80 httpd
② docker ps 커맨드
docker ps // 컨테이너가 정상적으로 실행 중인지 확인
③ 웹 브라우저를 통해 아파치 서버에 접근
④ docker stop 커맨드
docker stop apa000ex2 // 컨테이너 종료
⑤ docker rm 커맨드
docker rm apa000ex2 // 컨테이너 삭제
docker ps -a // 컨테이너의 삭제 여부를 확인
이전 포스팅에서 잠깐 설명했듯, 컨테이너를 활용하면 하나의 물리 서버에 여러 웹 서버를 함께 실행할 수 있다. 이 때, 각 컨테이너에 연결되는 포트번호는 모두 달라야 한다. 즉, A 컨테이너에는 8080 포트를 할당하고, B 컨테이너에는 8081 포트를 할당하는 방식으로 포트 번호를 구성해야 한다.
이제 배운 내용을 바탕으로 apa000ex3, apa000ex4, apa000ex5라는 이름의 아파치 컨테이너를 만들어보자.
① docker run 커맨드
docker run --name apa000ex3 -d -p 8080:80 httpd
docker run --name apa000ex4 -d -p 8081:80 httpd
docker run --name apa000ex5 -d -p 8082:80 httpd
② docker ps 커맨드
docker ps // 컨테이너가 정상적으로 실행 중인지 확인
③ 웹 브라우저를 통해 아파치 서버에 접근
④ docker stop 커맨드
docker stop apa000ex3
docker stop apa000ex4
docker stop apa000ex5
⑤ docker rm 커맨드
docker rm apa000ex3
docker rm apa000ex4
docker rm apa000ex5
docker ps -a // 컨테이너의 삭제 여부를 확인
nginx 이미지의 이름은 nginx이다. nginx000ex6이라는 이름의 nginx 컨테이너를 생성해보자.
① docker run 커맨드
docker run -d --name nginx000ex6 -p 8080:80 nginx
② docker ps 커맨드
docker ps // 컨테이너가 정상적으로 실행 중인지 확인
③ 웹 브라우저를 통해 nginx 서버에 접근
④ docker stop 커맨드
docker stop nginx000ex6
⑤ docker rm 커맨드
docker rm nginx000ex6
docker ps -a // 컨테이너의 삭제 여부를 확인
MySQL 이미지의 이름은 mysql이다. MySQL 컨테이너의 생성은 다음 포스팅에서 자세히 다루기로 하고, 지금은 MySQL의 root 패스워드를 지정하는 옵션과 -dit 옵션만 사용하여 MySQL 컨테이너를 생성하기로 한다.
① docker run 커맨드
docker run -dit --name mysql000ex7 -e MYSQL_ROOT_PASSWORD=pwd mysql
② docker ps 커맨드
docker ps // 컨테이너가 정상적으로 실행 중인지 확인
③ docker stop 커맨드
docker stop mysql000ex7
④ docker rm 커맨드
docker rm mysql000ex7
docker ps -a // 컨테이너의 삭제 여부를 확인
컨테이너를 생성할 때 pull 받은 이미지는 컨테이너 삭제 이후에도 계속 남아있다. 따라서, 더 이상 필요하지 않은 이미지를 삭제해주어야 한다. 이미지를 삭제할 때에는 이미지의 ID나 이미지의 이름을 사용해야 하며, 해당 이미지로 생성된 컨테이너가 먼저 삭제되어야 한다. (정지되어 있는 상태에서도 삭제할 수 없다.)
① 이미지 삭제
docker image rm 이미지 이름
// 또는 docker rmi 이미지 이름
② 이미지 목록 출력
docker image ls
지금까지 다운로드 받은 apache, nginx, mysql의 이미지를 모두 삭제해보자.
① 삭제하려는 이미지를 사용하는 컨테이너가 존재하는지 확인
docker ps -a // 중지된 컨테이너까지 검사해야하므로 -a 옵션을 사용해야 한다.
② 삭제하려는 이미지의 이름이나 ID를 알아내기 위해 이미지 목록을 출력
docker image ls
③ 이미지 이름을 이용해 이미지를 삭제
docker rmi httpd nginx mysql
docker image ls