개발/Docker

[Docker] 도커파일(Dockerfile) 작성하기

devhooney 2022. 12. 30. 08:32
728x90

도커파일(Dockerfile) 작성하기

 

 

728x90

 

 

1. Dockerfile 이란?

- Dockerfile은 도커 이미지를 생성하기 위한 스크립트 파일

- 여러 키워드를 사용하여 Dockerfile을 작성하여 빌드를 쉽게 수행할 수 있다.

 

 

2. Dockerfile 키워드

- FROM

from 키워드를 사용하여 base가 되는 image를 지정

주로 OS 이미지나 런타임 이미지를 지정

- RUN

이미지를 빌드할 때 사용하는 커맨드를 설정

 

- ADD

이미지를 호스트의 파일이나 폴더를 추가

이미지를 복사하려는 디렉토리가 없을 경우 자동 생성

 

- COPY

호스트 환경의 파일이나 폴더를 이미지 안으로 복사

'ADD'와 동일하게 동작하지만 URL을 지정하거나 압축파일을 자동으로 풀지 않음

 

- EXPOSE

이미지가 통신에 사용할 포트를 지정

 

- ENV

환경 변수를 지정

변수는 $NAME, ${NAME} 형태로 사용

${NAME:-else} NAME이 지정하지 않았을 경우 'else'를 사용

 

- CMD

도커 컨테이너가 실행될 때 실행할 커맨드를 지정

'RUN'과 비슷하지만 CMD는 도커 이미지를 빌드할 때 실행되는 것이 아니라 컨테이너를 시작할 때 실행됨

 

- ENTRYPOINT

도커 이미지가 실행될 때 사용되는 기본 커맨드를 지정

 

- WORKDIR

RUN, CMD, ENTRYPOINT 등을 사용한 커맨드를 실행하는 디렉토리 지정

-w 옵션으로 오버라이딩 가능

 

- VOLUME

퍼시스턴스 데이터를 저장할 경로 지정

호스트의 디렉토리를 도커 컨테이너에 연결

주로 휘발성으로 사용되면 안되는 데이터 저장 시 사용(db 경우)

 

 

3. Dockerfile 실행

- Dockerfile을 실행하기 위해서는 docker build 커맨드를 사용

 

docker build ${option} ${dockerfile directory}

 

 

- 예시

 

docker build -t test.

 

 

- 생성된 이미지를 컨테이너로 실행하기 위해서는 run 커맨드를 사용

 

 

docker run --name test -p 80:80 test

 

 

- Dockerfile 작성 예시

FROM httpd

COPY index.html /usr/local/apache2/htdocs/

 

- index.html

<html lang="en">
<meta charset="UTF-8">
<title>DOCKER TEST</title>
</head>
<body>
    <h1>DOCKER TEST!</h1>
    <p>TEST!!!</p>
</body>
</html>

 

두 파일을 한곳에 두고, cmd창으로 파일이 있는 경로로 이동 후 docker build -t test123 하면

 

이미지가 생성이 됐다.

생성된 이미지를 컨테이너로 실행하기 위해  docker run --name test123_app -p 80:80 test123 를 입력하면

localhost 접속 하면

 

작성한 index.html이 화면에 보인다.

 

docker inspect test123,

docker inspect httpd

 

- test123_app

         "Layers": [
                "sha256:8a70d251b65364698f195f5a0b424e0d67de81307b79afbe662abd797068a069",
                "sha256:28a8796736c9f1e79a3564da0ac898fda971e0e5e9325ab3ef4c7dd67f9d8a76",
                "sha256:7f754426121fd50fc1c1a0b32feafe91c25c4d1866b097e1a5e675dd32ed75ef",
                "sha256:e4e39a1ab63dffb3edf3c99454430377ca706dfc71076d893d78ded452873c80",
                "sha256:eeed9f7c3966c799843e331d7370c6e283802812ed967092c4c8c3b4c7dfd2a7",
                "sha256:24bd3e2caaae3b1e164c689c0f2a6a699e805a50d603c6e9cebb5ca43b5c19c0"
            ]

 

- httpd

         "Layers": [
                "sha256:8a70d251b65364698f195f5a0b424e0d67de81307b79afbe662abd797068a069",
                "sha256:28a8796736c9f1e79a3564da0ac898fda971e0e5e9325ab3ef4c7dd67f9d8a76",
                "sha256:7f754426121fd50fc1c1a0b32feafe91c25c4d1866b097e1a5e675dd32ed75ef",
                "sha256:e4e39a1ab63dffb3edf3c99454430377ca706dfc71076d893d78ded452873c80",
                "sha256:eeed9f7c3966c799843e331d7370c6e283802812ed967092c4c8c3b4c7dfd2a7"
            ]

 

이번 실행으로 FROM httpd에 하나의 레이어를 추가했다는 것을 알 수 있다.

 

 

 

 

- 참고

https://www.youtube.com/watch?v=8p9RvxVOQEY&list=PLlTylS8uB2fDLJRJCXqUowsOViG-ZKnWy&index=6 

728x90