docker 1.12부터 mac과 윈도우를 지원한다.


https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/


https://blog.docker.com/2016/07/docker-built-in-orchestration-ready-for-production-docker-1-12-goes-ga/



docker 1.12 rc4와 docker 1.12 정식 릴리즈를 쓰고 있는데, 정말 편하게 잘 테스트할 수 있어서 좋다.

Posted by '김용환'
,

[docker 버전 : 1.12]


docker 를 빌드할 때, Dockerfile로 생성하는 단계가 있다. 


docker build -t google-sandbox -f Dockerfile .



docker history 커맨드를 보면, image 안에 여러 image id가 존재하는 것을 볼 수 있다. 즉 RUN 지시자로 정의된 항목마다 하나의 image id가 존재하는 것을 볼 수 있다.


$ docker history 9ee4b3d0f0b5

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
9ee4b3d0f0b5        3 minutes ago       /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entry   0 B
17e114f16e50        3 minutes ago       /bin/sh -c #(nop)  VOLUME [/data /log]          0 B
18e87f892df1        3 minutes ago       /bin/sh -c #(nop)  ENV TERM=xterm               0 B
df973dbe65e4        3 minutes ago       /bin/sh -c #(nop) COPY file:0939c051875b38702   30 B

ba77ab6a5bd4        8 minutes ago       /bin/sh -c cd /tmp && rm -rf *                  0 B

...




또한 docker push 할 때, image id 단위로 push되는 것을 볼 수 있다.




docker 이미지의 내부 구조를 살펴보면, read-only이면서 순차적인 layer로 구성되어 있다.

특히 docker 1.10부터는 암호화된 hash, 충돌이 나지 않는 hash key로 image id를 구성한다고 한다.




이런 구조의 장점은 기존 이미지의 재활용을 잘 한다는 점이다.

도커를 테스트해보니. 딱 필요한(수정한) 부분만 image id가 생성된다. 따라서 디스크 용량 이슈가 확실히 적어진다.

그래서 컨테이너도 효율적으로 관리할 수 있다. 





또한, 컨테이너를 실행할 때는 분리된 프로세스로 실행되기 때문에 문제 없이 잘 실행된다. 





참고 

* docker의 내부구조에 대한 설명 :
https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/





Posted by '김용환'
,



http://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/



레드햇 개발자 블로그에 좋은 내용이 좀 있다.




10 things to avoid in docker containers 라는 블로그을 잠깐 소개한다.


도커의 장점

1. Containers are immutable 

2. Containers are lightweight

3. Containers are fast


피해야 10가지 내용- Don't

1. Don’t store data in containers 
컨테이너는 언제든지 바뀌질 수 있고 사라질 수 있고 멈춰질 수 있다.  데이터 손실에 대한 영향도를 살펴야 한다.

2. Don’t ship your application in two pieces 
애플리케이션을 2로 나누지 말라. 개발 단계(디버그)에서는 상관없지만, 상용 배포에서는 하나로 만든다.

3. Don’t create large images 
큰 이미지는 배포하기 어렵다. 불필요한 패키지는 설치하지 않는다.

4. Don’t use a single layer image
관리를 편하게 하라

5. Don’t create images from running containers 
이미지를 생성하는 docker commit 커맨드를 사용하지 않는다.

6. Don’t use only the “latest” tag 
latest는 maven의 snapshot을 의미한다. 하위 호환성을 조심해야 한다.

7. Don’t run more than one process in a single container 
하나의 컨테이너에 하나 이상의 프로세스를 실행하지 않는다.

8. Don’t store credentials in the image. Use environment variables 
이미지에 중요 크레덴셜(username/password)를 저장하지 않는다.

9. Don’t run processes as a root user 
보안 문제가 언제든지 발생할 수 있다.

10. Don’t rely on IP addresses 
IP는 언제든지 변할 수 있다.





Posted by '김용환'
,