Docker Image 간단한 배포

MinSeong Kang·2022년 6월 24일
0

Intra

목록 보기
1/1

Docker ?

애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼.소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 모든 것이 포함되어 있다.

Dokcer 사용 이유

AWS에서는 Docker를 사용해야 하는 이유를 아래와 같이 정의하였다.

Docker를 사용하면 코드를 더 빨리 전달하고, 애플리케이션 운영을 표준화하고, 코드를 원활하게 이동하고, 리소스 사용률을 높여 비용을 절감할 수 있습니다. Docker를 사용하면 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보하게 됩니다. Docker의 간단한 구문을 사용해 완벽하게 제어할 수 있습니다. 폭넓게 도입되었다는 것은 Docker를 사용할 수 있는 도구 및 상용 애플리케이션의 에코시스템이 강력하다는 의미입니다.

nodeJS로 예를 들어보면, nodeJS를 배포하기 위해서 nodeJS의 소스코드만 배포하는 것에는 어플리케이션을 구동하는 데에 문제가 있다. nodeJS나 npm 또는 외부 라이브러리를 사용하면 여러 디펜던시와 환경 설정 모두 해주어야되기 때문이다. 모든 서버마다 이러한 설정을 하나하나 해주는 것에는 무리가 있으며, 잘못 설정한다면 오류가 발생할 수 있다. 이를 Docker가 해결해준다. Docker에는 소스코드 뿐만 아니라 어플리케이션을 정상적으로 동작하기 위한 여러 디펜던시과 환경 설정 등을 포함시킬 수 있다.

Docker Container 만들기

Docker Container를 만들기 위해서는 Dockerfile를 이용해 Docker Image를 만들고 Container를 구동할 수 있다.

  • Dockerfile : Container를 어떻게 만들어야 할지에 대한 설명서
  • Docker Image : 어플리케이션을 실행하는 데에 필요한 코드, 런타임 환경, 시스템 라이브러리 등 모든 세팅들을 포함.
  • Container : Docker Image를 고립된 환경에 실행시킬 수 있는 것

간단한 실습

1) 먼저 nodeJS를 배포하기 위해 간단하게 8080 포트 접속시 Docker Practice가 출력되는 백엔드 프로젝트 생성.

  • npm init -y
  • npm i express
  • index.js 에 아래 코드 작성
const express = require('express');
const app = express()
app.get('/', (req, res) => {
    res.send("Docker Practice");
});
app.listen(8080, () => console.log("server is running"));

2) Dockerfile 생성

해당 명령어에 대한 설명은 주석으로 적어 두었다. Dockerfile은 제일 빈번하게 변경될 수 있는 것을 마지막에 작성해야 한다. 가장 나중에 작성한 명령어가 레이어 제일 위쪽으로 위치하기 때문에 이미지를 만들고 나중어 소스코드가 변경되었을 때, 최상단의 레이어만 업데이트해주고 나머지 레이어는 다시 만들지 않아도 되기 때문에 이미지를 만드는 시간을 단축하고 효율성을 높일 수 있다.

3) Docker build

마지막 .은 빌드 컨텍스트로 도커에게 필요한 경로를 지정하고, -f 옵션은 어떤 도커 파일을 사용할건지 명시할 수 있다. -t 옵션을 통해 도커 이미지의 이름을 부여할 수 있다. Dockerfile에 작성한 명령어가 순서대로 실행되 고 있는 것을 확인 가능하다.

4) docker images

docker images 명령어를 통해 방금 전에 build한 Docker Image가 잘 생성되었다는 것을 확인할 있다.

5) docker run

컨테이너를 실행시키는 명령어로, -d 옵션은 컨테이너가 detached 모드에서 실행되며, 실행결과로 컨테이너 ID만을 출력할 수 있는 옵션이며, -p 옵션은 호스트와 컨테이너간의 포트 배포/바인드를 위해서 사용된다.

6) docker ps

docker ps 명령어를 통해 현재 실행 중인 컨테이너 들의 리스트를 확인할 수 있다.

7) 컨테이너 실행 확인

컨테이너가 실행되어, localhost:8080에 접속하면 node.js로 만든 서버가 잘 실행되는 것을 확인 할 수 있으며,
docker logs + 컨테이너 아이디 명령어를 통해 서버 로그도 확인 가능하다.

8) 컨테이너 레지스터리에 도커 이미지 올리기

여러 도커 컨테이너 레지스터리 중에 dockerhub에 올려보기 위해 회원가입을 하고 로그인을 하였다.
이 후 레포지토리를 생성한다.

레포지토리에 도커 이미지를 올리기 위해서는 토커 이미지와 레포지토리의 이름이 매칭되어야 한다. docker tag 명령어를 통해 도커 이미지를 레포리지토리의 이름과 매칭시켜 변경시킨다. docker tag 명령어가 잘 적용됐는지 docker images 명령어를 통해 확인할 수 있다.

마지막으로 도커 이미지를 푸시하기 전에 로그인을 하고, docker push 명령어를 통해 docker 이미지를 레포지토리에 등록한다.

다음과 같이 dockerhub에 docker 이미지가 잘 등록됐다는 것을 확인할 수 있다.

참고 자료

https://aws.amazon.com/ko/docker/
https://www.youtube.com/watch?v=LXJhA3VWXFA&t=36s

0개의 댓글