기본 세팅
일단 깔끔하게 다 지우고 시작하자.
ex02에 Dockerfile 생성 세팅하자.
도커허브에서 openJDK 검색 → 무료다.
도커허브에서 Sort by A-Z 설정하고 11-jdk 검색어로 검색해서 찾자!
slim이라는 컨벤션은 해당 기능만 가져오고 싶을 때 사용.
"Slim" 패키지는 해당 라이브러리나 프레임워크의 핵심 기능만 포함하고, 추가적인 부가 기능이나 모듈은 포함되지 않습니다. 예를 들어, 로깅, 테스트, 디버깅과 같은 기능이 제외될 수 있습니다.
11-jdk-slim 은 debian 계열의 OS를 사용한다.
환경변수 만드는 법
환경패스 설정하는 법
Dockerfile 작성
// Dockerfile 작성
FROM openjdk:11-jdk-slim
JavaScript
복사
//bash에서 빌드 명령어
docker build -t codingspeacialist/openjdk:11 .
JavaScript
복사
아주 간단하게 빌드가 되었다.
docker images
도커 이미지로 확인 가능
//docker run -dit 이미지명 bash (쉘 종류 많음) sh
docker run -dit codingspeacialist/openjdk:11 bash
JavaScript
복사
컨테이를 안끄고 실행하고 싶다면 -dit 를 붙이면 된다.
bash가 만약에 설치가 안되어있으면 sh(shell)로 실행해야 될 수도 있다.
명령어 설명
// 컨테이너 연결하는 명령어
docker attach 컨테이너 ID
JavaScript
복사
접속은 attach로 하면 된다.
docker attach: Docker 명령어로, 이미 실행 중인 컨테이너에 연결합니다.
체크
java --version
버전 확인 openjdk 11이 설치 되어있구나.
echo $JAVA_HOME
JAVA_HOME 변수도 등록이 되어있구나.
그럼 cd $JAVA_HOME 으로 해당 폴더도 이동 가능하겠네
bin폴더는 무조건 존재한다.
ls으로 내부를 확인 해보면 javac랑 java 가 보이네.
// ls의 반환 값을 파이프라인 (|) 을 통해서 grep으로 넘긴다. 그중에서 java를 찾는다.
ls -l | grep java
JavaScript
복사
cd ~/
홈 폴더 확인 명령어
pwd
현재 위치 확인 가능명령어
echo $HOME
HOME도 환경 변수가 되네~
// -a는 숨김 파일도 확인할 수 있다.
ls -a
JavaScript
복사
루트 폴더 내부를 보면 이렇게 나오네,
.bashrc 를 vi로 실행 해보자.
vi .bashrc
VI가 없구나
cat .bashrc
자세히 보기 명령어인 cat으로 bashrc를 자세히 보기가 가능하다.
여기서 환경변수를 등록한다.
cat .profile
cat .profile도 들어가보자.
음… 볼게 없네 라고 하심.
hello.sh 생성하기
// hello.sh 파일 bash에서 생성하기
1. mkdir hello // hello폴더를 만든다.
2. 폴더에 접근
3. echo 'echo Hellow World' > hello.sh 로 해당파일을 만든다.
4. ls 명령어로 생성을 확인한다.
JavaScript
복사
리다이렉션 연산자 : “ > “
•
리다이렉션 연산자로, 표준 출력(stdout)을 지정된 파일로 보냅니다.
•
여기서는 > 연산자가 echo 명령어의 출력을 hello.sh 파일로 리다이렉트합니다.
•
>는 해당 파일이 이미 존재하면 내용을 덮어쓰고, 파일이 없으면 새로 만듭니다.
hello.sh 권한 수정하기
ls -l
파일 내용 상세보기 권한까지 볼 수 있다.
chmod 777 hello.sh
hello.sh 파일의 권한을 변경한다. 여기서 “777”은 파일에 모든 사용자에게 읽기, 쓰기, 실행 권한을 부여하는 것을 의미.
왜? 그냥실행하면 안되고, “./” 을 붙여야 되지??
왜 바로 못찾고 ./ 키워드가 필요했을까???
•
현재 디렉토리에 있는 hello.sh 파일을 실행하려고 했으나, 셸은 이를 찾을 수 없었습니다. 이는 현재 디렉토리가 PATH 환경 변수에 포함되지 않았기 때문
•
기본적으로 현재 디렉토리(.)는 PATH에 포함되지 않는다. 이는 보안상의 이유로, 현재 디렉토리에서 의도하지 않은 실행 파일이 실행되는 것을 방지하기 위함.
•
따라서 현재 디렉토리의 파일을 실행하기 위해서는 “./”을 명시 해줘야 함.
export 사용법
환경변수 확인
echo $PATH
를 실행하면 등록된 환경변수를 확인할 수 있다.
export 명령어의 역할
export 명령어는 셀 변수 또는 함수가 현재 셀 프로세스뿐만 아니라 모든 자식 프로세스에서 사용할 수 있도록 만든다.
export 를 사용해야지 전역변수 = 시스템 변수가 된다.
하지만 컨테이너가 꺼지만 모든 게 날라간다는 단점이 있다.
이를 위해서 .bashrc에 저장해야한다.
JavaScript
복사
export 사용
// .bashrc 파일에 새로운 환경 변수를 추가하는 명령어
echo 'export PATH=$PATH:/root/hello' >> ~/.bashrc
JavaScript
복사
그래서 export명령어자체를 bashrc에 등록하는 문법이다
하지만 이대로 종료하게 되면 변경내용이 저장이 되지 않는다.
source ~/.bashrc
변경한 환경변수를 바로 적용하고 싶다면, 해당 명령어로 실행을 해야지 적용이 된다.
이제 어디서나 실행하면 확인할 수 있다.
개념정리
리눅스는 실행될 때 Path환경변수를 읽는다.
// 오늘의 수업 핵심
1. PATH -> 키워드 (정해진 환경변수)
- PATH를 키워드로 설정은 어디서 했을까?
- /etc/profile
2. 환경변수 생성 -> export 명령어
3. .bashrc -> 부팅시 읽어지는 파일
4. 부팅안하고 적용하고 싶다면? 어떤 파일이든!!
- source 파일명
5. bash를 안쓰고, 다른 쉘 설치해서 쓴다면?
- 그 쉘에 대한 프로파일 설정 파일이 만들어진다.
예) .zshrc
6. 파일 만들때
- echo '내용' > 파일명 -> [ > ] 사
- append를 하고 싶다면 ? [ >> ] 사용
JavaScript
복사
자 다시 합시다.
$PATH는 무조건 있다. 여기에 추가하면 된다.
export로 추가하면 되는데, 재로그인하면 안된다는게 문제,
그래서 이것을 bashrc에 추가해야된다.
루트 폴더를 보면 위처럼 보이는데,
이중 bashrc나 profile이 부팅시에 읽힌다. 그래서 해당 파일에 추가하는 문법을 알아야 된다는 것.
이렇게 bashrc에 추가할 수 있으면 된다.
jar프로젝트를 도커파일로 구워보자.
폴더구조
ex02내부에 deploy폴더를 만들자.
jar프로젝트 다운로드
jar다운로드
// jar 프로젝트 deploy 내부 구성
1. env variable -> 변수 설정
2. cron delete -> cron 설정
3. server checking
3-1. apt-update
3-2. jdk-install
3-3. timezone
4. project folder delete
5. git clone
6. gradlew +x
7. build
8. start jar
9. cron registration
JavaScript
복사
이 파일을 ex02 > deploy폴더 안에 넣어야 된다.
요렇게
Docker 파일 작성
Dockerfile에 이렇게 적어보자.
•
WORKDIR
어느 폴더에서 실행되기 원하냐?? 내부에서 어떤 경로를 default경로를 쓸 것인가?
•
COPY
복사 명령어, 카피할 때 해당 JAR파일이 application.jar로 만들어진다.
빌드
해당 명령어를 Dockerfile이 있는 곳에서 실행해야되므로, ex02로 이동해서 실행한다.
실행
만들어 졌다면 실행해보자.
연결
내부 분석할려면 attach 사용
WORKDIR이 그대로 적용된거 확인
WORKDIR이 잡혀있다면,
위 처럼 접속하자마자 그 폴더에 들어가게 된다.
파일 이름도 잘 바뀌었는지 확인
파일도 생겼고, 이름도 바뀌어져 있네
jar파일 실행
// jar파일이 있는 곳에서 해당 명령어를 실행한다.
java -jar application.jar
JavaScript
복사
실행이 잘되는 구나
우리가 프로젝트 시작할 때 모습처럼 나온다.
ENTRYPOINT 사용
ENTRYPOINT 는 제일 마지막에 실행이 된다. 실행되고 꺼진다는 데 확인 필요
•
커맨드 cmd는 run할때 커맨드를 바꿔치기 할 수 있다.
•
엔트리 포인트는 바꿔치기가 안되는 고정 상수이다.
•
CMD는 서버포트 옵션을 줄 수 있다.
CMD는 이렇게 포트설정할수 있고, 어떤 모드로 실행할 지 옵션을 걸 수 있다.
쉽게 생각해서
엔트리포인트에 상수를 넣고, CMD에는 변수를 넣으면 된다.
새로 구워보자.
docker build -t step2 .
JavaScript
복사
빌드 한다.
docker run -d step2
위의 명령어를 실행해보자.
해쉬 값도 받음.
CMD의 목적은 치환이다. 그래서 엔트리 포인트에 설정이 되어있어도, CMD로 옵션을 걸 수 있다.
포트포워딩 설정넣고 실행
이제 8000으로 접속하면 포트 3000으로 실행이된다.
이렇게 포트포워딩으로 실행하더라도 마지막에 --server.port=5000 으로 바꿀 수 있다.