Just Do IT!
Docker와 Docker Compose 본문
728x90
반응형
Docker
- 소프트웨어 컨테이너 기술을 제공하는 플랫폼으로, 애플리케이션과 그 의존성들을 격리된 환경에서 실행할 수 있게 해준다.
- 애플리케이션을 효율적으로 개발, 배포, 실행할 수 있다.
- 다양한 운영 체제 및 클라우드 환경에서 동일한 방식으로 동작하므로 개발 환경과 프로덕션 환경 간의 일관성을 제공한다
Docker의 주요 개념, 구성 요소
- 이미지 (Image)
- 애플리케이션과 그 실행에 필요한 모든 것을 포함하는 가볍고 독립적인 패키지
- 파일 시스템, 라이브러리, 실행 환경 및 애플리케이션 코드 등을 포함하고 있다.
- 컨테이너 (Container)
- 이미지의 실행 가능한 인스턴스
- 격리된 환경에서 동작하며, 호스트 시스템과는 독립적으로 실행된다.
- 각 컨테이너는 자체 파일 시스템, 프로세스, 네트워크를 가지며, 호스트 및 다른 컨테이너와 격리되어 있다.
- 레지스트리 (Docker Registry)
- 도커 이미지를 저장하고 관리하는 서비스
- 주로 도커 허브를 많이 사용한다.
- 사용자는 이미지를 가져와서 사용할 수도 있고, registry에 직접 저장한 후 가져와 사용할 수 있다.
- 도커 컴포즈 (Docker Compose)
- 여러 개의 컨테이너로 이루어진 애플리케이션을 정의하고 실행하기 위한 도구
- docker-compose.yml 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의하고 관리할 수 있다.
Docker의 장점
- 일관성: 개발 환경과 프로덕션 환경 간의 일관성을 유지할 수 있다.
- 효율성: 가상화보다 가볍고 빠르게 애플리케이션을 배포할 수 있다.
- 확장성: 애플리케이션을 더 쉽게 확장하고 관리할 수 있다.
- 격리: 각 컨테이너는 독립적으로 실행되므로 한 컨테이너의 변경이 다른 컨테이너에 영향을 미치지 않는다.
Docker 설치하기
https://docs.docker.com/engine/install/ubuntu/
1. Docker's apt repository setting
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
- ca-certificates : 인증서 관리 패키지
- curl : command line 용 data transfer tool
- download / upload 모두 가능하다
- HTTP / HTTPS / FTP / LDAP / SCP / TELNET / SMTP / POP3 등 주요 프로토콜을 지원한다.
- LINUX / UNIX 계열 및 Windows 등 주요한 OS에서 구동되므로 여러 플랫폼과 OS에서 유용하게 사용할 수 있다.
- libcurl 이라는 C 기반의 library가 제공되므로 C / C++ 프로 그램 개발시 위의 protocol과 연계가 필요하다면 libcurl을 손쉽게 연계할 수 있다.
- libcurl은 PHP, RUBY, PERL 및 여러 언어에 바인딩 되어 있으므로 사용하는 언어나 개발 환경에 맞게 libcurl을 사용할 수 있다.
- /etc/apt/keyrings 폴더 생성 후 0755 권한 설정
- 0755 : 접근 권한 설정
- 7 : rwx (소유자 접근 권한)
- 5 : r-x (그룹 소유자 접근 권한)
- 5 : r-x (기타 사용자 접근 권한)
- chmod a+r /etc/apt/keyrings/docker.asc
- a : 모든 사용자
- + : 기존 권한에 권한 추가
- r : 읽기 권한
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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
- Docker의 APT 저장소 정보를 포함한 문자열 출력
- deb [...] https://download.docker.com/linux/ubuntu [...] stable
- deb : APT 패키지 형식을 나타냅니다.
- [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]: 현재 시스템의 아키텍처를 가져오고, Docker의 서명키가 저장된 위치를 지정합니다.
- https://download.docker.com/linux/ubuntu: Docker의 Ubuntu용 패키지 저장소 URL입니다.
- $(. /etc/os-release && echo "$VERSION_CODENAME"): 현재 Ubuntu 버전의 코드네임(예: focal, jammy)을 가져옵니다.
- stable: 안정된 버전의 패키지를 설치하도록 설정합니다.
- | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null:
- |: 파이프 연산자로, 앞의 출력 결과를 뒤의 명령어로 전달합니다.
- sudo tee /etc/apt/sources.list.d/docker.list: 위에서 생성한 저장소 정보를 /etc/apt/sources.list.d/docker.list 파일에 기록합니다. sudo는 관리자 권한으로 실행합니다.
- > /dev/null: 출력 결과를 화면에 보이지 않게 합니다.
2. Docker package 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- docker-ce:
- Docker Community Edition의 약자로, Docker의 오픈 소스 버전
- 컨테이너를 생성하고 관리하는 데 필요한 기본적인 기능을 제공
- docker-ce-cli:
- Docker Command Line Interface의 약자
- Docker와 상호작용하기 위한 명령줄 도구로, 컨테이너를 관리하고 작업을 수행하는 데 사용
- containerd.io:
- Containerd는 컨테이너 실행을 관리하는 데 필요한 고수준 API를 제공하는 데몬
- 컨테이너의 생명주기 관리(생성, 실행, 중지, 삭제 등)를 처리
- Docker의 핵심 구성 요소 중 하나로, 컨테이너 런타임을 지원
- docker-buildx-plugin:
- Docker 이미지의 빌드를 위한 고급 기능을 제공하는 플러그인
- 멀티 아키텍처 빌드와 같은 고급 기능을 지원하여 다양한 플랫폼에서 이미지를 쉽게 빌드할 수 있다
- docker-compose-plugin:
- Docker Compose의 CLI 플러그인
- 여러 컨테이너를 정의하고 실행하기 위한 YAML 파일을 사용하여 애플리케이션 스택을 구성하고 관리하는 데 도움을 준다.
3. 도커 권한 수정
sudo usermod -aG docker $USER
- root 권한 없이도 docker를 사용할 수 있도록 권한 수정
- aG : 사용자를 그룹에 추가하되 기존 그룹은 제거하지 않도록 설정
- $USER : 현재 사용자의 이름을 자동으로 가져오기
Docker 명령어
컨테이너 실행
docker run -d --name my-nginx -p 8080:80 nginx
- docker run: 새로운 컨테이너를 생성하고 실행하는 명령어
- -d:
- 컨테이너를 백그라운드(detached) 모드로 실행
- 터미널을 계속 사용할 수 있다.
- --name my-nginx
- 컨테이너 이름을 my-nginx로 지정.
- 이 이름으로 컨테이너를 관리할 수 있다.
- -p 8080:80
- 호스트의 8080 포트를 컨테이너의 80 포트로 매핑.
- localhost:8080으로 Nginx 서버에 접근할 수 있게 된다.
- nginx: 사용할 이미지를 지정.
시작 및 정지
docker start my-nginx
docker stop my-nginx
컨테이너 확인
docker ps
docker ps -a
- docker ps는 항상 실행되는 컨테이너만 보여준다
- -a 옵션을 추가하면 모든 컨테이너를 확인할 수 있다.
컨테이너 로그 확인
docker logs my-nginx
- docker logs -f : 실시간으로 로그 확인 가능
- docker logs --tail 10 my-nginx2 : 로그 끝의 10줄 확인 가능
컨테이너 내부 접속
docker exec -it {{container-name}} /bin/sh
docker exec -it {{container-name}} /bin/bash
컨테이너 삭제
docker rm [컨테이너ID]
- ID는 다 쓰지 않고 네 자리만 적어도 삭제가 가능하다.
- 컨테이너명으로 삭제해도 된다.
이미지 확인
docker images
이미지 삭제
docker rmi [이미지ID]
- 이미지명이나 ID로 삭제 가능하다.
이미지 검색
docker search nginx
이미지 다운로드
docker pull nginx
Docker Compose 설치
- Docker Compose는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구
- 단일 파일에 애플리케이션의 서비스, 네트워크, 볼륨 등을 설정할 수 있다.
- docker-compose.yml 파일을 사용하여 여러 컨테니터 간의 관계와 설정을 정의하고 한번에 여러 컨테이너를 실행하거나 관리할 수 있다.
docker-compose.yml에 설정할 수 있는 것들
- 서비스(Services):
- docker-compose.yml 파일 내에서 각 서비스는 하나의 도커 컨테이너를 나타냅니다. 서비스 정의에는 이미지, 포트 매핑, 환경 변수, 볼륨 마운트 등이 포함될 수 있습니다.
- 네트워크(Networks):
- 서비스 간 통신을 위한 도커 네트워크를 정의할 수 있습니다. 서비스는 동일한 네트워크에 속하면 서로 통신할 수 있습니다.
- 볼륨(Volumes):
- 데이터를 저장하거나 컨테이너 간에 데이터를 공유하기 위해 도커 볼륨을 정의할 수 있습니다.
- 환경 변수(Environment Variables):
- 서비스에 환경 변수를 설정하여 동적으로 컨테이너의 동작을 구성할 수 있습니다.
Docker compose 명령어
빌드
docker-compose build
실행
docker-compose up
docker-compose up -d
- -d 옵션을 통해 백그라운드에서 실행할 수 있다.
중지 및 컨테이너 삭제
docker-compose down
프로젝트를 수정한 경우
docker-compose up --build -d
- 삭제하고 다시 빌드하는 일 없이 그냥 위 명령어를 입력하면 된다.
실제 사용 예시
https://daydream-sy.tistory.com/342
조금 헷갈렸던 개념들을 TIL에 이곳저곳 작성햇었는데 그걸 모아서 작성해봤다.
한번 정리한다고 다 이해가 되는 건 아니지만...그래도 여러번 반복하면서 내걸로 만들어야겠다.
728x90
'개발 공부 > DevOps' 카테고리의 다른 글
Docker, Docker-compose 이용해서 가상머신에서 프로젝트 빌드하기 (2) | 2024.09.27 |
---|---|
Nginx란 무엇인가? (1) | 2024.09.24 |