반응형
해당 글에서는 MacOS 환경에서 Docker를 설치하고 Image, Container, Registry를 생성하여 관리하는 방법에 대해 알아봅니다
1) Docker Desktop 설치
1. 공식 사이트에서 다운로드를 합니다.
💡 공식 사이트에서 다운로드를 합니다.
- M1 기준 프로세스 기기로 설치하기에 ‘Docker Desktop for Mac with Apple slicon’으로 설치를 해줍니다.
2. 다운로드한 Docker Desktop를 실행합니다.
3. 권장되는 설정으로 PC의 비밀번호를 이용한 접근이 가능하도록 구성합니다.
4. Docker Desktop을 이용하기 위해 로그인을 수행합니다.
5. 간단한 설문조사를 수행합니다.
6. 수행이 잘되었음을 확인하였습니다.
7. 추가적으로 rosetta를 설치해 줍니다.
💡 로제타(Rosetta)
- Docker 컨테이너 내에서 다른 아키텍처의 바이너리를 실행할 수 있도록 지원하는 도구입니다.
- 예를 들어, x86 아키텍처에서 동작하는 Docker 환경에서 ARM 아키텍처의 바이너리를 실행해야 할 때 Rosetta를 사용할 수 있습니다.
- Rosetta를 사용하면 다른 아키텍처의 바이너리를 컨테이너 환경에서 실행할 수 있으므로, 다양한 플랫폼 간의 이식성을 높일 수 있습니다. 이는 특정 아키텍처에 종속되지 않고 효율적인 배포와 관리를 할 수 있는 장점을 제공합니다.
$ softwareupdate --install-rosetta
8. 터미널에서 Docker가 설치되었는지 확인합니다.
$ docker -v
2) Docker 동작 확인
💡 해당 글에서는 Docker 동작 과정으로 Docker Image를 생성하고 이미지를 Docker Container화 합니다. 그리고 Container를 Registry내에 올리는 과정을 확인해 봅니다.
💡 Docker 클라이언트, 도커 호스트, 도커 레지스트리 간 흐름
1. [Client → Docker Host] 클라이언트는 도커 명령어를 사용하여 도커 호스트에 요청을 보냅니다.
2. [Docker Host] 도커 호스트는 클라이언트의 요청을 받아들이고, 해당 요청에 따라 컨테이너를 생성, 중지, 제거하거나 이미지를 관리합니다.
3. [Docker Host → Registry] 만약 클라이언트가 이미지를 생성하거나 업로드하려면, 도커 호스트는 해당 이미지를 도커 레지스트리에 업로드합니다.
4. [Registry] 도커 레지스트리는 이미지를 저장하고 관리하는 중앙 집중식 저장소입니다. 도커 호스트는 도커 레지스트리에 이미지를 업로드하거나 다운로드할 수 있습니다.
5. [Docker Host → Client] 컨테이너가 종료되면, 도커 호스트는 해당 컨테이너의 상태와 결과를 클라이언트에게 반환합니다.
- 이렇게 클라이언트, 도커 호스트, 그리고 도커 레지스트리는 도커 환경에서 상호 작용하며, 이미지의 업로드와 다운로드, 컨테이너의 생성과 관리 등의 작업을 수행합니다.
3) Docker Image 설치
💡 Docker Image 설치
- Docker의 설치가 완료가 되었고, Docker Image로 nginx를 설치하는 과정을 알아봅니다.
1. nginx 다운로드하기
💡 nginx 터미널에 nginx를 다운로드합니다.
# docker hub에서 nginx를 다운로드 받습니다.
$ docker pull nginx
[ 더 알아보기 ]
💡 Nginx
- 웹 서버 소프트웨어로, 고성능이며 확장성이 뛰어납니다. 주로 정적 파일의 서비스, 리버스 프록시, 로드 밸런싱, HTTP 캐싱 등 다양한 기능을 제공합니다.
- Nginx는 경량화되어 리소스 사용량이 적고, 동시 접속자 처리에 효율적입니다. 이러한 특징으로 인해 많은 웹 사이트와 애플리케이션에서 널리 사용되고 있습니다.
💡 Docker 이미지로 다운로드하는 것은 어디서 받아지는 것인가?
- Docker Hub 또는 다른 Docker 레지스트리에서 다운로드할 수 있습니다. 대부분의 공식 이미지는 Docker Hub에서 제공됩니다. - 또는 사용자 정의 이미지를 만들어 Docker Hub나 다른 레지스트리에 업로드할 수 있습니다.
💡 docker 이미지로 다운로드할 수 있는 목록은 무엇이 있는가?
- Ubuntu, CentOS, Alpine, Nginx, MySQL, Redis, Node.js, Python, Java, Ruby, Go, PHP, MongoDB, Postgres, Elasticsearch, Grafana, Jenkins, WordPress, Django, Ruby on Rails, Laravel 등을 다운로드할 수 있습니다.
2. Docker dscktop으로 성성된 Image 중 nginx를 확인합니다.
💡 [참고] 컨테이너에는 생성되지 않은 상태입니다.
4) Docker Container 생성 및 실행
1. Docker로 컨테이너를 생성하고 실행합니다.
💡 아래의 명령어를 통해 컨테이너를 생성하고 실행합니다.
- 해당 명령어는 ‘nginx’ 이미지를 기반으로 ‘my-nginx’라는 이름의 Docker 컨테이너를 생성하고 실행하는 명령어입니다.
1. d 옵션은 컨테이너를 백그라운드에서 실행하는 detached 모드로 실행합니다.
2. p 80:80 옵션은 호스트 머신의 80 포트를 컨테이너의 80 포트로 매핑하여 컨테이너 내에서 실행 중인 NGINX 웹 서버에 접근할 수 있도록 합니다.
3. -name my-nginx 옵션은 컨테이너에 "my-nginx"라는 이름을 할당합니다.
4. nginx 인자는 컨테이너를 생성할 때 사용할 Docker 이미지의 이름을 지정합니다.
# nginx 이미지를 기반으로 my-nginx 이름의 Docker 컨테이너를 생성하고 실행하는 명령어
$ docker run -d -p 80:80 --name my-nginx nginx
2. 컨테이너가 생성됨을 확인하였습니다.
3. localhost의 80번 포트로 접근을 하면 nginx기반의 웹 서버가 수행됨을 확인하였습니다.
💡 [참고] Docker Desktop을 종료하면 해당 nginx는 종료가 될까?
- Docker Desktop은 로컬 컴퓨터에서 도커를 실행하기 위한 도구입니다.
- Docker Desktop을 종료하더라도, 이미지와 컨테이너는 로컬 환경에 남아 있을 수 있습니다. 따라서, Docker Desktop을 종료해도 이전에 실행한 Nginx 컨테이너는 여전히 실행 중이며, 해당 컨테이너에 접근할 수 있습니다.
- 다만, Docker Desktop을 다시 시작하지 않고 새로운 컨테이너를 생성하려면 접근할 수 없습니다.
5) Docker Registry 생성
1. Docker Hub 사이트에 접속하여 로그인을 수행합니다.
2. Repositories 탭을 선택하고 ‘create repository’ 버튼을 누릅니다.
3. private 용으로 구성을 하였습니다.
4. 터미널에서 docker login을 수행합니다.
# docker 로그인을 수행합니다.
$ docker login
💡 [참고] Login did not succeed, error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 해당 문제에 대해서 로그인된 Docker Desktop을 실행시키지 않아서 발생한 문제였습니다. 이에 대해 Docker Desktop을 실행시키면 정상적으로 로그인 처리가 되었습니다.
5. Docker image에 태그를 추가합니다.
💡 생성된 Docker image 목록을 확인합니다.
# docker Image 리스트 확인
$ docker image ls
# docker image tag format
$ docker tag <로컬 이미지 이름>:<태그> <레지스트리 주소>/<이미지 이름>:<태그>
# docker tag를 통해 nginx라는 이미지를 adjh54/m-nginx라는 새롭게 구성한 repository에 1.0이라는 태깅을 하여 수행하였습니다.
$ docker tag nginx adjh54/my-nginx:1.0
6. docker 레지스트리 repository에 올립니다.
# docker Registry format
$ docker push <레지스트리 주소>/<이미지 이름>:<태그>
# docker Registry 사용예시
$ docker push adjh54/my-nginx:1.0
7. 올린 레지스트리를 확인합니다.
6) Registry 가져오기
1. 기존에 구성한 Registry 가져옵니다.
# Docker Registry pull format
$ docker pull <레지스트리 주소>/<이미지 이름>:<태그>
# Docker Registry pull example
$ docker pull adjh54/my-nginx:1.0
2. Docker Desktop에서 확인합니다.
💡 [참고] 해당 구성 과정에서 사용한 명령어에 대한 설명입니다.
docker 명령어 | 설명 |
docker -v | docker 버전을 확인합니다. |
docker ps -a | docker의 컨테이너 목록을 확인합니다. |
docker pull [docker image] | docker의 이미지를 다운로드 받습니다. |
docker build | docker 이미지를 빌드합니다. |
docker push | docker 이미지를 레지스트리에 업로드합니다. |
docker run | docker 이미지를 기반으로 컨테이너를 생성하고 실행시킵니다. |
docker login | docker 계정 로그인을 수행합니다. |
docker image ls | docker 이미지 목록들을 확인합니다. |
docker tag | docker 이미지에 이름 또는 태그를 할당합니다. |
docker pull | docker 이미지를 레지스트리에서 가져옵니다. |
오늘도 감사합니다. 😀
반응형
'Docker > 환경설정 및 구성' 카테고리의 다른 글
[Docker] Dockerfile을 이용한 React App 배포 환경 구성 및 실행방법 (0) | 2024.02.03 |
---|---|
[Docker] Dockerfile을 이용한 Vault 배포 환경 구성 및 실행방법 (0) | 2024.02.03 |
[Docker] Vault에서 Unseal Key를 잃어버린 경우 초기화 방법 (0) | 2024.01.18 |
[Docker] Docker로 Vault 로컬 환경 구성 방법 (0) | 2024.01.18 |
[Docker] Docker로 SonarQube 로컬 설치 및 검증 수행 방법 (0) | 2023.12.28 |