Processing math: 100%

четверг, 11 апреля 2013 г.

Tips for using docker: remove running containers, make new image, run image, reading logs

Docker - in two words this is a manager of LXC containers.

But I guess you know more about docker if you are here.

Note: I don't know anything about your environment and running processes, so use next commands on your own risk.

Killing and removing containers

First of all if you are experimenting with docker next command for guaranteed killing all running lxc-processes is possible will useful:

  1. $ ps aux | egrep lxc | egrep -o "root     [0-9]{5}" | egrep -o "[0-9]{5}" | xargs sudo kill -9  

Soft killing and removing of docker containers

  1. sudo docker ps -a -q -notrunc | xargs sudo docker rm  

Killing and removing of docker containers by specific image name:

  1. sudo docker ps -a | grep "$IMAGE" | awk '{print $1}' | sudo xargs docker rm  

Making new image by copying JDK and some APP directory

  1. #!/bin/bash  
  2.   
  3. JDK=/usr/lib/jvm/jdk1.7.0 # My app is java-based  
  4. APPPATH=$1  
  5. IMAGENAME=$2  
  6. DOCKERIMAGE=base # base image  
  7.   
  8. # Run docker in daemon mode  
  9. (docker -d || echo "Docker daemon already running") &  
  10. # Sleep for a few seconds maybe needed here  
  11.   
  12. CONTAINERBASEPATH=/tmp  
  13. # Copy all needed directories  
  14. tar -c $JDK $APPPATH | docker run -i $DOCKERIMAGE /bin/sh -c \  
  15. "tar -C $CONTAINERBASEPATH/ -x ; \  
  16. chown -R root:root $CONTAINERBASEPATH ; \  
  17. chmod -R ug=rwx $CONTAINERBASEPATH ; \  
  18. chmod -R o=rx $CONTAINERBASEPATH"  
  19.   
  20. # Find current running container id  
  21. CONTAINER=$(docker ps -a \  
  22.   | egrep -v '^ID' \  
  23.   | awk '{print $1}')  
  24. # small trick based on assumption  
  25. # that there is just one current  
  26. # running docker process,  
  27. # wait for resolving this issue:  
  28. # https://github.com/dotcloud/docker/issues/252  
  29.   
  30. # Find old image and drop it from docker  
  31. OLDIMAGE=$(docker images | egrep "^$IMAGENAME" | awk '{print $3}' | egrep -v '^ID$')  
  32. if [[ $OLDIMAGE ]]then  
  33.     docker rmi "$OLDIMAGE"  
  34. fi  
  35.   
  36. # Make new image  
  37. docker commit -m "Added jdk and $APPPATH" "$CONTAINER" "$IMAGENAME"  
  38.   
  39. # Finally remove running container  
  40. docker rm "$CONTAINER"  

Using:

  1. $ sudo ./make-image.sh /home/your/app yourcompany/project  

Check that image was created:

  1. $ sudo docker images  

Run image

  1. #!/bin/bash  
  2. JDK=/usr/lib/jvm/jdk1.7.0  
  3. APPPATH=$1  
  4. DOCKERIMAGE=$2  
  5. SOMEPARAMETER1="1"  
  6. SOMEPARAMETER2="2"  
  7.   
  8. # Run docker in daemon mode  
  9. (docker -d || echo "Docker daemon already running") &  
  10. # Sleep for a few seconds maybe needed here  
  11.   
  12. CONTAINERBASEPATH=/tmp  
  13. # Build your command line by line  
  14. CMD="cd CONTAINERBASEPATH/APPPATH"  
  15. #CMD="CMD ; CONTAINERBASEPATH/$JDK/bin/java -Xdebug \  
  16. #   -Xrunjdwp:transport=dt_socket,server=y,address=\"16600\" -jar $APPJAR"  
  17. CMD="CMD ; CONTAINERBASEPATH/JDK/bin/java -jar APPJAR"  
  18. # Run app from image under some user rights and with bounded memory  
  19. JOB=$(docker run -u irc -m 536870912 -d $DOCKERIMAGE \  
  20.        /bin/sh -c "$CMD")  
  21. #echo "Daemon received: (docker logs JOB)"  

Using:

  1. $ sudo ./run-app.sh /home/your/app yourcompany/project "parameter1" "parameter2"  

Reading logs from all running containers

  1. sudo docker ps -a | grep -v '^ID' | awk '{print $1}' | xargs -n1 sudo docker logs  

Note: You can filter containers by image name or something else of course.

Комментариев нет:

Отправить комментарий