도커 컨테이너는 도커 이미지의 집합으로 이루어 집니다.
도커허브에서 이미지를 다운받아 봤는데요.
우리가 직접 도커 이미지를 만들 수 있을까요?
도커파일 이란
- 컨테이너를 생성하는데 필요한 명령문을 textfile로 정의한 것
- dockerfile은 도커이미지를 기반으로 새로운 이미지를 추가하여 나만의 이미지를 생성할 수 있는 이미지 설정파일 입니다.
dockerfile만드는 규칙
- 파일명은 반드시 dockerfile 이어야한다
- 도커파일에 사용하는 명령문을 사용한다. (from, copy, cmd 등)
- build명령으로 dockerfile에 나열된 명령문을 이미지로 생성해줍니다.
- docker build -t <파일명:버전명> <dockerfile의위치>
copy는 윈도우의 어떤 파일을 도커 이미지파일 안으로 복사한다.
copy 예시-> COPY Hello.java /
run 명령문은 해당 컨테이너 안에서 초기에 한번 실행시킬 명령문을 기술한다.
run 예시->java파일 컴파일 필요. RUN javac /Hello.java
volume이라는 개념은 자바의 static으로 생각하면 된다.
expose는 동작시킬 기본 포트번호이다.
cmd와 entrypoint는 같다. 단 entrypoint는 고정명령문이다. cmd는 외부로부터 매개변수를 받아 변경할 수 있는 명령문이다. 이 둘은 조합하여 사용하곤 한다.
도커파일 실습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
컨테이너 안에 살펴보기
도커파일 실습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는 컨테이너 생성시 매개 값으로 변경할 수 있습니다.
위의 예에서 test:v1 뒤의 app.war가 CMD에 들어가는 값임
컨테이너 안에 살펴보기
도커파일 실습3 - 프로젝트 안에서 도커이미지파일 만들어보기
- 스프링프로젝트 안으로이동
- root경로에 dockerfile생성
- ./gradlew build 빌드
도커파일생성도커파일작성달라진 점은 ARG 변수를 선언하고 빌드 경로를 사용한다는 점입니다.
- FROM adoptopenjdk/openjdk11ARG jarfile=build/libs/BootMyweb-0.0.1.warCMD ["java", "-jar", "/app.war"]
- COPY ${jarfile} /app.war
- LABEL creator=coding404
- 사실 복잡하게 작성할 필요는 없습니다.
- notepad(vi) dockerfile
- 준비사항
도커파일을 빌드하여 이미지로 만들기
docker build -t <이미지명>:<태그> <빌드할도커파일위치>
docker build -t myweb:v1 .
컨테이너 실행
docker run <옵션> <이미지:태그>
docker run --name webserver -d -p 8181:8484 myweb:v1
이미지정보 확인하기
docker inspect myweb:v1
'AWS' 카테고리의 다른 글
230331 Docker 5 (1) | 2023.03.31 |
---|---|
230331 Docker 3 (0) | 2023.03.31 |
230330 Docker 2 (0) | 2023.03.30 |
230330 Docker (0) | 2023.03.30 |
AWS 230328 aws기초5 (0) | 2023.03.28 |