Docker와 Jenkins로 CI / CD 환경 구축하기[2]

안상철·2022년 6월 21일
1

CI / CD

목록 보기
2/8
post-thumbnail

도커는 다양한 운영체제에서 사용할 수 있지만 리눅스 기반이기 때문에 리눅스 환경에서 가장 설치 ~ 운영하기 쉽습니다. 따라서 윈도우에 Docker를 설치하고 작동하는 과정을 알아봅시다.

1. Docker사용 전 환경설정

2020년 5월 기준으로, 이전에는 윈도우에서 도커를 사용하려면 윈도우 버전이

  • Windows 10 Pro

이고 이 환경에서 Hyper-v 기능을 사용해야 했지만, 이후 업데이트에서 WSL2를 Window10 PRO가 아닌 환경에서도 사용할 수 있게 되었기 때문에

  • Windows 10 Pro 에디션

-- WSL2 기반 Docker Engine 사용 가능

-- Hyper-V 기반 Docker Engine 사용 가능

  • Windows 10 Home 에디션

-- WSL2 기반 Docker Engine 사용 가능

자신의 윈도우 버전에 맞게 위와 같은 방법으로 도커를 사용할 수 있게 되었습니다.

WSL은 Windows Subsystem for Linux 2의 줄임말로 윈도우에서 리눅스를 사용할 수 있게 해주는 기능입니다. Home 에디션의 경우 Docker를 사용하려면 WSL2가 필수이며, Pro 사용자의 경우 WSL2를 사용하지 않더라도 Hyper-V 기반 가상화를 사용해 Docker Engine을 사용하는 것이 가능합니다.

여기서는 Home과 Pro 공통으로 사용할 수 있고, 좀 더 안정적으로 동작하는 WSL2 방식으로 도커를 실행 해 보겠습니다.

2. WSL2를 설치하고 활성화 하기

WSL2를 설치하기 위해서는 가상 터미널을 사용해야 하는데. 윈도우 PowerShell을 먼저 관리자 권한으로 열어줍니다.

$ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
버전: 10.0.19041.844

이미지 버전: 10.0.19043.928
기능을 사용하도록 설정하는 중
[==========================100.0%==========================]

위 명령어(DISM = 배포 이미지 서비스 및 관리)로 Microsoft-Windows-Subsystem-Linux 기능을 활성화합니다.

$ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
배포 이미지 서비스 및 관리 도구

이미지 버전: 10.0.19043.928

기능을 사용하도록 설정하는 중
[==========================100.0%==========================]
작업을 완료했습니다.

다음은 위 명령어로 가상머신 플랫폼 기능을 활성화 해 줍니다.

작업이 완료되었다면 재부팅을 해야 적용됩니다. PC를 재부팅 해 줍시다.

3. WSL2 리눅스 커널 업데이트

Windows 10에 WSL 설치 | Microsoft Docs

x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지

위 링크를 참조해서 설치를 먼저 진행하고 리눅스 커널 패키지를 설치합니다. 윈도우 공식 가이드 문서가 보기 불편하다면 2번째 링크인 msi파일을 실행해도 됩니다.

둘 중에 한 가지를 선택해 실행하고 나면 윈도우용 우분투 프로그램이 실행되는데

맨 처음 user정보를 생성 해 줍시다.

이후에는 sudo apt upgrade 등의 명령어로 업데이트 해주고 다른 리눅스 배포판인 칼리리눅스 등을 설치하는 것 도 가능합니다. 저는 기본인 우분투를 받았습니다.

참조

https://www.lainyzine.com/ko/article/how-to-install-wsl2-and-use-linux-on-windows-10/

4. 리눅스에 Docker 설치하기

Docker Desktop for Mac and Windows | Docker

이제 WSL2와 우분투 콘솔이 준비되었다면 Docker를 설치 해 봅시다. 위 링크를 클릭해 윈도우용을 설치합니다.


22년 4월 15일 기준 가장 최신 버전은 4.7.0입니다. 다운로드 되는데는 수 분이 걸릴 수 있으니 기다려줍니다.

5. Docker의 실행

