티스토리 뷰
Docker란?
애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
도커의 개념에 대해서는 해당 블로그를 참고하였습니다
가상 머신과 컨테이너형 가상화 기술의 차이점
도커는 컨테이너형 가상화 기술을 사용한다.
가상머신(VM)은 하드웨워 기반의 여러 게스트 운영체제이다 ->각 가상 머신마다 전용 운영체제가 있다(Guest OS)
컨테이너는 애플리케이션 수준으로 구성되어있다 (애플리케이션을 실행하는데 필요한 라이브러리와 도구만 포함) ->Host OS만 존재
도커 이미지와 도커 컨테이너
-도커 이미지 : 도커 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로 컨테이너를 생성하는 템플릿 역할
-도커 컨테이너: 도커 이미지 기반으로 생성되며, 파일 시스템과 애플리케이션이 실행될 수 있는 상태
도커 이미지를 생성 후 도커 컨테이너를 생성하여 실행시킨다
컨테이너로 애플리케이션 실행하기
1. 도커를 적용하고 싶은 애플리케이션의 디렉토리에 들어가 Dockerfile을 생성하고 다음과 같이 작성
FROM openjdk:8
COPY build/libs/*.jar spring_security_practice.jar
ENTRYPOINT ["java", "-jar", "spring_security_practice.jar"]
-
FROM 인스트럭션(명령) : 도커 이미지의 생성 시 필요한 베이스 이미지를 지정한다. 나의 경우 Java 프로젝트이기 때문에 openjdk:8을 지정해주었다
-
FROM에서 받아오는 도커 이미지는 도커 허브라는 레지스토리에 공개된 것들이다. 깃 허브 처럼 다른 사람들이 올린 도커 이미지들을 도커 허브 레지스트리에서 참조하여 사용할 수 있다
-
-
COPY 인스트럭션(명령) : 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다. 나의 경우 gradle 기반 프로젝트이기 때문에 jar 파일을 빌드하는 명령어를 지정하였다
-
ENTRYPOINT 인스트럭션(명령) : 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다. 애플리케이션 자체를 실행하는 명령어라고 보면 된다
2. 도커 이미지 빌드
도커파일이 있는 경로에서 아래와 같은 명령어를 실행하여 도커 이미지를 생성한다
네임스페이스는 이미지명이 겹치는 것을 방지해 사용하는 것이 좋다
docker image build -t 이미지명/네임스페이스[:태그명]
이미지 빌드 후 커멘드창
layeongjiui-MacBook-Pro:spring_security_practice rayoungji$ docker image build -t security/1 .
Sending build context to Docker daemon 81.15MB
Step 1/3 : FROM openjdk:8
---> 5e934d30ed6f
Step 2/3 : COPY build/libs/*.jar spring_security_practice.jar
---> Using cache
---> e0a9211e45d0
Step 3/3 : ENTRYPOINT ["java", "-jar", "spring_security_practice.jar"]
---> Using cache
---> 1f41e19f77da
Successfully built 1f41e19f77da
Successfully tagged security/1:latest
3. 도커 이미지 목록에서 이미지 확인 후 도커 컨테이너 실행
docker images ls
docker container run security/1
4. 포트 포워딩
컨테이너를 실행하여 security 애플리케이션에 8080포트로 get 요청을 보내면 정상작동을 할 것 같지만 그렇지 않다. security 애플리케이션은 8080 포트를 리스닝하고 있지만 이 포트는 컨테이너 포트라고 해서 컨테이너 안에서 get 요청을 실행할 경우에만 응답을 받을 수 있다 이처럼 외부의 HTTP 요청을 받으려면 외부의 요청을 컨테이너 안에 있는 애플리케이션에 전달해 줘야하는데 그 역할을 하는 것이 도커의 포트 포워딩이다 사용법은 아래와 같다
layeongjiui-MacBook-Pro:~ rayoungji$ docker container run -d -p 8080:8080 securitypractice/2
-p 옵션을 붙이면 포워딩을 지정할 수 있다. ->docker container run -d -p 호스트포트:컨테이너포트
5. 포트 포워딩 확인
6. 호스트 포트 설정을 생략하고 할당된 포트 확인하기
위처럼 호스트 포트를 설정하지 않고 아래의 명령어를 통하여 자동 할당된 포트를 확인 할 수 있다
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32617814466b security/2:latest "java -jar spring_security_pratice.jar" 6 seconds ago Up 6 seconds 0.0.0.0:32768->8080/tcp naughty_kalam
'Skill' 카테고리의 다른 글
[AWS] - Instance 사용자 계정 추가하기 (0) | 2021.06.16 |
---|---|
[GraphQL] - GraphQL 개념과 특징 (0) | 2021.06.16 |
[Docker] -도커 컴포즈로 여러 컨테이너 실행하기 (0) | 2020.11.11 |
[Docker] - Docker Network 모드 4가지 (0) | 2020.10.22 |