[Docker] 도커 환경의 이해 - 도커허브, 레지스트리
✅ 도커 허브
도커 베이스이미지/ 공식 이미지를 제공한다.
회원가입만 하면 이미지를 무료로 저장할 수 있다.
기본적으로 모든 이미지는 공개되어 있어 누구나 접근이 가능하다
>> 비공개로 사용하려면 유료 서비스를 이용해야한다.
>> 개인사용자는 1개의 이미지만 private으로 사용할 수 있다.
외부에 공개되어있는 도커 이미지 레포지토리로
docker pull 명령을 이용해 컨테이너를 로컬에 받아오거나,
도커 이미지 빌드시 베이스 이미지 등을 받아오는데 주로 사용된다.
✎ 도커 허브를 쓰는 이유
- 도커이미지를 새로 만들지 않아도, 필요한 이미지를 가져다 바로 쓸 수 있음.
- 프로그램 만들 때 필요한 기본 이미지를 여기서 쉽게 가져올 수 있음!
✅ 도커 레지스트리
도커 이미지 저장소 호스팅 서비스
도커 허브에 로그인해 레포지토리를 생성하여 이미지를 등록 및 관리할 수 있다.
https://hub.docker.com/_/registry
도커 이미지를 공유하기 위한 애플리케이션이다 .
도커파일등을 제공하고, 레포지토리를 생성해 도커를 관리할 수 있따.
- 레지스트리(Registry)
- Docker Hub : https://hub.docker.com/
- 도커 이미지를 관리하는 공간
- 특별히 다른 것을 지정하지 않는다면, 도커 허브(Docker Hub)를 기본 레지스트리로 설정함
- 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있다
- 레포지토리(Repository)
- 레지스트리 내에 도커 이미지가 저장되는 공간이다.
- 이미지 이름이 사용되기도 함
- GitHub의 레포지토리와 유사하게 생각
- 태그(Tag)
- 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있다.
- 해당 이미지를 설명하는 버전 정보를 주로 입력합니다.
- 특별히 다른 것을 지정하지 않는다면 latest 태그를 붙인 이미지를 가져옴
✅ 도커 허브에서 이미지 가져와 컨테이너 실행 테스트
1. 도커 허브에서 이미지 가져오기
docker pull
- docker/whalesay:latest 이미지는 누군가(주로 도커 공식팀이나 커뮤니티 사용자)가 만들어서 도커 허브에 올려둔 것
해당 이미지를 로컬에 다운로드
docker image pull docker/whalesay:latest
2.이미지가 잘 받아졌는지 확인
docker image ls
- 다운로드한 이미지가 내 컴퓨터에 있는지 리스트를 확인할 수 있다.
3. 이미지 실행
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 가져온 이미지로 컨테이너를 실행한다.
- [COMMAND] : 초기 컨테이너 실행시 수행되는 명령어이다
- -name 옵션은 컨테이너 이름을 지정할 수 있다.
- 실행 시 cowsay 명령어를 사용하여 "2025.01.25 test"라는 메시지를 출력하도록 설정한다.
docker container run --name testWhalesay docker/whalesay cowsay 2025.01.23 test
testWhalesay생성
testWhalesay2 생성
4. 컨테이너 리스트 확인
docker container ps -a
- 실행 중이거나 실행했던 컨테이너 목록을 확인한다.
도커 프로그램에서 다양한 API를 제공하여 원하는 만큼 자동화가 가능하다.
위에 whalesay 예시를 보면 run할 때 붙히는 옵션이 있다.
옵션을 통해 컨테이너 별로 다른 값을 줄 수도 있다. !
MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수를 같이 지정하여 설정을 제어할 수 있다.
** 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어야 한다.
공유 자원 : 컨테이너는 삭제후 새로 만들면 모든 데이터가 초기화 되기 때문에
업로드 파일을 외부스토리지 (S3) 를 사용하면 좋다.
-- 세션이나 캐시를 파일로 사용할 경우에도 memcached redis와 같이 외부로 분리할것
✅ 서비스 빌드 및 배포
도커 레지스트리 허브에서 이미지를 가져와 서버에서 사용할 수 있게 되는데
만약 사내에 별도 저장소를 구축해두면 각 서버로 가져와 바로 구축/운영에 사용할수 있게 된다.
서비스 운용시 도커가 제시하는 개발배포 FLOW
⏺ 초기 구축
코드가 배포될 인프라를 구축하는 일을 의미한다.
만약 100대의 피씨서버가 있다고 할때 모든 피씨에 도커환경을 세팅하고 하나씩 도커파일을 올리기엔 너무 귀찮다.
Swarm이라는 도구를 이용하면 100대의 도커 환경을 한 손으로 관리할 수 있다
1단계 : Swarm 도커 머신 클러스터를 구축한다.
이를 이용하면 n대의 서버를 하나로 묶어 하나의 큰 서버처럼 사용하게 만들어줄 수 있다.
2단계 : docker-compose.yml로 스택을 구성하고 실행하는것
>> docker-compose.yml 은 서비스 구성에 필요한 모든 설정을 적어놓은 파일인데
이 파일을 이용해 웹서비스 + 데이터베이스를 한번에 실행하도록 구성이 가능하다
⏺ 스케일조정 >> 사용자가 많아졌을때 규모를 조정하는 것
유저가 많아지면 로드밸런싱이 필요할 수 있따. (2가지 패러다임 존재)
1) 클러스터의 worker node를 추가함으로써 부하분산을 취하는 방식
>> 물리PC 서버 한대를 클러스터에 포함하여 부하를 나눈다.
2) 서비스의 task container를 늘림으로써 부하분산을 취하는 방식
>> 기존 PC 서버에서 실행되는 컨테이너의 수를 늘린다.
⏺ 코드배포
만약 이미지의 코드를 변경하고 수정하고 싶을 수 있다.
1) 소스코드를 추가한 후 도커 이미지를 빌드한다.
2) 만들어진 이미지를 도커 허브에 올린다. (새로운 버전의 프로그램 설치파일을 올림)
3) 변경된 파일을 SCP를 사용해 원격서버로 전송한다.
4) 원격서버에 접속해 스택(docker compose) 을 다시 배포한다
docker stack deploy -c ./docker-compose.yml
이 과정을 거치면 새로운 환경을 재배포하여 업데이트 된 상태로 만들어 줄 수 있따.