우선 도커에서 Jenkins LTS 버전을 다운로드 한다.
$ docker pull jenkins/jenkins:lts
lts: Pulling from jenkins/jenkins
29279ac7c19f: Pull complete
63ffab5ed024: Pull complete
12b43c34bdce: Pull complete
34dd061580d8: Pull complete
6ab629299c3e: Pull complete
d1dfcf1542f8: Pull complete
38cc7dc6b328: Pull complete
47dacf9c49ac: Pull complete
c1ace3b468a5: Pull complete
5f195f15d9b9: Pull complete
3fc4cd638f13: Pull complete
e30c04944ccd: Pull complete
5116f0e929e9: Pull complete
Digest: sha256:31ae1763024448a78c2225a05b81817bf877e34fce971e7422f9315b36b073c2
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts
이미지가 잘 받아졌는지 확인한다.
~ docker images 127 err | 20:23:05
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts f7a9278ee82a 2 weeks ago 461MB
jenkins 이미지가 정상적으로 pull 된 것을 확인할 수 있다.
$ docker run -itd \
--name jenkins_container \
-p 8888:8080 \
-v ~/Desktop/jenkins_home:/var/jenkins_home \
-u root \
f7a9278ee82a
74e97ca0db1fa1c336b99994079488b680a7770d40c38d60bdba19e44af080
docker run
: Docker 컨테이너를 실행하는 명령어이다.itd
: 다음 세 가지 플래그의 조합이다.i
: 컨테이너와 상호작용하기 위해 STDIN을 여는 옵션t
: tty(터미널)를 할당하여 컨테이너 내부에서 작업을 수행할 수 있도록 하는 옵션d
: 컨테이너를 백그라운드에서 실행할 수 있게 하는 옵션p 8888:8080
: 호스트의 8888 포트를 컨테이너의 8080 포트로 포트 포워딩한다. 따라서 호스트의 8888 포트로 접근하면 컨테이너의 8080 포트로 연결된다.-v /jenkins:/var/jenkins_home
: 호스트의 ~/Desktop/jenkins_home
디렉토리를 컨테이너의 /var/jenkins_home
디렉토리와 마운트한다. 따라서 내부에서 생성되는 Jenkins 설정 파일 및 데이터 등이 호스트의 ~/Desktop/jenkins_home
디렉토리에 저장되게 된다.-name jenkins_container
: 컨테이너의 이름을 jenkins_container
로 설정하여 생성한다.u root
: 컨테이너 내부에서 실행되는 프로세스의 사용자를 root
로 설정한다. 편의상 준 옵션으로, 추후 설정 과정에서 일부 권한 문제를 우회할 수 있다f7a9278ee82a
: 사용할 도커 이미지의 IMAGE ID로 방금 pull 받은 이미지라고 볼 수 있다.호스트의 8888
포트를 컨테이너의 8080
포트로 포트 포워딩해주고, 호스트의 ~/Desktop/jenkins_home
디렉토리를 컨테이너의 /var/jenkins_home
디렉토리와 볼륨 마운트하여 Jenkins 컨테이너를 실행해주었다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74e97ca0db1f f7a9278ee82a "/usr/bin/tini -- /u…" 6 minutes ago Up 6 minutes 50000/tcp, 0.0.0.0:8888->8080/tcp jenkins_container
방금 생성한 jenkins_container가 up 상태인 것을 확인해 볼 수 있다.
현재 호스트 내에 도커 컨테이너에 올라간 젠킨스는 호스트의 8888 포트가 컨테이너에 8080 포트로 포워딩 되도록 설정해준 상태이고, 젠킨스는 기본 포트가 8080에서 동작한다.
젠킨스의 웹페이지는
http:// {젠킨스 서버 주소
}:{포트
} 로 젠킨스에 접속할 수 있다.
현재는 별도로 분리된 서버거 아니라 나의 mac에서 돌아가는 도커에 올렸기 때문에 루프백 주소에 8888 포트로 접속하면 jenkins 컨테이너에서 돌아가는 jenkins 웹페이지에 접속가능하다.
정상적으로 컨테이너를 생성하고 실행해주었다면 위와 같이 젠킨스의 Administrator password 를 입력하라는 창이 나온다.
초기 비밀번호는 젠킨스 서버의 /var/jenkins_home/secrets/initialAdminPassword
에서 확인할 수 있다.
docker exec로 실행중인 젠킨스 컨테이너에 접근하여서 bash를 실행시킨후, 해당 경로로 접근해보자
$ docker exec -it jenkins_container /bin/bash ok | 20:56:30
root@74e97ca0db1f:/#
root@74e97ca0db1f:/# cat /var/jenkins_home/secrets/initialAdminPassword
aee3ef389ea3459696e079146db3e03e
cat으로 /var/jenkins_home/secrets/initialAdminPassword
를 출력해보면 초기 비밀번호를 알아낼 수 있다.
비밀번호를 복사해준 후 ctrl+p, ctrl+q를 순차적으로 눌러 빠져나온다.
다시 젠킨스 웹페이지로 돌아가서 해당 비밀번호를 복사하여 로그인 해준다.
로그인에 성공하면 다음과 같이 플러그인 설치하는 부분이 나온다. install suggested plugins를 선택하여 기본적인 것만 설치해주었다.
설치중..
전부 설치가 완료되면 외부에서 접속할 때 사용할 어드민 계정을 생성하는 페이지가 나온다.
입력폼에 정보를 입력하고 save and continue를 눌러 계정 생성을 완료한다.
다음은 jenkins에 접속할 url를 설정하는 부분이다.
로컬내에서만 사용해볼 것이기 때문에 localhost:8888로 설정해주었다.
위의 설정들을 모두 마치면 이제 젠킨스를 사용하기 위한 기본적인 설치는 마쳤다고 볼 수 있다.