Overview
Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다.
따라서 이 Application의 배포가 더 용이해집니다.
✅아주 큰 구조
✅그 중, Docker File & Docker Image & Docker Container의 관계
Docker Container
한 컴퓨터 내에서 여러 서비스를 진행하게 되었을 때, 각 서비스마다 요구하는 프로그램의 버전이 다를 수 있습니다.
따라서, 각 서비스마다 요구하는 특정 버전의 프로그램들끼리만 이 Container에 넣어둔 것입니다.
Docker Image
특정 서비스가 요구하는 환경을 기록해두기 위해, linux 컴퓨터 상에서 특정 상태를 캡처하여 박제해놓은 것입니다.
eg) node image: linux에 node.js가 설치된 상태를 그대로 박제하여 클라우드에 올려놓은 것
하나의 Image로, Container를 몇개든지 만들어낼 수 있습니다.
Dockerfile
Docker Image에 대한 설계도입니다.
✅이렇게 해서 뭐가 좋은가?
서버로의 App 배포가 편리해집니다.
: 서버 컴퓨터에서는 개발 컴퓨터로부터 받은 코드 & 설계도를 가지고, 서버 컴퓨터 내에 동일하게 Container를 설치하면 되니까요.
Containerize an application
이제 application을 containerize하는 실습을 해보겠습니다.
✅1. Application 구성하는 코드들 다운받기
App을 갖고 뭘 하려면 당연히 App 소스코드가 먼저 필요합니다.
원하는 디렉토리에서 아래 명령어를 통해 파일을 다운받읍시다.
git clone https://github.com/docker/getting-started-app.git
✅2. Dockerfile, .dockerignore 만들기
자 이제 가장 근본이 되는 설계도, 즉 Dockerfile을 만들어봅시다.
getting-started-app 폴더 안에다가, Dockerfile이라는 빈 파일을 만듭시다. (Dockerfile.txt가 아니라 Dockerfile입니다.)
아래 명령어를 통해서도 가능합니다.
touch Dockerfile
Dockerfile에다가 아래와 같이 채워넣어줍니다.
# syntax=docker/dockerfile:1
CMD ["node", "src/index.js"]
그 다음, Dockerfile과 같은 위치에 .dockerignore라는 파일을 생성하고,
이 안에 node_modules라고 입력합니다.
✅3. Docker Image Build하기
이제 Dockerfile을 바탕으로 Image를 build해 봅시다.
getting-started-app 폴더 위치에서 아래 명령어를 통해 Image를 Build합니다.
docker build -t getting-started .
잘 생성됐나 확인하기 위해 아래 명령어를 실행해보면 (아무 위치에서나), Image 리스트가 뜹니다.
docker images
✅4. Docker Container 시작하기
최종적으로, Image를 바탕으로 Container를 시작해 App을 실행해봅시다.
아래 명령어를 통해 Container를 시작합니다. (아무 위치에서나)
docker run -dp 127.0.0.1:3000:3000 getting-started
잘 시작됐나 확인하기 위해 아래 명령어를 실행해보면 (아무 위치에서나), Container 리스트가 뜹니다.
docker ps
이로써 우리는 이 App을 실행할 수 있습니다. 아래 주소를 브라우저에 입력해 접속할 수 있고, 이런저런 기능이 동작합니다.
http://localhost:3000
감사합니다~!
'IT > DevOps' 카테고리의 다른 글
[Docker] Application 공유하기: Docker registry, Docker Hub (0) | 2024.02.05 |
---|---|
[Docker] Application 업데이트하기 (2) | 2024.02.05 |
[Pyinstaller] exe 파일 못 만드는 오류! (yolo ultralytics 관련) (2) | 2023.08.18 |
Docker, Kubernetes (0) | 2023.05.05 |
3tier 아키텍쳐 (0) | 2023.04.30 |