Docker overview

서버 교양 2015. 6. 13. 13:54

Docker

  1. DockerFile
    1. 이 파일로 부터 instance image를 만든다.
    2. 어떤 파일을 복사해둘지, 어떤 패키지를 인스톨 할것인지, 어떤 명령어로 서버를 실행할지 설정을 해둔다.
    3. 여기서 expose와 run할때 expose는 그 의미가 좀 다르다.
    4. 여기서 expose는 이 instance의 특정 ip를 내부 컨테이너에 한정해서 열어두겠다. 이고 run할때 expose는 host로 어느 포트를 열어줄 것인가를 정의하는 것이다.
    5. 기본적으로 exposed되지 않은 포트로는 host에서 접속할 수 없다.
    6. volume도 마찬가지

  2. Image
    1. Container instance로 띄울수 있는 Image다. (아마존 AMI같은거라고 볼수 있다.)
  3. Container
    1. Image로 실행된 instance
    2. 각 프로세스라고 볼 수 있다.
    3. container안에 접속해서 새로운 패키지를 설치했을때 이 변경사항을 commit하여 새로운 이미지로 만들수도있다. 하지만 이걸 다시 docfile로 빼는것은 없는것 같다.

  4. Run
    1. expose
      1. run할 인스턴스에 특정 포트를 여는의미 -p 이용 (publish)
    2. link
      1. link는 container간에 container 이름이나 특정 ailias이름으로 접근하기 위해서 사용. 딱히 link를 안해주어도 하나의 host안에 떠있는 container들은 서로의 ip만 알면 접근가능하다. 하지만 ip는 설치할때마다 동적이므로 코드레벨에서 이름으로 지정해놓고 쓰려면 link를 이용하는게 좋다.
    3. volume
      1. expose와 비슷한 개념으로 폴더를 공유할 수있게 해준다. 좀더 특이한점은 여러 Container가 하나의 폴더를 공유할 수 있게도 해준다.
  5. Ambassador
    1. docker를 분산환경에 셋팅 할 수 도 있는데, 이때 서로 exposed된 port, ip에 name으로만 붙고싶은데 이때 붙었던 instance의 ip가 변경되면(스케일업을 한다던지) 여기 붙고있던 instance들의 hosts파일을 변경해준다던지 하는 추가 작업을 해줘야한다. 이때 Ambassador를 이용하면 mongos처럼 docker앞쪽에 network잡을 대신 처리해줄 수 있다.


  • Docker의 장점은 일단 local환경이나 개발환경에서 OS에 국한되지 않는 여러가지 셋팅이 가능하게 해준다는 점과 이를 Image로 관리해서 쉽게 개발환경을 구축할수있다는점.

====== 유용한 docker command =========
- docker file로 image 만들기: docker build -t name . (docker file 이 있는곳에서)
- 실행중 & 스탑된 container 목록: docker ps -a
- 실행중 & 스탑된 container 제거: docker rm container_id
- container image 목록: docker images
- container image 제거: docker rmi image_id
 
- docker command 실행이 끝나도 프로세스가 남아있어서 attach가능하도록
: docker run -dit container_name /bin/sh (그냥 docker run -it container_name 이라고 하고 써도 된다. 바로 접속해서 쓸꺼면.)
- host port mapping: docker run -p 8080:8080 (-P 대문자옵션은 dockerfile에서 미리 exposed된 것들을 맵핑하겠다는것이고 아니면 -p를 써야한다)
- host directory mount: -v host절대경로:docker절대경로
- docker container process로 shell 접속: docker attach contrainer_id (detatch 는 ctl p ctl q)
- docker container save: docker commit container_id image_name
(docker commit 2c08332 arena)
- docker container stop: docker stop container_id
- 각 docker file line당 disk증가량 보려면: docker history image_name

* 아 그리고 이게 명령어 마다 layer라서 실행하고 다른 라인으로 RUN rm 해봤자 용량이 줄지않는다. && 으로 연결해서 rm 해야 image 용량이 늘어나지 않는다!

* 참고로 dockerfile RUN하나당 disk layer하나다 무슨말인고 하니,

RUN wget something (200MB)

RUN rm something 

이렇게 하면 이미지 사이즈에 200메가는 반영되지 않기를 바라지만 200메가는 고스란히 반영된다.

RUN wget something && rm something 이라고 해야된다.

'서버 교양' 카테고리의 다른 글

Logstash install  (0) 2017.03.17
[펌] 인증 암호화와 해쉬  (0) 2016.10.29
SSL 인증서 발급  (0) 2015.03.04
글로벌 푸시 시스템 구성하기  (0) 2015.01.16
글로벌 푸시 보내기  (0) 2014.11.27
블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,