도커에서는 이미지를 만드는 방법이 2가지가 있다.
1. 컨테이너로 부터 이미지 만들기(snapshot)
$ docker commit [options]
2. Dockerfile로 부터 이미지 만들기
$ docker build [option]
1. 컨테이너로 부터 이미지 생성하기
이미지 파일을 만들어 보자.
$ docker commit -a "pjt " -m "commit test" hello-world node-test:0.1
정상적으로 이미지가 생성이 되었다.
이제 해당 이미지로 컨테이너를 만들어보자.
$ docker run -p 3000:30000 -i -t --name node-test-server node-test:0.1 /bin/bash
먼저 설치한 컨테이너와 똑같다.
2. Dockerfile을 이용하여 이미지 생성
1
2
3
|
FROM ubuntu:latest
MAINTAINER pjt <pjt3591oo@naver.com>
| cs |
$ docker build --tag dockerfile-node-test:0.1 .
Dockerfile에 작성한것이 한줄한줄 실행이 되면서 설치가 완료되었다.
원래는 패키지좀 설치하고 실행하려고 했는데 계속 에러가 뜨면서 실행이 되지 않아 ubuntu 최신 버전만 받아와서 이미지를 만들었다.
정상적으로 이미지가 생성이 되었다.
이미지 생성하는 동안 하나의 테스트를 진행을 해보았다.
original host와 container host의 포트중첩이 가능할까???
호스트 서버로 3000번을 30000번 포트로 포워딩이 되어있다.
이제 원래의 os에서 3000번 포트를 키면 어떻게 될까?
충돌이 일어난다.
도커는 os를 공유하는 진화된 가상화 기술이다.
즉 os는 하나이기 때문에 포트가 중복될 수 없다.
그렇기 떄문에 에러를 띄운다.
결론
그럼 저 두가지 방법을 어떻게 언제쓰면 효과적으로 쓸 수 있을까??
우선 초기에 서버 셋팅을할 때 패키지 가 설치되기 이전에 패키지 설치하고 os 이미지를 통해 설치를 할때는 Dockerfile을 이용해서 설치를 한다.
이후 해당 호스트가 변경이 되거나 백업을 하고싶을 땐 commit을 이용하여 snapshop을 하면 좀더 효율적으로 쓸 수 있을것이다.
댓글
댓글 쓰기