Docker 기반 개발환경 - t3qdev/nextg GitHub Wiki

Docker 기반 개발 환경 구축

Docker 기반의 환경은 하나의 Docker 에 하나의 서버스를 기본 동작하도록 하며 호스트에선 Haproxy 를 사용하여 각 Docker 서비스를 연결한다.

서비스 분산 관리 : Haproxy Docker 컨테이너 블럭 : Jenkins, Nexus, SonarQube, Tomcat8 (Jboss)

doker 참고서

CentOs에 Docker 설치

Ubuntu에 Docker 설치

기본명령어

  • docker search 이미지이름 //이미지조회

  • docker pull 이미지이름 //이미지 다운로드

  • docker run --privileged(추가권한모드) -d(데몬으로) --name 컨테이너이름 이미지이름 //컨테이너 설치

  • docker ps or docker ps -a //컨테이너 프로세서 보기

  • docker exec -it jenkins /bin/bash //컨테이너 내부 터미널 실행, 빠져 나올 때는 ctrl+p,q

  • docker stop 컨테이너이름 //컨테이너 중지

  • docker start 켄테이너이름 //컨테이너 시작

  • docker rm 켄테이너이름 //컨테이너 삭제

  • docker rmi 원본이미지이름 //이미지삭 제 :

Jenkins

  • docker run --privileged -d --name jenkins docker.io/jenkins // 이미지 다운 및 컨테이너 설치

  • docker exec -it jenkins /bin/bash // 컨테이너 내부 터미널 실행 --> 빠져 나올 때는 ctrl+p,q

  • docker exec -it jenkins /usr/local/bin/jenkins.sh // 데몬시작 (데몬모드로 시작하지 않은 경우)

  • docker ps //정상동작/포트 확인 8080포트 사용

  • docker inspect jenkins | grep IP //아이피확인

SonarQube

  • docker pull docker.io/sonarqube // 이미지 다운

  • docker run --privileged -itd --name sonarqube docker.io/sonarqube /bin/bash //컨테이너 동작

  • docker exec sonarqube /opt/sonarqube/bin/run.sh // 데몬시작 Ctrl+C 로 빠져나옴

  • docker ps //정상동작/포트 확인 9000포트 사용

  • docker inspect sonarqube | grep IP //아이피확인

Tomcat8

  • docker pull docker.io/tomcat // 이미지 다운

  • docker run --privileged -itd --name tomcat docker.io/tomcat /bin/bash //컨테이너 동작

  • docker exec tomcat /usr/local/tomcat/bin/startup.sh // 데몬시작

  • docker ps //정상동작/포트 확인 8080포트사용

  • docker inspect tomcat | grep IP //아이피확인

Nexus

Nexus 는 아직 Official 배포가 되지 않았다.

기본 배포본에 직접 Nexus 를 설치하도록 한다.

  • docker pull docker.io/centos // 이미지 다운

  • docker run --privileged -itd --name nexus docker.io/centos /bin/bash //컨테이너 동작

  • docker exec -it nexus

# adduser nexus
# su - nexus
nexus# wget http://download.sonatype.com/nexus/oss/nexus-2.13.0-01-bundle.tar.gz
nexus# tar zxvf nexus-2.13.0-01-bundle.tar.gz
nexus# mv nexus-2.13.0-01-bundle  nexus
nexus# vi nexus/bin/nexus
       RUN_AS_USER=nexus
nexus# vi nexus/conf/nexus.properties
       application-port=8081
nexus# ./nexus/bin/nexus start

http://~~:8081/nexus/ 로 접근한다.

RunDeck

  • docker pull docker.io/jordan/rundeck // 이미지 다운

  • docker run --privileged -itd --name rundeck docker.io/jordan/rundeck //컨테이너 동작

  • http://~~:4440/ admin/admin 로 접근한다.

