이번에 내가 docker을 적용하면서 겪은 내용을 정리해 본다. 먼저 docker가 무엇이고 왜 사용하는지는 구글을 검색해보길 바란다.
ubuntu 서버 세팅은 아래 내 글을 참고하자.
1. docker 설치 및 세팅은 이 글을 참고
이 글을 따라면 docker를 설치할 수 있다. 그리고 해당글의 portainer는 docker의 이미지, 컨테이너, 네트워크 관리에서 유용하므로 설치하는 것을 추천한다.
2. 원하는 tomcat 이미지를 받자. docker hub에 접속하여 원하는 이미지를 검색한다. 그리고 docker pull 이미지명 으로 이미지를 받는다. 이미지 명의 콜론(:) 버전을 구분하기 위한 태그다. 원하는 특정 버전을 설치한다면 태그를 입력해 줘야 한다.
docker images로 현재 가지고 있는 이미지를 확인할 수 있다.
3. 이미지로 컨테이너 생성 및 실행
docker run -d -it --name con_test -p 8080:8080 tomcat:8.5.78-jre8-temurin-focal 입력된 명령어를 정리하면 1) -d : 백그라운드로 실행, 터미널을 빠져나와도 여전히 컨테이너는 실행됨 2) -it : 컨테이너를 종료하지 않고 계속 터미널에 입력 3) --name : 컨테이너의 이름을 지정 (길어 잘렸는데 위 스샷에서 맨아래 붉은줄에서 오른쪽 끝에 해당 이름이 표시됨) 4) -p : 포트지정, docker host 포트:docker 컨테이너 내부 포트로 바인딩 외부에서 8080포트로 서버에 접근하면 컨테이너 내부의 톰캣 기본 포트인 8080으로 연결해 주겠다는 의미 5) 맨 뒤의 tomcat:8.5.78-jre8-temurin-focal 은 2번에서 받은 이미지로 컨테이너를 생성
4. 톰캣 실행 결과 위 4번에서 두번째 빨간줄 docker ps -a 명령어로 이미 실행중임이 확인되고 있다. 그런데 브라우저로 접속하면 아래와 같다.
404 에러가 나고 있는데 이는 톰캣의 응답으로 정상이다. call에 응답할 있는 war 파일을 넣어주면 된다 그러려면 설치된 컨테이너에 war 파일을 어디에 위치하고, 어떻게 넣어줘야 할까?
명령어를 docker exec -it con_test bash 라고 입력해준다. con_test 컨테이너로 접속하여 명령어를 입력하겠다는 의미다. 붉은색 박스를 보면 컨테이너로 접속된 것을 알 수 있다. 컨테이너에 접속된 위치가 tomcat이 설치된 것으로 보여지는데 ls -la로 확인하면 맞는것을 알 수 있다. 그러므로 con_test 컨테이너의 /usr/local/tomcat/webapps 폴더에 ROOT.war 라고 war 파일을 넣어주면 되는 것이다.
exit로 컨테이너에서 나오고, docker 컨테이너에 파일을 복사해 넣는다. docker cp /opt/HelloWorld.war con_test:/usr/local/tomcat/webapps/ROOT.war docker host의 /opt 폴더에 HelloWorld.war 파일이 있는데 이걸 con_test 컨테이너의 /usr/local/tomcat/webapps 폴더에 ROOT.war로 파일로 넣어준다는 의미다. 에러 없이 복사 되었는지 확인해 준다. 파일명이 잘못된거나 폴더가 잘못 되었다면 에러가 난다. (반대로 하면 컨테이너 파일을 docker host로 복사할 수 있다.)
그리고 잠시 후 다시 8080 포트로 접속해 보면 아래와 같이 정상 적용되는 것을 확인할 수 있다.