도커 컨테이너는 도커 이미지의 집합으로 이루어 집니다. 도커허브에서 이미지를 다운받아 봤는데요. 우리가 직접 도커 이미지를 만들 수 있을까요?
1. 도커 파일이란?
dockerfile이란
- 컨테이너를 생성하는데 필요한 명령문을 textfile로 정의한 것
- dockerfile은 도커이미지를 기반으로 새로운 이미지를 추가하여 나만의 이미지를 생성할 수 있는 이미지 설정파일 입니다.
dockerfile만드는 규칙
- 파일명은 반드시 dockerfile 이어야한다
- 도커파일에 사용하는 명령문을 사용한다. (from, copy, cmd 등)
- build명령으로 dockerfile에 나열된 명령문을 이미지로 생성해줍니다.
- docker build -t <파일명:버전명> <dockerfile의 위치>
2. 도커 파일 실습 1 - 자바를 설치하고 자바 파일을 생성해서 실행해보기
준비사항
- course/docker/first 예제폴더를 생성하고 이동해주세요.
- window에서 실습하고 있지만, 리눅스 환경이라고 생각하고 사용하는 편이 좋습니다.
메모장열기
notepad(vi) Hello.java
코드작성
public class Hello { public static void main(String[] args) { System.out.println("hello world"); } }
자바 이미지 찾기
docker search openjdk
도커파일생성
notepad(vi) dockerfile
도커파일작성
FROM adoptopenjdk/openjdk11
COPY Hello.java /
RUN javac Hello.java
ENTRYPOINT ["java", "Hello"]
도커파일을 빌드하여 이미지로 만들기
docker build -t <이미지명>:<태그> <빌드할도커파일위치> docker build -t hellojava:latest .
컨테이너 실행
docker run <옵션> <이미지:태그> docker run --name first hellojava:latest
컨테이너 안에 살펴보기
3. 도커 파일 실습2 - 다양한 속성 확인하기
준비사항
- course/docker/second 예제 폴더를 생성하고 이동해주세요.
- course/docker/second/project 폴더를 만들어 주세요.
- project폴더에 스프링빌드 프로젝트를 옴겨주세요.
도커파일생성
notepad(vi) dockerfile
도커파일시나리오
- 베이스이미지는 jdk11로 사용
- 컨테이너 안에는 /home/app 폴더를 생성
- 작업공간 /home/app 폴더로 변경
- 작업공간에 txt파일 생성하기
- 외부에 빌드된 war파일을 컨테이너 안으로 복사하기
- war파일 행시키기
#1 FROM adoptopenjdk/openjdk11
#2
RUN mkdir /home/app #3 WORKDIR /home/app
#4 RUN touch project.txt #5 COPY project/BootMyweb-0.0.1.war ./app.war
#6. 명령문 실행은 고정으로 java -jar로 사용하고 default로 CMD를 실행하겠다.
#CMD값은 run명령문의 매개 값으로 변경이 가능하다.
ENTRYPOINT ["java", "-jar"] CMD ["app.war"]
도커파일을 빌드하여 이미지로 만들기
docker build -t <이미지명>:<태그> <빌드할도커파일위치> docker build -t test:v1 .
컨테이너 실행
docker run <옵션> <이미지:태그> docker run --name test -d -p 8484:8484 test:v1 app.war
ENTRYPOINT와 CMD를 나누어 사용했습니다.
ENTRYPOINT는 고정으로 실행되는 명령이고 CMD는 컨테이너 생성시 매개 값으로 변경할 수 있습니다.
컨테이너 안에 살펴보기
3. 도커파일 실습3 - 프로젝트 안에서 도커 이미지 파일 만들어보기
준비사항
- 스프링프로젝트 안으로이동
- root경로에 dockerfile생성
- ./gradlew build 빌드
도커파일생성
notepad(vi) dockerfile
도커파일 작성
사실 복잡하게 작성할 필요는 없습니다.
달라진 점은 ARG 변수를 선언하고 빌드 경로를 사용한다는 점입니다.
FROM adoptopenjdk/openjdk11
LABEL creator=coding404
ARG jarfile=build/libs/BootMyweb-0.0.1.war
COPY ${jarfile} /app.war
CMD ["java", "-jar", "/app.war"]
도커파일을 빌드하여 이미지로 만들기
docker build -t <이미지명>:<태그> <빌드할도커파일위치> docker build -t myweb:v1 .
컨테이너 실행
docker run <옵션> <이미지:태그> docker run --name webserver -d -p 8181:8484 myweb:v1
이미지정보 확인하기
docker inspect myweb:v1
'TIL > Docker' 카테고리의 다른 글
day96-docker hub 저장소(feat.registry) (0) | 2023.03.31 |
---|---|
day96-docker volume (0) | 2023.03.31 |
day96-docker 네트워크 (0) | 2023.03.31 |
day96-docker (0) | 2023.03.31 |
day96-docker (0) | 2023.03.31 |