개발

WSL 활용 Windows 내장 Ubuntu Linux에 Docker, GitLab 설치하기

학생. 2024. 11. 22. 14:45

용어 설명

  • wsl
    • WSL(Windows Subsystem for Linux)은 Windows 10 및 Windows 11에서 리눅스 배포판을 실행할 수 있는 환경을 제공하는 툴. WSL을 통해 사용자는 Windows에서 리눅스 커맨드라인 도구와 애플리케이션을 직접 실행할 수 있으며, 별도의 가상 머신(VM)이나 듀얼 부팅 설정 없이도 리눅스 사용가능
  • Docker
    • 애플리케이션을 컨테이너라는 가상화된 환경에서 실행할 수 있게 해주는 플랫폼. 컨테이너는 애플리케이션과 그에 필요한 모든 종속성을 패키지화해, 어디서나 일관된 환경에서 실행 가능. 가상 머신보다 가볍고, 빠른 배포 및 확장에 유리.
  • Docker-compose
    • 여러 컨테이너를 정의하고 함께 실행할 수 있게 도와주는 도구. docker-compose.yml 파일에 각 서비스의 설정을 작성해, 한 번의 명령으로 여러 컨테이너를 동시에 시작하거나 종료 가능. 복잡한 멀티 컨테이너 애플리케이션을 쉽게 관리할 수 있음. Docker에 기반하여 동작함.
  • gitlab
    • Git 리포지토리를 관리하고 CI/CD 파이프라인을 제공하는 DevOps 플랫폼. 소스 코드 버전 관리, 이슈 트래킹, 코드 리뷰 등을 통합해 프로젝트를 효율적으로 관리 가능. 자체 호스팅 또는 클라우드에서 사용 가능하며, 개발부터 배포까지의 과정을 자동화할 수 있음.
  • SonarQube
    • 코드 품질과 보안을 분석하는 도구. 코드의 버그, 취약점, 중복 등을 자동으로 검사해 개발자가 더 나은 품질의 코드를 작성하도록 도와줌. 다양한 프로그래밍 언어를 지원하며, CI/CD 파이프라인과 통합해 코드 품질을 지속적으로 관리 가능.

Windows내 wsl2 설치

  • 파워쉘 관리자 권한으로 실행
    wsl --install
  • 설치 후 재부팅하라하면 재부팅 실행.
    • 재부팅 후 콘솔에서 리눅스 계정 생성하는 과정이 진행되어야 하며 자동으로 시작되지 않으면 다시 관리자 권한으로 파워쉘 열고 위 인스톨 명령 재실행
  • 리눅스 사용 계정 등록
  • 설치된 리눅스 목록 조회
     
    wsl -l -v

  • 설치하고 나면 ubuntu 바로 갈 수 있는 바로가기 생성 되고 파워쉘에서 wsl2로 실행해도 됨.

 

docker 설치

윈도우에서 docker 실행은 wsl에 설치된 linux에서 직접 설치도 가능하고 docker-desktop을 설치해서도 가능함. docker-desktop도 wsl을 base로 실행되고 UI가 포함된 각종 지원툴들도 함께 설치됨, 리눅스에서 사용하듯이 사용해보고 싶어서 여기서는 wsl에 설치된 ubuntu에서 직접 설치로 진행.

  • 파워쉘 실행 후 wsl로 리눅스 실행
  • 패키 업뎃
    sudo apt-get update
  • 필요 패키지 설치
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  • Docker 공식 GPG키 추가
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • Docker APT 저장소 추가
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 위에서 추가한 Docker 저장소 사용을 위해 패키지 업뎃
    sudo apt-get update
  • Docker 설치
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 설치확인
    sudo docker --version

  • 설치확인2 - hello-world 컨테이너 실행
    sudo docker run hello-world

  •  sudo 없이 docker 사용
    sudo usermod -aG docker $USER 
    • 로그아웃 후 재로그인 후 다음 명령 실행
      newgrp docker

 

 

docker-compose 설치

 

Gitlab 설치

  • data 경로 생성
    sudo mkdir /srv
    sudo mkdir/srv/gitlab
  • .bashrc 파일 최하단에 GITLAB_HOME 설정
    export GITLAB_HOME=/srv/gitlab
  • 적용
    source ~/.bashrc
  • docker-compose.yml 파일생성 (여기서는 ~/gitlab에 생성)
    • 80포트말고 다른 것(ex 8888) 쓰려면 80:80 => 8888:80 형태로 변경하면 됨
    • yml 첫줄에 있던 version 정보는 이제 불필요하다고 함.
    • external_url 값이 나중에 gitlab 웹에서 접속해서 clone URL 보여줄 때 사용됨
services:
  web:
    image: 'gitlab/gitlab-ee:latest'
    container_name: gitlab
    restart: always
    hostname: '192.168.0.11'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.0.11'
        # Add any other gitlab.rb configuration here, each on its own line
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '80:80'
      - '443:443'
      - '2224:22' #22번은 ssh로 사용하고 있기에 다른포트로 변경해 줍니다.
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

 

  • docker-compose 실행
    • docker-compose.yml 파일 생성된 위치에서 docker-compose 실행 (docker 이미지 자동으로 최신이미지 다운됨)
      docker-compose up -d
    • 실행 후 log 확인
      docker-compose logs -f
    • 아래와 같은 로그가 반복 출력되면 기동 완료 (초기 5분 내외 소요)
    • 이후 http://localhost 로 접속해서 화면 뜨면 성공.

 

  • 포트 포워드 설정
    • WSL에서 실행되는 linux는 가상 네트워크 인터페이스로 private IP 할당되어 외부에서 접속이 불가함.
    • 외부 접속을 위해서는 host(WINDOWS)로 들어오는 요청을 포트포워드 해야함.
    • 본인PC에서만 사용한다면 localhost로 붙으면 됨.
    • 아래 IP 기준으로 설명함
      • Windows IP : 192.168.0.11
      • Linux IP : 172.30.40.227
    • 관리자 권한으로 파워쉘 실행
      잘 되다 한번씩 접속안되면 리셋하고 다시하면 됐었음
#현재 포트포워드 목록
netsh interface portproxy show all

#80으로 들어오는 요청을 80으로 보내는 설정
netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.0.11 connectport=80 connectaddress=172.30.40.227

#포트포워드 전체삭제
netsh interface portproxy reset

 

 

 

출처

https://kr-goos.github.io/posts/docker-install-ubuntu/#google_vignette

 

반응형