도커파일(Dockerfile) 작성하기
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
'개발 > Docker' 카테고리의 다른 글
[Docker] 도커 컴포즈(Docker-compose) 작성하기 (0) | 2022.12.31 |
---|---|
[Docker] 컨테이너 통신하기 (0) | 2022.12.29 |
[Docker] 컨테이너 구조 및 커맨드 사용법 (0) | 2022.12.21 |
[Docker] React 프로젝트를 Docker를 이용해서 배포하기 (1) | 2022.10.06 |
[Docker] Spring 프로젝트를 Docker를 이용해서 배포하기 (1) | 2022.10.05 |