모니터링(cAdvisor)

  • docker pull docker.io/google/cadvisor

  • docker run --privileged -itd --name jenkins docker.io/jenkins /bin/bash

  • docker exec jenkins /usr/local/bin/jenkins.sh

  • docker inspect jenkins | grep IP

  • docker run -d --privileged -v=/:/rootfs:ro -v=/cgroup:/cgroup:ro -v=/var/run:/var/run -v=/sys:/sys:ro -v=/var/lib/docker:/var/lib/docker:ro --name=cadvisor google/cadvisor:latest /bin/bash

http://~~:8080/ 접근하면 모니터링 화면이 나타남.

HaProxy

호스트에 설치하여 호스트로 들어오는 요청을 분배시킨다. 설치는 쉽다.

  • yum install -y haproxy

  • 설치가 되었으면 실제 설정을 잡아준다.
  • 서비스할 포트를 정의한다. Tomcat:8080,Nexus:8081,SonarQube:9000,Jenkins:8888
  • 설정파일은 /etc/haproxy/haproxy.cfg 이다. 아이피는 위에서 찾은 아이피를 넣는다
#-----------------------------------------
# Nexus  8081
#-----------------------------------------
frontend nexus *:8081
    default_backend nexus

backend nexus
   server nexus1 172.17.0.3:8081 check

#-----------------------------------------
# jenkins 8888
#-----------------------------------------
frontend jenkins8888 *:8888
    default_backend  jenkins

backend jenkins
   server jenkins1 172.17.0.5:8080 check


#-----------------------------------------
# Tomcat 8080
#-----------------------------------------
frontend tomcat8080 *:8080
    default_backend tomcat

backend tomcat
   server tomcat1 172.17.0.6:8080 check


#-----------------------------------------
# SonarQube 9000
#-----------------------------------------
frontend sonarqube9000 *:9000
    default_backend sonarqube

backend sonarqube
   server sonarqube1 172.17.0.7:9000 check

서비스 재시작 systemctl restart haproxy

서비스별 설정

Nexus

  • http://설치호스트주소:8081/nexus admin/admin123
  • Repositories > Central > Configuration > Download Remote Index 를 True 로 설정
  • Repositories > Central > 마우스 오른쪽 > Update index
  • Repositories > Releases > Configuration >Deployment Policy 를 Allow Redeploy 로 설정
  • admin > Profile > password 에서 관리자 패스워드 변경
  • Security > Users > Add > Nexus User > 사용자 입력 Role > Add > Nexus Deployment Role,Nexus Developer Role, Repo: All Repositoreis (FullControl)추가

tomcat

매니저 유저추가.

  • vi /usr/local/tomcat/conf/tomcat-users.xml

<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-script,manager-gui"/>
  • /usr/local/tomcat/bin/shutdown.sh // 정지

  • /usr/local/tomcat/bin/start.sh // 시작

Jenkins 기본설정

접근은 기본 8080이나 톰캣과 포트 중복으로 haproxy 에서 8888으로 변경 하여 접근 http://호스트계정:8888/

  • Jenkins 관리 > 플러그인관리> 설치가능
Git Plugin
Publish over SSH 
Deploy to container (Tomcat 배포)
SonarQube Plugin
Cobertura Plugin
Rundeck plugin
  • Jenkins 관리 > 시스템설정 > JDK
JDK installations
  Install automatically uncheck
  JDK Name : java1.8
  JAVA_HOME : /usr/lib/jvm/java-8-openjdk-amd64
  • Jenkins 관리 > 시스템설정 > Git
