Cloud Computing & MSA

Mac용 Docker 설치하고 이미지 생성/실행

sstdio.h·2019년 9월 12일·조회 7,272

1. 설치

Docker 사이트에서 Docker Desktop for Mac을 내려받아 설치한다.

예전에는 Docker Hub 계정으로 로그인한 뒤 다운로드하는 흐름이었고, 계정이 없다면 이메일 인증까지 받아야 해서 사실 조금 귀찮았다. 현재는 Docker Desktop 다운로드 방식이 바뀔 수 있으니, 설치 화면의 안내를 따르면 된다.

아무튼 설치 파일을 다운로드해 실행한다. 내려받고 설치하는 용량이 꽤 크기 때문에 시간이 조금 걸릴 수 있다.

지루한 과정이 모두 끝나면 CLI에서 docker 명령어를 사용할 수 있게 된다.

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

위 명령이 에러 없이 실행되면 Docker CLI가 정상적으로 동작하는 것이다. 아직 실행 중인 컨테이너가 없다면 목록이 비어 있는 것이 정상이다.


2. Docker 이미지 만들기

간단히 Docker 이미지를 만들고 실행하는 예제를 진행한다. 우선 Spring Boot로 개발된 jar 파일을 실행하는 Docker 이미지를 만들 것이다.

현재 작업 디렉토리에는 다음 파일과 디렉토리가 있다고 가정한다.

  • Dockerfile 파일
  • target 디렉토리

그리고 target 디렉토리 안에 MyApp.jar가 있다고 가정한다.

2.1. Dockerfile

FROM openjdk:8-jre-alpine
COPY target/MyApp.jar app.jar
CMD ["java","-jar","/app.jar"]

이 Dockerfile은 Java 런타임이 포함된 이미지를 기반으로 하고, 로컬의 target/MyApp.jar 파일을 이미지 안의 app.jar로 복사한 뒤, 컨테이너가 시작될 때 java -jar /app.jar 명령을 실행한다.

2.2. 이미지 생성 커맨드

$ docker build -t myapp .
Sending build context to Docker daemon  18.33MB
Step 1/3 : FROM openjdk:8-jre-alpine
 ---> f7a292bbb70c
Step 2/3 : COPY target/MyApp.jar app.jar
 ---> 69641f92ce02
Step 3/3 : CMD ["java","-jar","/app.jar"]
 ---> Running in e4a513f43578
Removing intermediate container e4a513f43578
 ---> 793582135081
Successfully built 793582135081
Successfully tagged myapp:latest

-t myapp은 생성할 이미지에 myapp이라는 이름을 붙인다는 뜻이고, 마지막의 .은 현재 디렉토리를 빌드 컨텍스트로 사용한다는 뜻이다. 즉 현재 디렉토리에 있는 Dockerfile과 필요한 파일을 기준으로 이미지를 만든다.


3. Docker 이미지 실행

아래 8180:8180은 호스트 포트와 컨테이너 포트를 모두 8180으로 연결한다는 뜻이다. -p 옵션은 호스트 포트:컨테이너 포트 형식으로 지정한다. 예를 들어 컨테이너 내부 애플리케이션은 8180 포트로 실행되지만, 로컬에서는 8080 포트로 접속하고 싶다면 8080:8180으로 설정한다.

$ docker run -d -p 8180:8180 myapp
ac4ebc1a070ad0e78e85c37b90098c2debad61e5266c3762394fa22a7a033714

-d 옵션은 컨테이너를 백그라운드에서 실행한다는 뜻이다. 실행 상태는 docker ps로 확인한다.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
ac4ebc1a070a        myapp               "java -jar /app.jar"   8 seconds ago       Up 7 seconds        0.0.0.0:8180->8180/tcp   naughty_lichterman

잘 실행되었다. 실제 확인은 브라우저나 curl로 8180에 접근해 보면 되겠다.

$ curl http://localhost:8180

테스트가 끝난 뒤 컨테이너를 중지하려면 docker ps에서 확인한 컨테이너 ID나 이름을 사용해 중지하면 된다.

$ docker stop ac4ebc1a070a

4. Docker 참고 문서

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.