Docker 개념, 설치, 기본 명령어, git-lab 서비스

강정우·2024년 1월 6일
0

Dev_Ops

목록 보기
3/15
post-thumbnail

도커 이미지로 개념 이해하기

  • 왼쪽은 Virtual Machine으로 동작한 방법이다. 이전에 한 번 VM 우분투를 돌려본 기억이 있다.
    단점: 서비스를 실행할 때 Hypervisor(예:VirtualBox)를 돌리고 그 위에 해당 OS를 돌려야하기 때문에 굉장히 무겁다.
    resource를 굉장히 많이 잡아먹는다.

  • 오른쪽은 Container Engine(대표주자: Docker)로 돌린 예시이다. 사진에서 보면 알 수 있듯 VM에 비해 굉장히 가볍다는 것을 알 수 있다.

  • 그럼 저기 Container에 뭘 올리는 건가? -> 쉽게 말해 작성한 web application이 될 수 있고 혹은 어떠한 application이 될 수 있다.
    web project라면 docker의 -volume 이라는 명령어로 서버(Host)의 파일을 Container의 파일과 연결하여 CI/CD를 구축할 수 있다.

도커 이미지로 동작 이해하기

저기 Host 부분이 서버,
Container가 Docker 이미지를 받아서 만든 Container
Container 내부에도 작은 메모리가 있어서 해당 메모리 안에 쉽게말해 탐색기(Finder)가 있는 것이다. 그래서 저기 내부에 라이브러리도 있고 코드도 있고 다~ 하는거다.
그리고 Container 밖에 있는 File System이 서버의 local 영역이라고 생각하면 편하다.

그리고 위 사진처럼 사용자가 ip주소의 몇번 포트로 들어오면 컨테이너의 몇번 포트로 보내도록 설정해주면 각 포트 별로 여러 어플리케이션(도커 컨테이너)들을 띄울 수 있다.

그럼 이제 도커를 만들어보자.

도커 설치

도커 공홈에서 docs를 눌러보면 window, mac, linux 3가지 환경에 각각 설치법이 적혀있다.

window, mac은 GUI를 제공하기 때문에 사용이 상대적으로 간편하다. 클릭만 하면 되니까.
이 GUI 사용법은 생코님 유튭을 보면 된다.

Linux OS에서 도커 설치

리눅스도 리눅스 기반 OS 3가지(우분투, 데비안, 페도라)에 대하여 알려주는데 우리는 우분투를 설치했으니 우분투 기반 도커를 설치해보자.

가장 처음에 전제조건이 있는데 뭐 우리는 앞서 ubuntu booting usb 만들기에서 최신 LTS버전을 받았으니 걱정이 없다.

또한 non-Gnome 환경에서 해당 환경의 터미널을 받으라고 하는데 어차피 Ubuntu는 기본적으로 Gnome 데스크톱 환경을 사용하기 때문에 신경쓰지 않아도 된다.

그리고 혹시 이전에 받아놓은 Docker가 있다면 삭제하라고 한다.

Ubuntu에서 Docker 설치

총 3가지 방법이 있다.

이 중 우리는 첫번째 방법으로 시도해 보자. 그냥 명령어 한 줄 입력하면 되기 때문이다.

해당 하이퍼링크를 클리하면 설치 명령어가 보이는데 그냥 ctrl + c, ctrl + shift + v 를 하면 된다.

  1. 도커가 사용할 저장소를 만들어주고
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. 도커를 설치하면 된다.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 도커 설치 후 docker images로 도커가 잘 설치되었는지 확인

도커 "이미지" 다운 받기

위 사진에 있는 이미지는 npm에 올라와있는 라이브러리 처럼, 어떤 개발자가 어떤 프로그램이 동작하도록 library와 코드, 어플리케이션 동작 환경을 구성하여 build를 하여 나온 결과물이다.

그리고 우리는 이 이미지를 npm install 처럼 pull 해온다.

그리고 다시 Docker images를 찍어보면 아래 사진 처럼 이미지를 정상적으로 받은 것을 볼 수 있다.

사진에 보이는 docker hub가 npm 같은 곳이라고 생각하면 된다.

docker pull gitlab/gitlab-ce:<next-version-tag>

# 예
docker pull gitlab/gitlab-ce:1.5.4-ce:0

우리의 목표 gitlab 연결하기

우리는 이제 우리의 목표인 gitlab을 연결해 볼 것이다. 우선 git-lab의 도커 설치 페이지에 가면 총 3가지 방법이 있다.

  1. Install GitLab using Docker Engine
  2. Install GitLab using Docker Compose
  3. Install GitLab using Docker swarm mode

여기서 우리는 Docker Engine으로 설치해보자.

다만 여기도 설치에 앞서 GITLAB_HOME을 잡아주면 명령어가 한 층 깔끔하기 때문에
코드가 저장될 디렉토리를 만들어주고 해당 디렉토리를 GITLAB_HOME이라고 잡아주면 된다.

  • 참고로 위 명령어에 -p 옵션은 parent의 약자로 해당 경로에 없는 파일이 보이면 그냥 다 만들어라는 뜻이다.

다음은 위 명령어를 그대로 복붙하면 되는데 이때
1. hostname(서버 ip 주소) 2. port 3. 이름 4. volumne
정도만 본인 환경과 입맛에 맞춰 다시 잡아주면 된다.

  • 이때 포트는 보통 22번은 호스트가 ssh로 사용중인데 publish 옵션의 앞부분을 다른 포트로 바꿔주면 된다.
    그러면 추후 gitlab에서 ssh를 사용할 때 22가 아닌 220를 써주면 된다.
--publish 220:22
  • sudo docker -ps 명령어를 치면 현재 container의 상태를 보여주는데 대충 컨테이너가 뜨기까지 1~2 분 정도 소요되기 때문에 해당 컨테이너의 상태가 healthy가 될 때 까지 기다린 다음 위에서 입력한 hostname(서버 ip 주소) 로 검색창에 입력하면 성공적으로 들어가질 것이다.

마지막으로 id, pw를 찾으면 되는데 id는 root가 기본 pw는 아래 명령어를 입력하면 문자열이 주어지는데 해당 문자열로 로그인하여 비번을 본인의 입맛에 맞게 설정하면 된다.

sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

Docker 기본 명령어

docker logs option -f
remove rm
current run status ps
--force => force remove
image delete => rmi <imagename>

network

  1. mkcontainer : docker run --name <containerName\> <imageName>

  2. port forwarding: docker run -p 80:80 <containerName\>

  3. how 2 modify html: docker exec <containerName\> pwd => pwd cmd line of the currently accessed conatiner.
    exec mean short 4 exectue

  4. accesse for sure : docker exec -it <containerName\> /bin/sh
    docker exec -it <containerName\> /bin/bash

  5. back 2 host : exit

  6. connect file system: docker run -p 80:80 -v ~/path:path <imageName>

  7. combine: docker run --name <containerName\> -p 80:80 -v <path\>:<path\> <imageName\>

  8. concurrent logs: docker logs -f <containerName\>

reference

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글