Docker를 사용할 때의 흐름 감잡기
docker run hello-world
Unable to find image ~ 라는 문구가 없이 프로그램이 실행되는 것을 확인할 수 있다. 결국은 캐쉬 된 이미지를 이용해서 컨테이너를 만든 후 프로그램을 실행하는 것이다.
이미지로 컨테이너를 만들기
어떻게 컨테이너가 생성이 되게 되는지 자세히 알아보자.
이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다.
1. Docker 클라이언트에 docker run <이미지> 입력해준다.
2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨 준다.
3.이미지에서 가지고 있는 명령어 (컨테이너가 실행될때 사용될 명령어를 이용해서 카카오톡을 실행시켜준다.
도커 이미지 생성하는 순서
직접 도커 이미지를 만들어서 사용할 수도 있고 직접 만든 도커 이미지를 도커 허브에 올려서 공유할 수도 있다.
그래서 어떻게 직접 이미지를 만들 수 있는지 알아보자.
1.도커 이미지는 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있 는 소프트웨어 패키지이다.
2.지금까지 해왔듯이 도커 이미지는 Dockerhub에 이미 다른 사람들이 만들어 놓은 것을 이용할 수도 있으며, 직접 도커 이미지를 만들어서 사용할 수도 있고 직접 만든 것을 Dockerhub에 업로드할 수도 있다.
도커 이미지를 이용해서 도커 컨테이너를 생성. ex) docker create <이미지 이름>
Dockerfile 만들기
도커 파일(Docker file)이란 ?
- 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해 주는 곳.
Dockerfile을 만드는 법
도커 파일 만드는 순서
(도커 이미지가 필요한 것이 무엇인지를 생각하기)
1. 베이스 이미지를 명시해준다. (파일 스냅샷에 해당)
2. 추가적으로 필요한 파일을 다운 받기 위한 몇 가지 명령어를 명시해준다. (파일 스냅샷에 해당)
도커 이미지는 여러개의 레이어들로 되어 있다. 그 중에서 베이스 이미지는 이 이미지의 기반이 되는 부분이다.
도커 이미지의 목표는 "hello 문구" 출력하기
도커 파일을 만들 폴더를 하나 만든다. dockerfile-folder 라는 폴더를 생성해주자.
방금 생성한 도커 파일 폴더를 에디터를 이용해서 실행 (Visual Studio Code)
파일 하나를 생성한다. 이름은 dockerfile.
그 안에 먼저 어떻게 진행해 나갈지 기본적인 토대를 명시한다.
FROM : 이미지 생성 시 기반이 되는 이미지 레이어.
RUN : 도커 이미지가 생성되기 전에 수행할 쉘 명령어
CMD : 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셀 스크립트이다. 이 명령어는 DockerFile 내 1회만 사용가능.
이제 베이스 이미지부터 실제 값으로 추가해주기.
베이스 이미지는 ubuntu를 써도 되고 centos 등을 써도 되지만 hello를 출력하는 기능은 굳이 사이즈가 큰 베이스 이미지를 쓸 필요가 없기에 사이즈가 작은 alpine 베이스 이미지를 사용.
hello 문자를 출력해주기 위해 echo를 사용하여야 하는데 이미 alpine 안에 echo를 사용하게 할 수 있는 파일이 있기에 RUN 부분은 생략함.
# 베이스 이미지를 명시해준다.
FROM alpine
# 추가적으로 필요한 파일들을 다운로드 받는다.
# RUN command
#컨테이너 시작 시 실행 될 명령어를 명시해준다.
CMD [ "echo", "hello" ]
이렇게 하면 도커 파일 만들기까지 한 것이다.
도커 파일로 도커 이미지 만들기
도커 파일에 입력된 것들이 도커 클라이언트에 전달되어서 도커 서버가 인식하게 해야한다. 그렇게 하기 위해서 docker build ./ 또는 docker build .
Step 1/2
일단 현재는 업데이트가 되어 step 1/1만 터미널에서 확인되나, 1/2, 2/2 이렇게 나오게 할 수는 있다. 하지만 간단히 알아보는 과정이기에 따로 작업을 하진 않고, 1/2, 2/2가 확인되게 한 터미널 창을 따로 가져와보았다.
Step 2에 보면 임시 컨테이너를 생성하고 무언가를 하고 다시 지우는데 왜 그렇게 하는 걸까?
베이스 이미지에서 다른 종속성이나 새로운 커맨드를 추가할 때는 임시 컨테이너를 만든 후 그 컨테이너를 토대로 새로운 이미지를 만든다. 그리고 그 임시 컨테이너는 지워준다.
터미널창에서 가장 하단에 있는 image로 하면 된다. 이 image의 앞부분 fd3만 입력하면 hello가 출력된다.