오늘은 window wsl2 ubuntu18.04환경에서 도커를 설치하고, 젠킨스를 이용해 자동 배포 파이프라인을 구축해 볼 예정이다.
자동 배포의 필요성
기존 팀 프로젝트의 work flow는 다음과 같았다.
- 각자 기능 구현 후 PR
- EC2 서버로 접속
- github에 merge된 코드를 git pull
- gradle을 이용해 build
- jar파일을 java -jar 명령어를 통해 80번포트에 실행
젠킨스가 해주는 것
- github으로부터 머지되었다는 연락을 받고
- 코드를 git clone하고
- gradle로 프로젝트를 빌드하여,
- 빌드한 목적파일을 어플리케이션이 실행되어야 할 서버로 전달하고, 어플리케이션을 구동하기 위한 명령어를 실행합니다.
즉, 나는 브랜치에 merge만 하면 나머지 부분은 젠킨스가 자동으로 작업해주고, 서버에 자동 배포되는 것이다.
도커 설치
우선 도커를 설치해준다.
curl -fsSL https://get.docker.com/ | sudo sh
위 명령어를 치면, 윈도우용 도커 데스크앱을 설치하는 것을 권장하는데, 무시하고 잠시 기다린다.
처음엔 에러가 발생했는데, 이전에도 보았던 에러라 바로 해결할 수 있었다.
2023.10.05 - [🛠️TOOL/📄Linux] - [Linux] - sudo apt update시 error: "Release file is not yet valid"
위와 같이 나온다면 설치가 완료된 것이다.
sudo usermod -aG docker $USER
도커는 기본적으로 root 권한을 필요로하고, root가 아닌 사용자가 사용시 권한이 필요하다.
위 명령어로 현재 접속중인 도커의 그룹 멤버쉽에 현재 사용자를 등록하고, 사용자에게 도커 권한을 부여하여 sudo 없이 사용이 가능하도록 한다.
만약 바로 적용이 안되면 다음 명령어로 즉시 새로운 그룹 멤버쉽을 등록해준다.
newgrp docker
docker version
도커가 잘 설치되었는지 확인한다.
sudo systemctl status docker
systemctl 명령어로 도커의 상태도 확인해준다.
혹시 여기서 에러가 뜬다면 아래 포스팅을 참고
버전정보를 보면 클라이언트와 서버로 나뉘어져 있다. 하나의 실행파일이지만 실제로 클라이언트와 서버역할을 각각 할 수 있는 것이 도커의 특징이다. 도커 커맨드를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력해 준다.
기본값이 도커 서버의 소켓을 바라보고 있기 때문에 사용자는 의식하지 않고 마치 바로 명령을 내리는 것 같은 느낌을 받고, 이러한 설계가 mac이나 windows의 터미널에서 명령어를 입력했을때 가상 서버에 설치된 도커가 동작하는 이유이다.
컨테이너 실행하기
실제로 컨테이너를 실행해보자.
터미널에서 도커를 실행시키는 방법은 다음과 같다.
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
---|---|
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
도커를 사용하는 다양한 예시는 아래 블로그에서 확인할 수 있다!
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
도커 기본 명령어
컨테이너 목록 확인
docker ps
위 명령어로 현재 실행중인 컨테이너 목록을 확인할 수 있다.
컨테이너를 하나 생성해보자.
컨테이너 생성
docker run --rm -it ubuntu:16.04 /bin/bash
--rm 옵션으로 프로세스가 종료되면 컨테이너가 삭제되도록 하였다.
ubuntu 16.04 이미지를 다운받은 적이 없기에, 컨테이너를 생성하면서 ubuntu 설치도 자동으로 되는 모습이다. 맙소사
다른 터미널을 열어서 docker ps로 다시 컨테이너 목록을 확인해보면, 작동중인 ubuntu 컨테이너가 보인다.
이후 해당 프로세스를 종료하면, --rm 옵션에 의해 컨테이너가 자동으로 삭제되어 목록에서도 사라진 모습이다.
그러나 --rm 옵션 없이 그냥 프로세스를 종료한다면, 컨테이너는 종료되지만 삭제되지않는다.
이렇게 종료된 컨테이너들은 docker ps -a
명령어로 확인할 수 있으며, 컨테이너의 읽기/쓰기 레이어는 그대로 존재하고 다시 시작도 가능하다.
컨테이너 삭제
docker rm [OPTIONS] CONTAINER [CONTAINER...]
만약 이러한 컨테이너를 영구히 삭제하고 싶다면, 위 명령어를 이용해 삭제가 가능하다.
다운로드한 이미지 목록 확인
docker images
위 명령어로 다운받은 이미지들을 확인할 수 있다.
다운로드한 이미지 삭제
docker rmi {imageID}
그리고 위 명령어로 다운받은 이미지를 삭제해 용량을 아낄 수도 있다.
단, 컨테이너가 실행중인 이미지는 삭제되지않는다.
docker logs ${CONTAINER_ID}
위 명령어로 컨테이너의 로그도 확인 가능하다.
도커에서 컨테이너를 업데이트 하려면 새 버전의 이미지를 다운(pull)받고 기존 컨테이너를 삭제(stop, rm) 한 후 새 이미지를 기반으로 새 컨테이너를 실행(run)하면 된다.
컨테이너를 삭제한다는 건 컨테이너에서 생성된 파일이 사라진다는 뜻,, 데이터는 AWS S3 같은 외부 스토리지에 저장해놓아야 한다.
Dokcer Desktop for window 설치
먼저 도커 공식 사이트에서 window 버전을 설치한다.
https://www.docker.com/products/docker-desktop/
[Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com](https://www.docker.com/products/docker-desktop/)
설치할 때 다음 옵션들은 모두 체크해준다.
✅ Hyper-V대신 WSL2 사용
✅ 바탕화면 아이콘 추가)
settings ➡️ general 에서 Use the WSL 2 based engine
을 체크해준다.
settings ➡️ Resources ➡️ WSL integration 에서 위 항목을 체크표시해주고, 내가 사용하는 WSL 환경을 Enable로 변경해준다.
도커를 설치하고 간단한 사용법을 정리해봤다. 다음 장에서는 실제 자동 배포 파이프라인을 구축해보자.
reference
'♾️DevOps > ♾️CI & CD' 카테고리의 다른 글
[CI/CD] - 무중단 배포 with CI/CD 1: nginx + spring 로드 밸런싱 편 (0) | 2024.02.26 |
---|---|
[CI/CD] - 도커와 젠킨스를 사용한 CI/CD -4 (도커의 설치부터 자동배포까지) (5) | 2024.01.09 |
[Trouble Shooting] - 젠킨스 빌드 시 error: external filter 'git-lfs filter-process' failed 에러 해결하기 (1) | 2023.12.30 |
[CI/CD] - 도커와 젠킨스를 사용한 CI/CD -3 (도커의 설치부터 자동배포까지) (0) | 2023.10.22 |
[CI/CD] - 도커와 젠킨스를 사용한 CI/CD -2 (도커의 설치부터 자동배포까지) (0) | 2023.10.22 |