+ 인텔리제이를 사용해도되는데, 나는 JetBrains에서 지원하는 WebStorm을 사용해보기로했다.
WebStorm은 JavaScript/TypeScript, HTML, CSS 등 프론트엔드 및 풀스택 웹 개발에 사용되는 프로그램으로 VS Code와 비슷하지만 내가 주로 사용하는 JetBrains이기 때문에 선택했고,
무엇보다도 원래는 유료지원이지만 비상업용 목적이라면 1년간 무료로 사용이 가능하다.
WebStorm 프로그램으로 Dockerfile이라는 파일 형식을 생성한다.
# Dockerfile
FROM openjdk:17-jdk
터미널을 이용해 현제 Dockerfile 파일이 위치한 경로로 들어간다.(Dockerfile로 들어가면 안됨)
# my-jdk-server 라는 이름으로 이미지 생성
# beta라는 이름의 tag를 붙인다.(생략하면 latest로 생성)
# 뒤에 붙은 . 은 상대경로를 나타낸다.
docker build -t my-jdk17-server:beta .
Tag를 생략한 것과 beta라고 지정한 것을 빌드하면 다음과 같이 생성된다.
이제 내가 생성한 이미지를 가지고 컨테이너를 띄워보자
docker run -d my-jdk17-server
그다음 docker ps
로 확인해보면
컨테이너가 없다?!
-> 이미지로 컨테이너가 실행이 될 때 컨테이너가 해야할 작업이 완료된다면 컨테이너가 자동으로 종료되기 때문에 실행 후 바로 종료된 상태인것이다.
그러면 약간의 꼼수로 컨테이너가 실행되어도 바로 종료되지 않도록 이미지를 수정해보자.
# Dockerfile
FROM openjdk:17-jdk
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 500초 동안 시스템을 일시정지 시키는 명령어
이 때 이미지를 수정했으므로 다시 빌드를 진행해야한다.
이제 컨테이너를 실행해도 바로 중지되지 않으므로 내부에 들어갈 수 있다.
테스트를 위해 복사할 app.txt 파일을 깜찍하게 만들어준다.
COPY [호스트에서 복사할 파일의 경로] [컨테이너의 파일이 위치할 경로]
FROM ubuntu
COPY app.txt /app.txt # 상대경로, /절대경로
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
이제 이미지를 빌드
docker build -t my-server .
컨테이너 실행
docker run -d my-server
컨테이너 내부로 접속해서
docker exec -it ~ bash
현재 경로의 파일들을 확인해보면(ls
)
컨테이너 내부에 복사가 되어있다.
+ 만약 파일이 아니라 경로를 복사하고 싶다면
COPY my-app /my-app/
이처럼 뒤에 '/'를 붙여줘야 한다.
+ 만약 호스트 경로 내에 모든 .txt 파일들을 폴더 안에 복사하고 싶다면
COPY *.txt /text-files/
+ 만약 파일들을 복사를 할 때 포함되지 않았으면 하는 파일이 있다면
dockerignore
라는 파일을 생성하고 그 안에 포함되지 않았으면 하는 파일의 이름을 작성하기만 하면 된다.
ENTRYPOINT ["리눅스형 명령문", "다른 명령문"]
위에 '500초 동안 시스템을 일시정지 시키는 명령어'와 동일하다.
FROM ubuntu # 우분투 이미지로 컨테이너를 만들고 실행시킬 때
ENTRYPOINT ["/bin/bash", "-c", "echo hello"] # 'hollo' 라는 단어를 입력해달라
이미지 빌드와 컨테이너를 실행시킨 뒤 로그를 확인해보면
로그로 출력되는 것을 확인할 수 있다.
RUN [명령문]
만약 ubuntu 라는 환경에 git이 다운받아져 있기를 원할 때
-> 내가 원하는 만들어져있는 이미지가 없을 수 있다.
FROM ubuntu # ubuntu 환경에
RUN apt update && apt install -y git # git을 설치하고 이미지를 생성하라
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
Dockerfile을 통해 생성되는 파일들을 특정 폴더에 정리하는 것이 관리하기 용이하기 때문에 사용한다.
WORKDIR [작업 디렉터리로 사용할 절대 경로]
실습을 위해 새로운 경로를 만들고 WebStorm으로 실행 후 테스트 파일들을 만든다.
이미지를 만들기 위해 빌드를 하고
docker build -t my-server .
컨테이너를 실행한다.
docker run -d my-server
컨테이너에 들어가서 파일들의 목록을 확인해보면
이처럼 내가 복사해온 파일이 무엇인지 확인하기가 어렵다.
이제 디렉터리 경로를 지정하고 다시 확인해보자
FROM ubuntu
WORKDIR /my-dir
COPY ./ ./
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
이미지 빌드와 컨테이너 실행을 하고 컨테이너로 접속을 해보면
접속할 때부터 최초 경로가 my-dir
로 들어와져있다.
COPY를 할 때 하나로 묶을 수 있다.
EXPOSE [포트 번호]
없더라도 작동하는데에 어떠한 영향이 없다.