Re:제로부터 시작하는 갓생
[Docker] MacOS에서 설치 및 동작하기 (1) 본문
# Docker(도커) 시작하기

Docker는 컨테이너 기술을 활용해 애플리케이션과 실행 환경을 효율적으로 관리할 수 있는 도구이다
해당 게시물에서는 MacOS에서 Docker를 설치하고 기본 개념과 초기 사용 방법을 함께 알아보자.
* Docker 훑어보기

https://docs.docker.com/get-started/docker-overview/#docker-architecture
What is Docker?
Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.
docs.docker.com
* MacOS에서 Docker(도커) 설치하기
1. Docker 공식 홈페이지 접속
https://docs.docker.com/desktop/setup/install/mac-install/
Mac
Install Docker for Mac to get started. This guide covers system requirements, where to download, and instructions on how to install and update.
docs.docker.com
2. Mac OS 제품 칩셋 선택
Apple Silicon: M1, M2, M3... 계열 이라면 선택
Intel chip: intel 기반이라면 선택

3. 다운로드한 Docker .dmg 파일 실행 및 설치

4. Docker 구독 서비스 동의 화면에서 Accept 버튼 클릭

5. 권장사항(암호 필요)으로 선택 후 Finish 버튼 클릭

6. 원하는 방식으로 로그인하기 (ex. google, github 계정, 신규생성)

‼️ 참고로 나는 Github 로그인함


‼️ Tip: Survey는 우측 상단의 Skip 버튼으로 건너뛸 수 있음...

7. 무사히 접속 완료!

8. 터미널에서 rosetta 추가 인스톨
✳️ Rosetta는 무엇이고? 왜 Rosetta를 설치해야 하는가?
Apple Silicon 기반 Mac에서는 x86 아키텍처의 소프트웨어를 실행하기 위해 Rosetta를 설치해야한다
Rosetta는 번역 계층 역할을 하여 Docker와 같은 x86 기반 소프트웨어 호환성을 확보한다
softwareupdate --install-rosetta
9. 터미널에서 Docker 설치유무 확인
docker -v

* Docker Image 설치
✳️ 도커 이미지(Docker Image)란 무엇인가?
컨테이너를 생성하는데 필요한 모든 파일, 설정, 애플리케이션을 포함한 패키지
✳️ 컨테이너(Containe)란 무엇인가?
정의: 애플리케이션과 실행에 필요한 모든환경(코드, 라이브러리 등)을 묶어 독립적으로 실행할 수 있는 단위
역할
애플리케이션과 실행 환경을 묶어 호스트 운영체제에서 격리된 상태로 실행됨
Docker 이미지를 기반으로 실행되는 독립적인 가상 환경
가상머신보다 가볍고 빠름
✳️ Nginx는 무슨 역할인가?
정의:오픈소스 기반의 웹 서버이자 리버스 프록시 및 로드 밸런서로 사용되는 소프트웨어
역할
정적 콘텐츠(HTML, 이미지 등) 제공
트래픽을 여러 서버로 분산 (로드 밸런싱)
보안 연결(SSL/TLS) 설정 및 프록시 역할 수행
1. Docker Image 다운로드: 터미널에서 nginx pull
docker pull nginx

2. Docker Container 생성 및 실행
# nginx 이미지 기반으로 test이름의 Docker컨테이너를 생성 및 실행하는 명령어
docker run -d -p 80:80 --name test nginx

test 컨테이너 생성됨

localhost의 80번 포트 접근시 nginx기반의 웹 서버 수행됨

✳️ 포트(Port)는 무엇이고? 무슨 역할을 하는가?
정의: 코드, 애플리케이션, docker 이미지를 저장, 관리하는 저장소
역할
애플리케이션별로 고유 통신 채널 제공
docker 컨테이너 내부의 포트와 외부의 포트를 매핑하여 서비스 접근 가능
네트워크에서 데이터를 특정 애플리케이션으로 전달하기 위한 논리적 경로
예시
-p 80:80 -> 호스트의 80번 포트와 컨테이너 내부 80번 포트를 연결해 서비스 접근을 가능하게함
* Docker Registry 생성
✳️ 레포지토리(Repository)란 무엇인가?
정의: Registry 내부의 개별 저장소. 코드, 애플리케이션, 특정 Docker 이미지 저장 및 관리하는 저장소
역할
협업 및 버전 관리를 위한 소스 코드 저장
Docker에서 이미지 저장 및 배포에 사용
✳️ 레지스트리(Registry)란 무엇인가?
정의: Docker 이미지를 저장하고 배포할 수 있는 중앙 서버
역할
Docker hub와 같은 플랫폼을 통해 이미지 저장 or 공유
이미지 다운로드(Pull) or 업로드(Push)하여 쉽게 컨테이너 생성할 수 있도록 지원
1. Doker Hub 사이트 접속 후 로그인 ( https://hub.docker.com/ )
Docker Hub Container Image Library | App Containerization
Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.
hub.docker.com
2. Repositories 탭에서 Create Repository 버튼 클릭

3. test를 위한 private용으로 Create -> Private 레지스트리 설정해 테스트 환경 구성


4. 터미널에서 Docker login 실행
docker login

5. Docker image에 태그 추가 (터미널 동작)
# docker image list 확인
docker image ls
# docker image tag format
docker tag <로컬 이미지 이름>:<태그> <레지스트리 주소>/<이미지 이름>:<태그>
# 예시
# docker tag를 통해 nginx라는 이미지를 renadata/test라는 신규구성 repository에 1.0이라는 태깅 후 수행
docker tag nginx renadata/test:1.0


6. docker registry repository에 업로드
# docker Registry format
$ docker push <레지스트리 주소>/<이미지 이름>:<태그>
# docker Registry 사용예시
$ docker push renadata/test:1.0

7. 기존 구성한 registry에서 이미지 가져오기
# Docker Registry pull format
docker pull <레지스트리 주소>/<이미지 이름>:<태그>
# 예시: Docker Registry pull
docker pull renadata/test:1.0

자주 쓰는 명령어 확인
Docker 명령어 | 설명 |
docker -v | docker 버전 확인 |
docker ps -a | docker의 컨테이너 목록 확인 |
docker pull [docker image] | docker의 이미지를 레지스트리에서 가져와서 다운로드 |
docker build | 이미지 빌드 |
docker push | 이미지 레지스트리에 업로드 |
docker run | 이미지 기반으로 컨테이너 생성 및 실행 |
docker login | docker 계정 로그인 |
docker image ls | docker 이미지 목록 확인 |
docker tag | 이미지에 이름 또는 태그를 할당(추가) |