//////
Search
🏑

221103회고

Created by
Created time
2022/11/03 07:17
Last edited by
Last edited time
2022/11/03 09:30
Status

도커란 무엇인가?

컨테이너를 만들고 배포하고 구동한다.
컨테이너 기반의 오픈소스 가상화 플랫폼으로 컨테이너를 보다 쉽게 만들어주는 툴
OS에 상관없이 애플리케이션을 개발하고 구동할 수 있도록 컨테이너 환경을 제공하는 소프트웨어

도커가 나오기 전에는?

README를 공유하여 그 파일에 적힌 순서대로 로컬 환경을 구성했음
OS를 서버마다 만들어야 했다.

도커의 장점

도커가 나온 이후에는 Dockerfile과 docker-compose.yml를 공유하여 실행하는 것 만으로도 동일한 로컬 환경을 구성할 수 있게 되었다.
Docker를 사용함으로써 OS에 구애받지 않고 애플리케이션을 사용 할 수 있다.
Docker는 독립적으로 가상화된 환경에서 운영되므로 가볍고 빠릅니다. 따라서 서버단위 환경에 잘 어울립니다.

이미지란?

image는 Docker 가상환경에 대한 설정과 설정해야할 Dependencis와 수행할 작업과 해당 프로젝트의 스냅 샷을 찍어 버전을 만들어 놓은 것이다. docker build 명령어를 통해 생성할 수 있다.
docker build <옵션> <Dockerfile의 경로> : Dockerfile을 찾아서 해당 도커파일을 기반으로 이미지를 생성한다.
ex) 프로그램 설치 파일
FROM openjdk:11-jdk-slim VOLUME /tmp ADD /target/*.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Bash
복사
FROM python:3.9 COPY . /app ENV PYTHONPATH /app WORKDIR /app RUN pip install -r requirements.txt CMD ["uvicorn", "app.main:app"]
Bash
복사

Docker Engine 이란?

생성된 이미지를 통해서 Container 라는 실행 객체를 만들고 실행하는 역할을 합니다.

컨테이너란?

철저하게 구분된 가상환경에서 Docker Engine을 통해 실행되기 때문에 Host OS환경과는 무관하게 어떤 환경에서도 동일하게 실행할 수 있게 해주고, Container는 종료되면 데이터는 사라집니다. 따라서 Docker Volume을 적용해 저장해두어야 할 필요가 있습니다.
ex) 프로그램

애플리케이션 실행방법

1.
mvn -DskipTests=true package : jar파일 만들기
a.
DskipTests=true : mvn package시 test 코드를 건너뛰고 싶을 때 사용.
정확히는, 컴파일(compile)은 되지만 실행(execute)되지는 않는다.
Dmaven.test.skip=true 은 compile과 exectue 모두 되지 않는다.
2.
java -jar target/crud-api-0.1-SNAPSHOT.jar : jar파일 실행
3.
url로 접속 : 서비스 환경 확인가능

컨테이너 만드는법

sudo docker build -t spring-boot-hospital-api .
Bash
복사
Dockerfile 작성 → 스냅샷 (Dockerfile내용 기반)→ image생성
→ docker run을 통해 docker engine → image를 통해 컨테이너를 만든다

포트포워딩을 해야하는 이유?

ex) -p 8080 : 8081는 무슨의미일까요??

서로 연결하기 위해
앞 : 외부 요청(8080) 들어오면
뒤 : 내부 포트(8081) 연결
외부
Spring
Mysql
80
8080
3306
외부
내부

Priority Property

우선순위

명령어

-d: demon, 컨테이너를 생성한 후에도 백그라운드에서 코드를 작성할 수 있게 한다.
-p: 앞의 port(외부에서 접속하려고 하는 port)를 뒤의 port(container의 port)에 연결
-e: image의 환경변수 설정
docker run -p 8080:8080 -d -e SPRING_DATASOURCE_URL=jdbc:mysql://ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:3306/likelion-db
Java
복사
-i: 컨테이너의 표준 입력을 활성화하여 표준 입출력을 사용한다.(설정하지 않으면 표준출력만 사용)
-t: 가상터미널(tty, 리눅스의 콘솔)를 할당한다.
-v: $ docker run -v our-vol:/app --name one busybox touch /app/test.txt
--name: 컨테이너에 이름을 지정하여 관리하기 쉽게 한다. 이름을 지정하지 않으면 random으로 이름이 지정된다. ex. heuistic_bell
-u: 사용자 이름 지정
-f: rm또는 rmi와 같이 작성되면 강제 삭제
docker rm -f <container의 이름> // 이름이 heuistic_bell인 container를 실행중이더라도 강제로 제거한다.
Java
복사

오류

Failed to obtain JDBC Connection
출처
1.
도커가 나오기 전에는?: https://www.coninggu.com/6