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:
- $ 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
- sudo docker ps -a -q -notrunc | xargs sudo docker rm
Killing and removing of docker containers by specific image name:
- sudo docker ps -a | grep "$IMAGE" | awk '{print $1}' | sudo xargs docker rm
Making new image by copying JDK and some APP directory
- #!/bin/bash
- JDK=/usr/lib/jvm/jdk1.7.0 # My app is java-based
- APPPATH=$1
- IMAGENAME=$2
- DOCKERIMAGE=base # base image
- # Run docker in daemon mode
- (docker -d || echo "Docker daemon already running") &
- # Sleep for a few seconds maybe needed here
- CONTAINERBASEPATH=/tmp
- # Copy all needed directories
- tar -c $JDK $APPPATH | docker run -i $DOCKERIMAGE /bin/sh -c \
- "tar -C $CONTAINERBASEPATH/ -x ; \
- chown -R root:root $CONTAINERBASEPATH ; \
- chmod -R ug=rwx $CONTAINERBASEPATH ; \
- chmod -R o=rx $CONTAINERBASEPATH"
- # Find current running container id
- CONTAINER=$(docker ps -a \
- | egrep -v '^ID' \
- | awk '{print $1}')
- # small trick based on assumption
- # that there is just one current
- # running docker process,
- # wait for resolving this issue:
- # https://github.com/dotcloud/docker/issues/252
- # Find old image and drop it from docker
- OLDIMAGE=$(docker images | egrep "^$IMAGENAME" | awk '{print $3}' | egrep -v '^ID$')
- if [[ $OLDIMAGE ]]; then
- docker rmi "$OLDIMAGE"
- fi
- # Make new image
- docker commit -m "Added jdk and $APPPATH" "$CONTAINER" "$IMAGENAME"
- # Finally remove running container
- docker rm "$CONTAINER"
Using:
- $ sudo ./make-image.sh /home/your/app yourcompany/project
Check that image was created:
- $ sudo docker images
Run image
- #!/bin/bash
- JDK=/usr/lib/jvm/jdk1.7.0
- APPPATH=$1
- DOCKERIMAGE=$2
- SOMEPARAMETER1="1"
- SOMEPARAMETER2="2"
- # Run docker in daemon mode
- (docker -d || echo "Docker daemon already running") &
- # Sleep for a few seconds maybe needed here
- CONTAINERBASEPATH=/tmp
- # Build your command line by line
- CMD="cd CONTAINERBASEPATH/APPPATH"
- #CMD="CMD ; CONTAINERBASEPATH/$JDK/bin/java -Xdebug \
- # -Xrunjdwp:transport=dt_socket,server=y,address=\"16600\" -jar $APPJAR"
- CMD="CMD ; CONTAINERBASEPATH/JDK/bin/java -jar APPJAR"
- # Run app from image under some user rights and with bounded memory
- JOB=$(docker run -u irc -m 536870912 -d $DOCKERIMAGE \
- /bin/sh -c "$CMD")
- #echo "Daemon received: (docker logs JOB)"
Using:
- $ sudo ./run-app.sh /home/your/app yourcompany/project "parameter1" "parameter2"
Reading logs from all running containers
- 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.
Комментариев нет:
Отправить комментарий