티스토리 뷰
도커를 테스트 용으로 사용하려고 하면, 긴 명령어들을 써야하는 것이 여간 귀찮은게 아니다. 예를 들어서 내가 원하는 대로 컨테이너 하나를 실행시키려고 하면, 아래와 같이 긴 명령어를 사용해야한다.:
docker run --name="$HOST_NAME" -i -t --hostname="$HOST_NAME" -P --lxc-conf="lxc.network.type=veth" --lxc-conf="lxc.network.ipv4=${IP}/24" --lxc-conf="lxc.network.ipv4.gateway=172.17.42.1" --lxc-conf="lxc.network.link=docker0" --lxc-conf="lxc.network.name=eth0" --lxc-conf="lxc.network.flags=up" docker-registry:5000/rhel65-base:dns /bin/bash |
뭐 하나가 실행시킨다면 귀찮아도 참을 수 있다지만, 만약 실행 시켜야 하는 이미지가 6개라면? 아마도 난.... ...
테스트를 실행하기도 전에 요렇게 되지 않을까?
절대 상상하지도 말자!!
그래서 도커를 사용할 때 도움이 되는 몇 개의 스크립트 와 파일들을 만들었다.:
이 파일들은 github에서 다운이 가능하다.
git clone https://github.com/Jooho/sample-docker.git |
아래와 같은 파일을 볼수 있다.:
Scripts (Based on dns server images)
1) bashrc
#Local IP => Set local IP variable. It will be used in container export IP=$(ifconfig eth0|grep -w inet|awk '{print $2}'|cut -d: -f2) #Change home folder cd /var/named |
2) docker-env.sh
#Default information to start this container export HOST_NAME="DNS" export IP="172.17.42.100" export IMAGE='docker-registry:5000/rhel65-base:dns' |
3) docker-build.sh
# docker build command helper script. . ./docker-env.sh docker build -t $IMAGE . |
4)Dockerfile
FROM docker-registry:5000/centos65:basic ADD epel-release-6-8.noarch.rpm /etc/yum.repos.d/ RUN rpm -ivh /etc/yum.repos.d/epel-release-6-8.noarch.rpm #For supervisor package RUN yum update -y RUN yum install -y java-1.7.0-openjdk RUN yum install -y unzip RUN yum install -y openssh-server RUN yum install -y openssh-clients RUN yum install -y supervisor RUN yum install -y bind ADD supervisord.conf /home/supervisord.conf RUN cat /home/supervisord.conf > /etc/supervisord.conf ADD bashrc /home/bashrc RUN cat /home/bashrc >> /etc/profile RUN echo 'root:redhat' | chpasswd ADD bind/named.conf /etc/ ADD bind/named.jhouse.zones /etc/ ADD bind/172.17.42.net /var/named/ ADD bind/10.64.160.net /var/named/ ADD bind/named.jhouse /var/named/ EXPOSE 22 8080 9990 9999 CMD ["/usr/bin/supervisord"] #CMD ["/bin/bash"] #CMD ["./start.sh"] |
이 파일은 매 이미지 마다 변경이 될 것이다. 사실 이것은 헬퍼 파일은 아니지만, 실질적으로 사용가능한 예는 될수 있을 것이다.
5)docker-start.sh
. ./docker-env.sh for iii in $1 $2 $3 do if ( echo $iii | grep "\-host" &> /dev/null ) then c_host=`echo $iii | awk -F "=" '{print $2}'` if [[ z$c_host == z ]]; then echo usage : -host=jboss1 exit 1 else HOST_NAME=$c_host fi fi if ( echo $iii | grep "\-ip" &> /dev/null ) then c_ip=`echo $iii | awk -F "=" '{print $2}'` if [[ z$c_ip == z ]]; then echo usage : -ip=172.17.42.20 exit 1 else IP=$c_ip fi fi if ( echo $iii | grep "\-cmd" &> /dev/null ) then c_cmd=`echo $iii | awk -F "=" '{print $2}'` if [[ z$c_cmd == z ]]; then echo usage : -cmd=/bin/bash exit 1 else CMD=$c_cmd fi fi done ## https://github.com/dotcloud/docker/issues/5857 # it is not compatible using -h and --net togather from docker version 1.0.0 docker run \ --name="$HOST_NAME" \ -i -t --hostname="$HOST_NAME" \ -P -n=false\ #-n will be replaced with --net=none --lxc-conf="lxc.network.type=veth" \ --lxc-conf="lxc.network.ipv4=${IP}/24" \ --lxc-conf="lxc.network.ipv4.gateway=172.17.42.1" \ --lxc-conf="lxc.network.link=docker0" \ --lxc-conf="lxc.network.name=eth0" \ --lxc-conf="lxc.network.flags=up" \ $IMAGE $CMD |
사용법 :
# ./docker-start.sh (it will use default hostname from docker-env.sh) # ./docker-start.sh -host=hostname -ip=staticIP -cmd=executeCommand # ./docker-start.sh -host=mysql1 -ip=172.17.42.41 -cmd=/bin/bash |
6) docker-stop.sh
. ./docker-env.sh for iii in $1 $2 do if ( echo $iii | grep "\-host" &> /dev/null ) then c_host=`echo $iii | awk -F "=" '{print $2}'` if [[ z$c_host == z ]]; then echo usage : -host=jboss1 exit 1 else HOST_NAME=$c_host fi fi done echo "############### Running Docker Container ###############" docker ps echo "" echo "" echo "############### Stopped Docker Container ###############" docker ps -a export CONTAINER_NUM=`docker ps -a | grep -w $HOST_NAME |awk '{print $1}'` export RUNNING_CONTAINER_NUM=`docker ps |grep -w $HOST_NAME |awk '{print $1}'` for r in $RUNNING_CONTAINER_NUM;do echo docker stop $r docker stop $r done for c in $CONTAINER_NUM;do echo docker rm $c docker rm $c done
|
사용법 :
# ./docker-stop.sh (it will use default hostname from docker-env.sh) # ./docker-stop.sh -host=hostname # ./docker-stop.sh -host=mysql1 |
7)suervisord.conf
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log autorestart=true |
컨테이너를 시작할때, 몇가지의 명령어를 실해하기 위해서, supervisord 는 매우 유용하다. 그래서 이 패키지는 기본적으로 설치가 되도록 했다. 더 자세한 내용은 홈페이지를 참고하기 바란다. http://supervisord.org/
'IT > Docker' 카테고리의 다른 글
[Docker] How to change driver to keep using lxc? (0) | 2014.08.17 |
---|---|
[Docker] Testing Environment for clustered Wildfly using DNS (2) (0) | 2014.07.31 |
[Docker] Testing Environment for clustered Wildfly using DNS (1) (2) | 2014.07.31 |
[Docker] Default Helper Scripts & files (0) | 2014.07.29 |
요즘 핫이슈!!! Docker를 대충 이야기 해보다. (0) | 2014.07.25 |
- Total
- Today
- Yesterday
- git proGit
- 캐나다부동산
- 옥빌
- 캐나다
- Canada
- 온타리오
- 토론토정착서비스
- 부동산분석
- 토론토
- RHEL
- 정착서비스
- BC주
- Jay
- cert
- Red Hat
- 우드워킹
- RHCE
- 인터넷
- 벌링턴
- docker
- TORONTO
- BTBS
- Certificate
- certification
- redhat
- 미시사가
- ansible
- 부모님초청이민
- basement
- 밀튼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |