본문 바로가기

Docker

[Docker] dockerfile 이미지 생성하기(echo hello)

도커 허브에 이미 있었던 것만 사용했으므로, 도커 이미지를 생성해 보십시다.

 

* 도커 이미지란??

 - 도커 이미지는 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고있는 소프트 웨어 패키지

 - 도커 이미지는 도커 허브에 이미 다른사람들이 만들어 놓은 것을 이용 할 수도 있으며, 직접 도커 이미지를 만들어서 사용할 수도 있고, 직접 만들 것은 도커허브에 업로드 할 수도 있다.

 

도커 이미지를 이용해서 도커 컨테이너를 생성

=> ex) docker create <이미지이름>

 

도커 이미지 생성하는 순서

 

1. Docker File 작성 : Docker File 이란 Docker Image 를 만들기 위한 설정파일.

                           (컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의)

2. 도커 클라이언트 : 도커 파일에 입력된 것들이 도커 클라이언트에 전달

3. 도커 서버 : 도커 클라이언트에 전달된 모든 중요한 작업들을 하는 곳

4. 이미지 생성 

 

* Docker File 만들기

 

도커 파일(Docker File)이란 ?

- 도커 이미지를 만들기 위한 설정파일 이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해 주는 곳

 

* 도커 파일 만드는 순서

   ( 도커 이미지가 필요한 것이 무엇인지를 생각하기)

1. 베이스 이미지를 명시해준다. (파일 스냅샷에 해당)

2. 추가적으로 필요한 을 다운받기 위한 몇가지 명령어를 명시해준다. (파일 스냅샷에 해당)

3. 컨테이너 시작시 실행 될 명령어를 명시해 준다. (시작시 실행 될 명령어에 해당)

 

------ 이미지 ------

시작시 실행될 명령어 : run kakaotalk

파일 스냅샷 : 카카오톡 파일

 

베이스 이미지란?

- 도커 이미지는 여러개의 레이어(layer) 로 되어 있다.

그 중 베이스 이미지는 이 이미지의 기반이 되는 부분이다.

레이어는 중간 단계의 이미지라고 생각하면 된다.

 

(베이스 이미지 : OS 라고 생각하면 된다. Window, MacOS, Linux 등등)

 

실습------------------- Hello 문구 출력하기------------------------------------------------

순서 )

 1. 도커 파일을 만들 폴더 하나 만들기 ex) dockerfile-folder

 2. 방금 생성한 도커 파일 폴더를 에디터를 이용해서 실행 (visual studio code 사용)

download ) https://code.visualstudio.com/docs/?dv=win64user 

 

3. 파일 하나를 생성한다. 이름은 Dockerfile

4. 그 안에 먼저 어떻게 진행해 나갈지 기본적인 토대를 명시

 

# 베이스 이미지를 명시해준다

FROM baseImage 

=>이미지 생성시 기반이 되는 이미지 레이어 

<이미지이름>:<태그> 형식으로 작성

태그를 안붙이면 자동적으로 가장 최신것으로 다운 받음

ex) ubuntu :18.04 

 

#추가적으로 필요한 파일들을 다운로드 받는다

RUN COMMAND

=> 도커 이미지가 생성되기 전에 수행할 쉘 명령어

 

# 컨테이너 시작시 실행 될 명령어를 명시해준다.

CMD ["executable"]

=> 컨테이너가 시작되었을 때 실행할 파일 또는 쉘 스크립트

해당 명령어는 Dockerfile 내 1 회만 쓸 수 있음!!

 

5. 베이스 이미지로 부터 실제 값으로 추가해 주기

6. 베이스 이미지는 ubuntu를 써도 되고 centos 등을 써도 되지만 hello를 출력하는 기능은 굳이 사이즈가 큰 베이스 이미지를 쓸 필요가 없기 때문에 사이즈가 작은 alpine 베이스 이미지를 사용

7. hello 문자를 출력해주기 위해 echo를 사용하여야 하는데, 이미 alpine 안에 echo를 사용하게 할 수 있는 파일이 있기에 RUN 부분은 생략함.

8. 마지막으로 컨테이너 시작시 실행 될 명령어 echo hello 를 적어준다.

파일 생성은 끝! 이제 build 를 해야 합니다.

 

도커 파일에 입력된 것들이 도커 클라이언트에 전달되어서 도커 서버가 인식하게 합니다.

docker build ./ 또는 docker build .

Build 명령어는 해당 디렉토리 내에서 dockerfile 이라는 파일을 찾아서 도커 클라이언트에 전달 시켜준다.

- docker build 뒤에 ./ 와 . 는 둘다 현재 디렉토리를 가르킨다.

 

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

이런 메시지가 떨어졌어요. 

 

> docker scan alpine 해주었어요

자 이 생성된 컨테이너를 실행 시켜 보십시다

베이스 이미지를 다른 종속성이나 새로운 커맨드를 추가 할 때는 임시 컨테이너를 만든 후에

그 컨테이너를 토대로 새로운 이미지를 만든다. 그리고 그 임시컨테이너는 지워준다.

 

이미지 ---> 임시컨테이너 ----> 새로운 이미지

                       |^(추가)

     (새로운 명령어 , 새로운 파일스냅샷)

 

* 도커 이미지에 naming 주기

원래 build : docker build .

이름주는 build : docker build -t 나의도커아이디/저장소(프로젝트이름):버전 .

 

ex) docker build -t joke00/hello:latest ./

이름 준 거로 실행하려고 할때엔

> docker run -it joke00/hellow

끝!