땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • E
  • I
  • ㅗ
  • D
  • 이것이 리눅스다 with Rocky Linux9

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Dockerfile을 이용한 코드에 의한 서버 구축
DevOps

Dockerfile을 이용한 코드에 의한 서버 구축

2024. 10. 21. 11:15

도커 이미지 만들기
도커는 이미지를 만들기 위해 컨테이너의 상태를 그대로 이미지로 저장하는 단순한 방법을 사용함
예를 들어, 어떤 애플리케이션을 이미지로 만든다면, 리눅스만 설치된 컨테이너에 애플리케이션을 설치하고 그 상태를 그대로 이미지로 저장함

저자 제공 sample 파일을 download 

$ git clone https://github.com/asashiho/dockertext2

Docker 파일이란 

명령에 의한 Docker 이미지의 작성 방법 (기존 방식)

베이스가 되는 Docker 이미지를 바탕으로 Docker 컨테이너를 생성하고,  생성한 Docker 컨테이너 안에서 OS의 설정이나 미들웨어의 설치, 파라미터의 설치를 수동으로 수행

만들어진 컨테이너에서 서버를 구축한 상태를 바탕으로 Docker 이미지를 생성

 

Dockerfile 파일에 의한 Docker 이미지의 작성 방법 (현재 방법 )

Dockerfile은 Docker상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일
Docker build명령은 Dockerfile에 기술된 구성정보를 바탕으로 Docker 이미지를 생성

Dockerfile
텍스트 파일 형식의 파일로 에디터 등을 이용해서 작성
확장자는 필요 없음
dockerfile 이외의 다른 이름 사용 시 docker build 명령 시 “-f” 옵션 사용

 

 

Dockerfile reference

Find all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.

docs.docker.com

 

 

FROM 명령(필수 명령)
베이스 이미지를 지정함
tag 생략 시 최신 버전 지정됨
이미 만들어진 다양한 베이스 이미지는 Docker hub에서 확인 가능

 

Docker 이미지 생성 실습

 

Dockerfile의 빌드

 

Docker파일을 이미지로 바꿔준다.

-t sample:1.0은 tag

 

$PWD/sample은 docker파일의 경로를 나타낸다 ($PWD는 현재 작업 디렉토리)

 

 

Note

베이스 이미지와 작성한 두 개의 이미지의 이미지 ID(image ID)가 모두 동일
이미지로서는 각각 다른 이름이 붙어 있지만, 그 실체는 모두 동일한 이미지라는 것을 나타냄

 

Dockerfile이 아닌 파일을 사용한 Docker Build

$ docker build –t sample -f Dockerfile.base

 

Docker 이미지의 layer 구조
Dockerfile을 빌드하여 Docker 이미지를 작성하면, Dockerfile의 명령별로 이미지를 작성함
작성된 여러 개의 이미지는 layer 구조로 되어 있음

 

Dockerfile 작성

 

nginx와 index.html를 통해 새로운 Dockerfile을 만들어 준다.

 

$ docker build -t webap .

를 이용해서 Dockerfile을 도커이미지로 build 해준다.

 

$ docker container run -d -p 80:80 --name webserver_2 webap

을 통해서 webserver_2라는 container를 만들어주고 실행한 다음

내 서버로 들어와보면 index파일대로 표시가 된다.

* 여기서 유의할 점은 index.html를 수정하고 다시 컨테이너를 실행하면 안된다. Dockerfile를 도커 이미지로 바꿀 때의

index파일로 되어있기 때문이다.

 

 

명령 실행(RUN 명령)

□ Shell 형식으로 기술 : shell에서 실행하는 형식으로 기술
- apt 명령으로 Nginx를 설치할 경우

□ Exec 형식으로 기술
- shell을 경유하지 않고 직접 실행(JSON 배열 형식): 환경 변수 ($HOME 사용 불가)

 

데몬 실행(CMD 명령)
이미지를 바탕으로 생성된 컨테이너 안에서 명령을 실행할 경우
□ Exec 형식으로 기술: CMD ["nginx", "-g", "daemon off;"]


□ Shell 형식으로 기술: CMD nginx -g 'daemon off;

 

□ ENTRYPOINT 명령의 파라미터로 기술

Exec 형식으로 기술: ENTRYPOINT ["nginx", "-g", "daemon off;"]
Shell 형식으로 기술: ENTRYPOINT nginx -g 'daemon off;' 

 

 

ENTRYPOINT 명령과 CMD명령을 조합한 예

$ docker build -t sample_cmd_entr .

10초마다 갱신되는 모습을 보여주고 있다.

 

 

 

CMD 명령은 Docker container run 수행 시 외부에서 overwrite 가능하다.

-d 2를 이용해서 2초마다 갱신으로 바꿔주는 command를 추가해줬다. 

 

 

'DevOps' 카테고리의 다른 글

[Airflow] Connection 연결 시 [TEST] 버튼 비활성화 해결방법  (0) 2024.10.22
[Airflow] Airflow 설치 (Docker)  (0) 2024.10.22
[Vector] Logstash 대체안 Vector  (0) 2024.04.19
[Grafana] Customizing Grafana Alerting Notification Templates  (0) 2024.03.08
[SonarQube/Jenkins] SonarQube + Jenkins + GitLab 연동하기  (0) 2023.04.24
    'DevOps' 카테고리의 다른 글
    • [Airflow] Connection 연결 시 [TEST] 버튼 비활성화 해결방법
    • [Airflow] Airflow 설치 (Docker)
    • [Vector] Logstash 대체안 Vector
    • [Grafana] Customizing Grafana Alerting Notification Templates
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바