Git installations
   Install automatically uncheck
   Git Name : git
   Path to Git executable : /usr/bin/git
  • Jenkins 관리 > 시스템설정 > Git plugin
  user.name 과 user.email 을 입력
  ~/.gitconfig or git config --list 참조 
  • Jenkins 관리 > 시스템설정 > Maven
   Maven Name : maven3.3.9
   Install automatically check
   Install from Apache : Version 3.3.9
  • Jenkins 관리 > 시스템설정 > SonarQube Server
  SonarQube installations
    Name : SonarQube5.5
    Server URL: http://192.168.0.115:9000/
    Server version: 5.3 or higher
  • Jenkins 관리 > 시스템설정 > SonarQube Scanner
  SonarQube Scanner installations
     Install automatically Check
       SonarQube Scanner Name : SonarQube2.6.1
       Install from Maven Central : Version SonarQube Scanner 2.6.1
  • Jenkins 관리 > 시스템설정 > E-mail 로 알려줌 (필요한 경우/ gmail예시)
   SMTP 서버 : smtp.gmail.com
   Use SMTP Authentication Check 
   사용자명 : [email protected] 
   비밀번호 : 
   SSL 사용 : check
   SMTP Port : 465
   Charset : UTF-8
  • Jenkins 관리 > 시스템설정 > Publish over SSH (옵션)
  Path to key : /var/lib/jenkins/.ssh/id_rsa
  SSH Server : 추가 (공개키가 전파된 상황)
     SSH Server Name: jenkins@host
     Hostname : 192.168.0.117
     Username : tomcat
     Remote Directory : /home/tomcat/webapps
     (Public key 설정이 어려우면 그냥 password authentication 이용)
  • Nexus 배포를 위한 메이븐 설정
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.3.9/conf/settings.xml에
    <server>
      <id>releases</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server> 
    <server>
      <id>snapshots</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server> 
    <server>
      <id>thirdparty</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>
추가 후 재시작.  deployment/deployment123 은 nexus 기본 계정
  • Rundeck
Rundeck
  Instances
     Name : rundeck
     URL : http://192.168.0.116:4440/
     Login : admin
     Password : admin

Jenkins Job 생성

새로운 Item > Item 이름 Maven project

오래된 빌더 삭제 check  
  보관할 최대갯수: 3
소스코드관리
  Git 
     Repository URL : https://github.com/t3qdev/nextg.git  (알맞게..) 
        (알맞게.. 경로/repositorys/project.git , git@도메인:/경로/project.git , http://)
     Credentials : 오픈일때는 none 그렇지 않다면 Add
     Branches to build : */master  (알맞게..)
  빌드유발 
     Build whenever a SNAPSHOP dependency is built check
  Build
    Goals and options : clean deploy cobertura:cobertura
  Add Pre-build Step : Execute SonarQube Scanner
    Pre Steps
      JDK : java1.8
      SonarQube Scanner : SonarQube2.6.1 (셀렉박스 안보이면 재시작)
  빌더후조치추가
    Deploy war/ear/ to container
       WAR/EAR files : **/*.war
       Context path  : /nextg
       Container  
         Tomcat 7.X
            Manager user name :  tomcat-user.xml 파일에 추가한 부분과 싱크
            Manger pasword :     tomcat-user.xml 파일에 추가한 부분과 싱크
            Tomcat URL : http://192.123.123.1:8080/

Maven,SoarQube 등 Central 설치는 실시간이 아니므로 선택창에 나오지 않는다면 플러그인>설치가능한플러그인>재시작 작업을 진행한다.

RunDeck

기본폴더는 /etc/rundeck 이며 이곳에 설정파일들이 있다.

rundeck 유저의 ssk 공개키를 (/var/lib/rundeck/.ssh/id_rsa.pub) 사용할 노드들에 배포하고( ~/.ssh/authorized_key )

/var/rundeck/projects/프로젝트/resources.xml 파일에 노드를 등록해야 한다.

<project>
  <node name="docker1" 
    description="Docker test Server" tags="Deplay" 
    osFamily="Linux" osName="centOS" hostname="192.168.0.123" osVersion="7.2"  username="t3q" 
    />
  <node name="homestar" 
    description="a humdinger" tags="integration,us-west"    osFamily="unix" hostname="192.168.1.02"  username="alexh">
    <attribute name="flavor" value="medium"/>
    <attribute name="package:version" value="2.0"/>
  </node>
</project>

Firewall port 등록(필요시)

sudo iptables -L
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-port=추가원하는포트/tcp
sudo firewall-cmd --reload

JIRA 설치

https://hub.docker.com/r/cptactionhank/atlassian-jira/

⚠️ **GitHub.com Fallback** ⚠️