Docker 설치

·

2 min read

Docker?

애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

  • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징

  • 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 담김

  • 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장 가능

Install Docker Desktop on Mac

https://docs.docker.com/desktop/install/mac-install/

$ softwareupdate --install-rosetta

$ docker -v

$ docker pull nginx 이미지 다운로드

$ docker run -d -p 80:80 --name my-nginx nginx 컨테이너 생성

# 1. d 옵션 : 컨테이너를 백그라운드에서 실행하는 detached 모드로 실행
# 2. p 80:80 옵션 : 호스트 머신의 80 포트를 컨테이너의 80 포트로 매핑하여 
#    컨테이너 내에서 실행 중인 NGINX 웹 서버에 접근
# 3. -name my-nginx 옵션 : 컨테이너에 "my-nginx"라는 이름을 할당
# 4. nginx 인자 : 컨테이너를 생성할 때 사용할 Docker 이미지의 이름

Get Docker Desktop

도커 예제 이미지 실행 연습

https://docs.docker.com/guides/getting-started/get-docker-desktop/

docker run -d -p 8080:80 docker/welcome-to-docker

docker/welcome-to-docker 해당 도커 예제 이미지를 사용하여 컨테이너를 실행하면 컨테이너를 백그라운드 모드(-d 옵션)로 실행하고, 호스트의 8080 포트와 컨테이너의 80 포트를 연결(-p 8080:80)한다.

이미지 안에는 프로젝트의 코드, 필요한 모든 라이브러리, 서비스를 실행하기 위한 환경 설정, 그리고 애플리케이션을 실행하는 데 필요한 서버 환경(예: 톰캣, 노드JS, 아파치 등)까지 모두 포함될 수 있다. 이를 바탕으로 도커 컨테이너를 실행하면 해당 환경에서 애플리케이션을 즉시 시작하고 실행할 수 있다.

해당 이미지를 실행하면 웹 브라우저를 통해 localhost:8080에 접속하여 간단한 웹 페이지를 볼 수 있다.

Pushing a Docker Image to Docker Hub

$ docker login
$ docker image ls

# docker image tag format 
# 태그 : 일반적으로 이미지의 버전을 구분하기 위해 사용
$ docker tag <로컬 이미지 이름>:<태그> <레지스트리 주소>/<이미지 이름>:<태그>
$ docker docker tag nginx myoxonee/my-nginx:1.0
# docker Registry format 
$ docker push <레지스트리 주소>/<이미지 이름>:<태그>
$ docker push myoxonee/my-nginx:1.0

# Docker Registry pull format 
$ docker pull <레지스트리 주소>/<이미지 이름>:<태그>

# Docker Registry pull example
$ docker pull myoxonee/my-nginx:1.0

Docker Image

Dockerfile(이미지를 빌드하는 데 필요한 지시어와 명령어를 포함)을 작성하여 Docker 이미지를 생성하고, docker build 명령을 사용하여 Dockerfile을 기반으로 로컬에서 이미지를 생성한다.

도커 이미지는 설치 애플리케이션과 유사한 개념을 가지고 있다. 설치 애플리케이션 패키지가 필요한 모든 파일, 설정, 종속성 등을 포함해 소프트웨어를 설치하고 실행할 수 있게 만드는 것 처럼, 도커 이미지도 애플리케이션 실행에 필요한 모든 파일, 설정, 라이브러리, 운영체제의 일부 등을 포함한다.

웹 애플리캐이션을 배포하는 대표적인 방법으로 Jenkins를 사용해 코드 변경사항을 감지하고 자동으로 빌드와 테스트를 수행한 후, Docker 이미지를 빌드하고 Docker 컨테이너를 자동으로 배포하는 방식이 있다. Jenkins의 자동화 능력과 Docker의 환경 일관성이 결합되어 더 빠르고 안정적인 소프트웨어 배포가 가능해진다.

참고자료

https://aws.amazon.com/ko/docker/
https://adjh54.tistory.com/350