[Docker] 도커 이미지 직접 만들기

2023. 4. 12. 17:58docker

도커 이미지를 항상 도커 hub에 있는 거를 가져와서 사용했는데

직접 도커 이미지를 만들어서 사용할 수 있고, 만든 도커 이미지를 도커 허브에 올려서 공유할 수 있습니다. (npm같은)

복습

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

- 도커 이미지는 도커 hub에 이미 만들어 놓은 것을 이용할 수 있고 , 직접 내가 만든 걸 도커 hub에 업로드해서 공유할 수 있습니다.

명령어

docker create <이미지 이름>

도커 이미지 생성 순서

Dockerfile작성 --> 도커 클라이언트 --> 도커 서버 --> 이미지 생성

- dockerfile : 도커 이미지 만들기 위한 설정 파일. 컨테이너가 어떻게 행동할 지에 대한 설정들을 정의합니다.

- 도커 클라이언트 : dockerfile에 입력된 것들이 도커 클라이언트에 전달합니다.

- 도커 서버 : 도커 클라이언트에 전달된 모든 중요한 작업들을 수행합니다.

도커 파일 만드는 순서 (도커 이미지가 필요한 게 무엇인지 생각)

베이스 이미지 명시 (파일 스냅샷)

추가적으로 필요한 파일들 다운받기 위해 몇 가지 명령어 명시 (파일 스냅샷)

컨테이너 시작 시 실행 될 명령어 명시. ex) docker run mysql


실습해보기!

* 목표

"hello" 문구 출력하기

* 순서

1. 폴더 하나 생성 ex) dockerfile-folder

2. 생성한 폴더에 "Dockerfile" 이름의 파일 하나 생성

3. 그 안에 어떻게 진행해 나갈지 작성

Dockerfile

# 베이스 이미지 명시

FROM alpine

# 추가적으로 필요한 파일들 다운로드 - 현재는 hello만 출력하므로 주석처리!
# RUN command

# 컨테이너 시작시 실행 될 명령어 명시

CMD ["echo" ,"hello"] // 노드라고 치면 ["npm" , "start"]

* FROM / RUN / CMD 등은 도커 서버에게 무엇을 하라고 알려주는 예약어

 

FROM

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

ex ) ebuntu:14.04 , node:16


RUN

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


CMD

컨테이너가 시작했을 때 실행할 실행파일 또는 쉘 스크립트입니다. 해당 명령어는 DockerFile내 1회만 쓸 수 있습니다.

 

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

 

5. 베이스 이미지는  ubuntu나 centOS 써도 되는데  hello 출력하는 기능은  큰 사이즈 베이스 이미지 쓸 필요 없으므로 사이즈 작은 alpine베이스 이미지 사용!

 

6. hello 출력하기 위해 echo 사용하는데 이미 alpine안에 echo 사용하게 할 수 있는 파일이 있어 RUN  주석처리함

 

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

 


도커 파일 작성후 빌드

docker build ./

dockerfile에 입력된 것들을 도커 클라이언트에 전달되 도커 서버가 인식하게 해야하는데 그렇게 하기 위한 명령어입니다.

 

 

도커  실행

빌드해서 올린 도커를 실행해봅시다. id값으로 실행합니다.

hello가 잘 출력된 것을 확인할 수 있습니다!

 

도커  이미지 기억하기 쉬운 이름으로 주기

도커 빌드 후 생성된 난수로 실행시키기 불편할 수 있습니다. 이 때 네이밍을 줘서 쉽게 실행시킬 수 있는데 빌드 시 아래와 같이 줄 수 있습니다.

-t 태그와 <아이디>/<레포지토리 이름 >:<버전>  포맷으로 추고 ./ 로 현재 디렉토리 위치의 파일을 빌드한다고 명시하면 됩니다. 

 

docker build -t corgi93/hello:latest ./