프론트엔드 Docker macOs 한번 건드려 보기 part-1 설치

houndhollis·2024년 5월 26일
0
post-thumbnail

내용을 조금 이라도 깊이 있게 써보고 싶어서 파트를 나눠볼까 생각중이다.

Docker 를 사용하는 이유?

  1. 일관된 개발 환경
    Docker를 사용하면 동일한 개발 환경을 사용할 수 있습니다. 예를 들어 "내 로컬에서는 잘 되는데..."라는 문제를 줄여줍니다. 모든 의존성, 라이브러리, 도구 등이 Docker 이미지에 포함되어 동일한 환경을 재현할 수 있습니다.

  2. 간편한 셋업과 배포
    Docker 이미지를 사용하면 새로운 개발 환경 설정이 매우 간단해집니다. 복잡한 설치 과정 없이 Docker 이미지를 pull하여 컨테이너를 실행하기만 하면 됩니다. 또한, Docker 이미지를 통해 쉽게 애플리케이션을 배포할 수 있습니다.

  3. 의존성 관리
    프로젝트에 필요한 모든 의존성을 Dockerfile에 명시하여 관리할 수 있습니다. 이는 프로젝트 간의 의존성 충돌을 방지하고, 버전 관리를 체계적으로 할 수 있게 해줍니다.

  4. 테스트 및 CI/CD
    Docker는 테스트 자동화 및 CI/CD 파이프라인에 통합하기에 적합합니다. 프론트엔드 애플리케이션을 컨테이너 내에서 테스트하고, 빌드하고, 배포할 수 있습니다. Jenkins, GitLab CI, Travis CI 등과 쉽게 연동할 수 있습니다.

  5. 멀티 컨테이너 애플리케이션
    Docker Compose를 사용하면 프론트엔드, 백엔드, 데이터베이스 등 여러 서비스를 하나의 설정 파일로 정의하고 함께 실행할 수 있습니다. 이는 복잡한 애플리케이션을 쉽게 관리하고, 로컬에서 전체 스택을 실행해 볼 수 있게 해줍니다.

  6. 버전 관리
    Docker 이미지는 태그를 통해 버전 관리를 할 수 있습니다. 이를 통해 특정 버전의 개발 환경을 쉽게 재현할 수 있으며, 새로운 버전으로의 업그레이드도 관리하기 수월해집니다.

  7. 환경 분리
    개발 환경, 테스트 환경, 프로덕션 환경 등을 Docker로 분리하여 관리할 수 있습니다. 환경별로 다른 설정을 유지할 수 있어 환경 간의 충돌을 방지하고, 안정성을 높일 수 있습니다.

  8. 마이크로서비스 아키텍처 지원
    Docker는 마이크로서비스 아키텍처에 매우 적합합니다. 각 서비스를 독립된 컨테이너로 배포하고 관리할 수 있어 서비스 간의 독립성을 높이고, 확장성을 용이하게 합니다.

이와 같은 장점들 때문에 프론트엔드 개발자가 Docker를 사용하면 개발, 테스트, 배포 과정이 더욱 효율적이고 일관되게 관리될 수 있습니다.


Docker 설치

Docker Desktop 을 설치한다.

https://docs.docker.com/desktop/install/mac-install/
상단 링크를 통해서 공식 사이트에 접속해 주시면 됩니다.

intel or Apple silicon 둘중 노트북에 맞는 것으로 설치해 주시면 됩니다.

설치 이후 터미널에 docker -v 를 입력하시면 Docker version 이 잘 나오는것을 확인할 수 있습니다.

Rosetta 설치

로제타(Rosetta)는 Apple이 ARM 아키텍처(M1, M1 Pro, M1 Max 등)로 전환하면서 기존 x86 아키텍처의 애플리케이션을 실행할 수 있도록 도와주는 바이너리 트랜슬레이션 소프트웨어입니다.

$ softwareupdate --install-rosetta

해당 명령어로 설치를 해줍니다.

결론적으로 Docker에서 로제타를 설치하는 이유는 M1 Mac과 같은 ARM 아키텍처에서 기존의 x86 Docker 이미지를 실행하기 위해서입니다. 이는 개발 환경의 호환성을 유지하고, 기존 도구와 이미지를 계속 사용할 수 있게 해줍니다. 특정 아키텍처에 종속하지 않고 배포와 관리를 할수 있습니다.