설치가 완료되면 다른 프로그램처럼 바로가기가 생성되는데, 윈도우에서 도커를 실행하면 기본적으로 WSL2 환경이 백그라운드로 실행됩니다. 이때 도커가 정상적으로 열리지 않으면 윈도우 가상화 설정이 되지 않은 것이기 때문에 BIOS로 진입해 가상화 기능을 켜줍시다.

BIOS에서 가상화를 켜는 방법은 구글링하면 많이 나옵니다.

이제 도커를 실행할 준비가 모두 완료되었습니다.

6. Docker와 WSL 통합설정

도커를 처음켜면 Start와 튜토리얼을 선택할 수 있는데, 둘 다 무시하고 상단의 톱니바퀴모양 설정을 클릭합니다.

먼저 General 설정에서 ’Use the WSL 2 based engine’에 체크가 되어있는지 확인합니다. 미리 체크가 되어있을 텐데, 혹시 되어있지 않다면 체크하고 오른쪽 아래의 Apply & Restart 버튼을 클릭합니다.

다음으로 왼쪽 사이드바에서 Resource > WSL Integration 메뉴로 이동합니다. ’Enable Integration with my default WSL distro’에 체크되어있는지 확인합니다. 체크가 되어있지 않으면 체크하고 오른쪽 아래의 Apply & Restart 버튼을 클릭해주면 도커 엔진이 재실행됩니다.

이제 우리는 도커를 윈도우에서 리눅스 서버를 기반으로 운용할 준비를 모두 마쳤습니다.

7. nginx 서버를 예제로 실행 해 보기

Windows Terminal을 열어서 간단한 테스트를 해보겠습니다. PowerShell 탭을 하나 열고 wsl 명령어로 Docker 전용 머신이 실행중인 것을 확인할 수 있습니다.

$  wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2

wsl로 docker-desktop 리눅스에 명령어를 실행해볼 수 있습니다. docker-desktop은 BusyBox 기반의 경량 리눅스인 것을 확인해볼 수 있습니다.

$ wsl -d docker-desktop busybox
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
...

docker version 명령으로 Docker 서버와 클라이언트 정보를 확인해봅니다.

$ docker version
Client:
 Cloud integration: 1.0.17
 Version:           20.10.7
 API version:       1.41
 ...

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
 ...

docker ps로 실행중인 컨테이너를 확인해봅니다.

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

아직 아무것도 실행중이지 않은 것을 확인할 수 있습니다. 여기서부터는 nginx 이미지로 간단한 서버 테스트를 해보겠습니다. 먼저 웹 브라우저를 열어 127.0.0.1:4567에 접속해봅니다. 아마 아무런 화면도 나타나지 않을텐데, 정상입니다.

docker run 명령어로 nginx 이미지 기반 컨테이너를 하나 실행해봅니다.

$ docker run -p 4567:80 -d nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
b4d181a07f80: Pull complete
edb81c9bc1f5: Pull complete
b21fed559b9f: Pull complete
03e6a2452751: Pull complete
b82f7f888feb: Pull complete
5430e98eba64: Pull complete
Digest: sha256:47ae43cdfc7064d28800bc42e79a429540c7c80168e8c8952778c0d5af1c09db
Status: Downloaded newer image for nginx:latest
5909b49c4a0e677fae0146846bdf4feca1ef869ece4cc46499f58d00f311e3d1

Docker에서는 이미지를 자동으로 다운로드 받고 실행해줍니다. docker ps로 실행한 컨테이너를 확인합니다.

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                  PORTS                                   NAMES
5909b49c4a0e   nginx:latest   "/docker-entrypoint.…"   1 second ago   Up Less than a second   0.0.0.0:4567->80/tcp, :::4567->80/tcp   musing_allen

다시 웹 브라우저에서 127.0.0.1:4567에 접속해보면, 이제 ‘Welcome to nginx!’ 메시지가 나타납니다.

축하드립니다! Docker가 정상적으로 실행되는 것 까지 확인했습니다. 이제 Jenkins로 넘어가서 우리의 프로젝트를 하나씩 서버에 업로드 해 봅시다.

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글