리눅스 + 어플리케이션 : java 어플리케이션을 linux 서버에 띄우는 것
빌드 → 리눅스에 바로 실행하면
#root directory에서
cd target
java -jar hospital-api-0.0.1-SNAPSHOT.jar
#작동되고 있는 지 확인하기
[ec2주소]:8080/swagger-ui/
포트번호는 디폴트로 8080인데, 이를 바꾸고 싶으면 java 실행 전에 아래 코드를 입력한다.
export SERVER_PORT=[원하는포트]
Dockerfile은 프로젝트 루트 디렉토리에 있다.
우리가 할 일은 우리가 개발한 어플리케이션을 컨테이너 형태로 만든느 것
Dockerfile 작성하기 + Environment Variable 로 변수 넘기기
ex) DB 접속 정보, API의 인증 정보 → 이미지에 들어올 수 있어서, 털릴 수 있다.
image도 git처럼 공유할 수 있는 사이트인 dockerhub가 있다. 원하는 docker를 다운/공유할 수 있다.
#dockerhub에서 copy해서 사용
docker pull gazgeek/springboot-helloworld
docker run gazgeek/springboot-helloworld
이미지는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다. 이미지는 도커 명령어로 내려받을 수 있고 별도로 설치할 필요는 없다.
도커 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일 시스텀과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되고, 이것이 도커 컨테이너가 된다.
도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 때문에 도커 이미지의 목적에 맞도록 사용되는 것이 일반적이다.
dockere -v
docker run -i -t ubuntu:22.04
#환경변수 확인
printenv
docker run -i -t -e SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306 ubuntu:22.04
docker ps #container_id를 확인한다.
docker exec [container_id] printenv
docker exec
: 실행 중인 컨테이너에 대해서 명령어를 사용할 수 있다. command로 단순히 실행 결과를 출력하고 종료되는 명령어들이다.docker exec <container_id> <command>
-it
옵션을 사용한다.-it
: STDIN 표준 입출력을 열고 가상 tty (pseudo-TTY)를 통해 접속하겠다는 의미이다.exit
: 종료docker exec -it <container_id> bash
docker rm <container_id>
실행되는 컨테이너는 종료해야 한다.
docker kill <container_id> # 도커 종료시키기
docker ps -a # 내려간 컨테이너 확인하기
docker rrmi <이미지이름>:<tag>
사용하던 컨테이너가 있으면, 컨테이너가 종료되었더라도 다시 쓸 수 있어서 못 징우게 한다. 그래서 종료된 컨테이너도 다 지우고 이미지를 지울 수 있다.
docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7
docker run -d -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=password --name wordpress --link wordpressdb:mysql -p 80 wordpress
docker ps로 확인하면 호스트 포트의 49153과 도커 컨테이너의 80포트가 연결되었다. 그래서 호스트의 49153 포트를 열어주어야 한다.
아래 주소로 들어가면 워드프레스가 나온다.
[ec2주소]:49153
환경 설정하고, 띄우고 하는 것이 훨씬 빠르고 편리해졌다.
볼륨마운트
docker run -d -v /root:/app ubuntu:22.04
docker ps #container id 확인
docker exec <container_id> ls /app
#확인하는 법1
echo hello > hello.log
docker exec <container_id> ls /app
cat hello.log
#확인하는 법2
docker exec -it 252f9bf0660d bash #-it 옵션을 이용해 컨테이너 셸을 실행할 수 있다.
cd app
ll
cd ~
mkdir mysql_data
docker run -d -p 3308:3306 --name wordpressdb2 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v /root/mysql_data:/var/lib/mysql mysql:5.7
호스트 디렉토리에서 새로운 테이블을 확인할 수 있다.
docker run -d
를 사용하여 entrypoint
또는 cmd
가 설정되어 있지 않은 이미지로 컨테이너 실행 시 위와 같이 컨테이너가 지속적으로 실행시킬 프로그램을 찾지 못하고 자동으로 종료된다.
자동으로 종료되지 않게 설정하기 위해서는 몇 가지 설정이 필요하다.
⭕️ bash command를 실행해서 바로 죽지 않았다
docker run -d -it -v /root:/app ubuntu:22.04