mjeongriver
article thumbnail
Published 2023. 3. 31. 14:26
day96-dockerfile TIL/Docker

도커 컨테이너도커 이미지의 집합으로 이루어 집니다. 도커허브에서 이미지를 다운받아 봤는데요. 우리가 직접 도커 이미지를 만들 수 있을까요?

 

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
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그