인프런 Dowon Lee님의 Jenkins를 이용한 CI/CD Pipeline 구축 강의를 수강하며 작성한 내용입니다.
젠키스에서 만든 결과물(빌드파일, hello-world.war)을 이전에는 로컬에 있는 톰케서버에 배포했었다.
이번에는 이 war파일을 다른 서버에 복사해서 사용해보려고 한다.
로컬PC 외에 다른 PC 서버가 있어야되지만 없으므로 도커에 가상의 서버를 만들어서 배포해볼 예정이다.
도커의 가상서버(VM, 사진의 연두색 박스) 컨테이너에는 우선 SSH서버가 기동되어 있어야한다.
그리고 VM안에 새롭게 도커엔진을 설치한다. 도커안에 도커가 들어가 있는 셈.
그 후 젠킨스에서 만든 war파일을 SSH를 통해서 VM에 복사를 한다. 그리고 복사된 war파일을 도커에서 기동시키기 위해 이미지를 생성해야한다. Dockerfile과 war파일을 가지고 이미지를 생성한다. 이렇게해서 만든 이미지는 tomcat server와 war파일을 가지고 있을 것이다.
그러면 이제 이미지를 VM안에서 만든 도커엔진에서 컨테이너를 실행시킬 수 있게 된다.
위와 같은 과정을 위해서 Jenkins에서 여러가지 일을 해야한다.
1. war파일을 SSH를 이용해 VM 서버에 복사한다.
2. VM 서버에서 Dockerfile + war파일을 가지고 docker image를 만든다. (= 빌드한다.)
3. 빌드된 도커 이미지파일로 컨테이너를 생성한다.
도커에서 말하는 이미지란 실행하고자하는 내용이 포함되어 있는 단일화되어 있는 결과물이다. 이는 상태를 바꿀수 없는 파일이며 이 내용을 가지고 인스턴스(컨테이너)를 만들어서 사용하게 되는 것이다.
도커 컨테이너 형태로 실행할 수 있는 SSH 서버를 설치해보자.
Secure SHell, 시큐어 셀이란 네트워크 상의 다른 컴퓨터로 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 혹은 프로토콜이다.
컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해서 서로 통신을 할 때 보안적으로 안전하하게 통신을 하기위해 사용한다.
크게 데이터전송과 원격제어를 위해 사용한다.
SSH는 보안전인 장점을 위해 일반적인 비밀번호를 통한 접속이 아닌, Public Key 와 private key 를 사용한다.
Public Key : "공용 키"라는 말 그대로 공개 되어도 안전한 key이다. 이 키를 이용해 메세지를 전송하기 전 암호화를 한다.
하지만 복호화는 불가능.
Private Key : "개인 키" 개인이 가지는 키이다. Public Key와는 다르게 절대 공개되어서는 안되는 Key이다. 본인 컴퓨터에 저장하며 Public Key로 암호화된 메세지를 "복호화"할 수 있다.
도커 컨테이너 형태로 실행할 수 있는 SSH 서버를 설치해보자.
나는 도커 허브에서 강의에서 강사님이 제공해주신 윈도우 전용 이미지를 다운받았다.
docker run --privileged --name docker-ssh-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup [이미지 이름] /usr/sbin/init
docker 컨테이너를 만들었고 이름은 "docker-ssh-server"로 했다.
host pc에 남아있는 포트로 매칭을 시켜줘야한다. 10022포트로 포워딩을 했다. 뒤에 22는 10022포트로 접근하게 되면 그걸 22번 컨테이너가 받겠다는 의미이다. (SSH를 보통 10022로 설정한다고 함)
웹서버가 기동이되면 그 웹서버는 8080으로 기동이 되겠지만 host pc에서 접속을 할때는 8080은 젠킨스가, 8088은 tomcat이 쓰고 있기 때문에 8081로 설정했다.
(혹시 모를 문제가 있을 수 있어서 도커이미지 이름은 가렸다.)
docker ps
를 통해 컨테이너들을 확인해 보면 잘 있고 그림엔 잘려있지만 "STATUS"도 UP 상태로 정상 작동중임을 알 수 있다.
root라는 계정으로 ssh서버에 접속을 시도해보면 그림처럼 Key를 등록할 것인지 물어보게 되는데 "yes"를 입력하고 비밀번호를 설정한다.
나는 만들어진 이미지 파일을 썻기 때문에 비밀번호 또한 만들어져 있어서 입력 후 접속했다.
비밀번호 입력시 화면에는 보이지 않는데, 보이지만 않고 입력은 되고 있는 것이니 당황하지 말자!
잘 접속되었다. root 뒤에 있는 문자는 컨테이너 아이디가 되겠다.
도커서버로 사용할 건데 도커가 작동중인지 확인하기 위해 systemctl status docker
를 입력해보면 그림처럼 inactive 상태로 작동중이지 않음을 알 수 있다.
systemctl enable docker
, systemctl start docker
를 차례로 입력하면 도커가 작동되게 할 수 있다.
docker ps
나 docker images
등 관련 명령어들도 당연히 사용 가능하다.
젠킨스에 Publish over SSH 플러그인을 설치 하자.
그 후 젠킨스관리에 시스템에 들어간 후 "SSH Servers에 추가"를 누르고 정보를 입력한다.
그리고 test Configuration을 눌러보면 Success가 나온다.
Success가 나와야 젠킨스에서 SSH 서버에 접속할 수 있다는 얘기가 된다.
다음에는 이제 젠킨스를 이용해서 배포해보자!
https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ssh%EB%9E%80/