환경 : docker 1.12, host mac
맥에서 docker container를 테스트할 수 있는 환경과 linux에서 동작하는 docker를 개발하고 있다.
docke의 /data/start.sh는 주로 데몬으로 사용하는데, 만약 이미지를 만드는 도중에 디버깅을 해야 하거나, push하기 전에 container로 띄워서 불필요한 내용을 정리해야 할 상황이 생길 수 있다. 그 때를 위한 예제이다.
먼저 centos를 기반으로 하고, 여러 애플리케이션이 들어가 있는 도커 이미지를 만들었다.
$ docker build -t google-sandbox -f Dockerfile .
/data/start.sh 파일이 docker에 존재하지 않으면, docker run 커맨드로 실행을 시킬려면 에러가 발생한다.
$ docker run -i -t --name test google-sandbox /bin/bash
sh: /data/start.sh: No such file or directory
Dockerfile에 이렇게 추가해도. 실행이 되지 않는다. 즉 dummy script는 안된다.
RUN mkdir -p /data && touch /data/start.sh
그래서 docker 이미지에 /data/start.sh에 먼가 길게 동작하는 스크립트로 만든다.
RUN mkdir -p /data && echo $'#/bin/bash\n\
while true; do echo hello world; sleep 10000; done\n\
'\
> /data/start.sh
그리고, docker를 실행한다.
(가장 중요한 부분은 -d 이다!!)
$ docker run --name test -d google-sandbox /bin/bash -c "echo 1"
ae5f0d3ec968f55c0893d68a23d9033f62471555aa0b65785af946cf86eeec44
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae5f0d3ec968 google-sandbox "/docker-entrypoint.s" 3 seconds ago Up 2 seconds test
$ docker exec -i -t test /bin/bash
(docker 서버로 진입)
[root@ae5f0d3ec968 /]# ls -al
total 96
....
로그를 보면 /data/start.sh가 실행하고 있음을 확인할 수 있다.
$ docker logs 컨테이너ID
참고로, 데몬(-d)를 주지 않으면 /data/start.sh의 실행 모드 이동되니. 쓰지 않도록 한다.
$ docker run -i -t --name google-sandbox google-sandbox /bin/bash
hello world
(대기)
참고 자료
https://docs.docker.com/engine/tutorials/dockerizing/
https://docs.docker.com/engine/reference/run/
https://docs.docker.com/v1.10/engine/quickstart/
참고로 테스트하면서 자주 만드는 명령어 추가.
* 사용하지 않는 docker 컨테이너 삭제하기
docker rm `docker ps -a -q`
'docker' 카테고리의 다른 글
[docker] 스크랩-도커 컨테이너에서 피해야 할 10가지 (0) | 2016.07.30 |
---|---|
[docker] mac 디렉토리를 docker container (linux) 디렉토리로 복사할 때 유의점 (0) | 2016.07.29 |
[docker] centos7 이미지에 expressjs를 설치한후 container 실행하기 / docker hub 업로드하기 (0) | 2016.07.26 |
[docker] wordpress 테스트 환경 구축 (0) | 2016.07.24 |
docker 공부 (0) | 2016.07.24 |