Docker - Image, container 개념

Docker 이미지 (Image)

이미지는 불변(immutable)의 파일 시스템으로, 특정 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 패키지입니다. 여기에는 애플리케이션 코드, 런타임, 라이브러리, 환경 변수, 설정 파일 등이 포함됩니다.

  • 정적 파일: 이미지는 읽기 전용으로, 한 번 생성되면 변경되지 않습니다.

  • 계층 구조: 이미지들은 여러 개의 레이어로 구성되며, 각 레이어는 이전 레이어에 변경 사항을 추가하는 방식으로 생성됩니다. 예를 들어, 기본 운영 체제 레이어 위에 라이브러리 레이어가 추가되고, 그 위에 애플리케이션 코드 레이어가 추가됩니다.

  • Dockerfile: 이미지는 보통 Dockerfile을 사용하여 생성됩니다. Dockerfile은 이미지 빌드를 위한 명령어 집합을 포함하는 텍스트 파일입니다.

다음 파트에서는 react or next 에서 Dockerfile 설정 법에 대해서도 작성할 예정입니다.

Docker 컨테이너 (Container)

컨테이너는 이미지를 실행한 결과로, 격리된 가상 환경에서 애플리케이션을 구동합니다. 컨테이너는 이미지를 기반으로 생성되며, 이미지의 읽기 전용 레이어 위에 읽기/쓰기 가능한 새로운 레이어가 추가됩니다.

  • 실행 환경: 컨테이너는 이미지로부터 생성되며, 독립된 프로세스 공간에서 애플리케이션을 실행합니다.
  • 격리된 환경: 컨테이너는 호스트 시스템과 격리된 환경을 제공하여, 서로 다른 컨테이너 간의 간섭을 방지합니다.

요약
Image: 애플리케이션 실행에 필요한 모든 것을 포함하는 읽기 전용 패키지입니다.
Container: 이미지를 실행한 결과로, 애플리케이션을 격리된 환경에서 구동하는 동적인 실행 단위입니다.


Nginx 설치

$ docker pull nginx

설치 이유: Nginx는 인기 있는 웹 서버 및 리버스 프록시 서버입니다. 이를 로컬 환경에서 쉽게 실행하기 위해 Nginx 이미지를 Docker Hub에서 다운로드합니다. 이 이미지는 이미 Nginx가 설치되고 설정된 상태이기 때문에, 추가적인 설정 없이 바로 사용할 수 있습니다.

설정이 없이 바로 !

간단하게 설치 후 이미지에 받아진 모습이 보일겁니다!


Container 설치

$ docker run -d -p 3000:80 --name woong-test-docker nginx

-d (detached mode):

-d 옵션은 컨테이너를 백그라운드(detached) 모드에서 실행합니다.
이 옵션을 사용하면 컨테이너가 백그라운드에서 실행되므로, 터미널을 계속 사용할 수 있습니다.
예를 들어, 웹 서버나 데이터베이스 서버와 같이 지속적으로 실행되어야 하는 애플리케이션에 유용합니다.

-p (publish):

-p 옵션은 호스트의 포트를 컨테이너의 포트에 매핑합니다.
3000:80은 호스트의 포트 3000을 컨테이너의 포트 80에 연결합니다.
이를 통해 호스트의 포트 3000으로 들어오는 요청이 컨테이너의 포트 80으로 전달됩니다.
일반적으로 웹 애플리케이션을 외부에 노출할 때 사용됩니다. 예를 들어, 호스트의 3000번 포트로 접근하면 컨테이너 내부의 80번 포트에서 실행 중인 애플리케이션에 접근할 수 있습니다.

--name:

--name 옵션은 컨테이너에 사용자 지정 이름을 부여합니다.
woong-test-docker는 컨테이너의 이름으로, 이 이름을 사용하여 컨테이너를 쉽게 관리할 수 있습니다.
컨테이너 ID 대신 이름으로 컨테이너를 참조할 수 있어 편리합니다.

마지막 nginx 는 아까만든 이미지 를 사용하겠다 입니다.

이제 container 에 우리가 만든 woong-test-docker 가 생성된 것을 볼수 있습니다.
실행 시켜보겠습니다.

잘 실행되는 것을 볼 수 있습니다.

다음 시간에는 리액트 또는 next 에서 실행시켜 보겠습니다.
감사합니다.

profile
한 줄 소개

0개의 댓글