Tuesday, 7 February 2017

Docker centos cron

https://github.com/CentOS/CentOS-Dockerfiles/blob/master/ssh/centos7/Dockerfile

Dockerfile:
FROM centos:latest
MAINTAINER Zoran Gagic <zorang@gmail.com>

# install crontabs
RUN yum -y update
RUN yum -y install crontabs bc

# change timezone
RUN cp /usr/share/zoneinfo/Australia/Sydney /etc/localtime

# comment out PAM
RUN sed -i -e '/pam_loginuid.so/s/^/#/' /etc/pam.d/crond

RUN chmod 0644 /etc/crontab

# install awsinfo

# Add crontab setting
#RUN echo '* * * * * root echo "Hi Earthlings! `date`" >> /tmp/test.log' >> /etc/crontab
RUN echo '* * * * * root echo "Hi Earthlings! `date`" >> /tmp/test.log' | crontab -

RUN mkdir -p /usr/local/bin /usr/local/awsinfo /root/.aws /root/awsdata/au
ADD entry.sh /usr/local/bin
ADD awsinfo.tgz /usr/local/awsinfo
ADD aws/* /root/.aws/
RUN cp /usr/local/awsinfo/awsinfo.config /root/awsdata/au/awsinfo.config
RUN cd /root; curl -O https://bootstrap.pypa.io/get-pip.py; python get-pip.py --user; export PATH=~/.local/bin:$PATH; pip install awscli --upgrade --user; pip install xlwt
RUN cp /usr/local/awsinfo/lambda/jq /bin; cp /usr/local/awsinfo/csvquote /bin
RUN chmod 755 /usr/local/bin/entry.sh /bin/jq /bin/csvquote

RUN yum install -y --nogpgcheck epel-release wget openssh-clients openssh-server net-tools
RUN mkdir /var/run/sshd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's!HostKey /etc/ssh/ssh_host_ecdsa_key!# HostKey /etc/ssh/ssh_host_ecdsa_key!' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
RUN echo root:topsecret123 | chpasswd
RUN useradd --create-home -G wheel -s/bin/bash zorang
RUN echo -n 'zorang:topsecret123' | chpasswd
RUN echo 'export PS1="[\u@docker-\h] \W # "' >> /root/.bash_profile
RUN echo 'export PATH=~/.local/bin:$PATH' >> /root/.bash_profile

EXPOSE 22

CMD ["/usr/local/bin/entry.sh"]



entry.sh:
#!/usr/bin/bash
nohup /usr/sbin/crond 2>&1 &
/usr/sbin/sshd
cat /usr/local/awsinfo/awsinfo2 | grep -v proxy > /tmp/tempfile; cp /tmp/tempfile /usr/local/awsinfo/awsinfo2
cat /usr/local/awsinfo/awsinfo2.sh | grep -v proxy > /tmp/tempfile; cp /tmp/tempfile /usr/local/awsinfo/awsinfo2.sh
#export PATH=~/.local/bin:$PATH
#/bin/bash
sleep 315360000


yum update -y
yum install -y git docker
sudo usermod -a -G docker ec2-user
service docker start
docker info
docker pull centos
docker images
docker run -i -t zorang/centos /bin/bash
docker build -t mycron .
docker run -i -t zorang/mycron /bin/bash
docker inspect zorang/mycron
docker login
docker push zorang/mycron
docker ps -a
docker run -i -t -v /home/ec2-user:/ec2-user zorang/mycron

for i in `docker ps -a | awk ' { print $1 } ' | grep -v CONT`; do docker rm $i; done
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rm $(docker kill $(docker ps -aq)))
docker volume rm $(docker volume ls -q)
docker rmi $(docker images -q)
docker run -p 2222:22  -v /home/ec2-user:/ec2-user zorang/mycron
ssh -p 2222 zorang@127.0.0.1
docker run -d ...
docker exec containername ps

Create docker container from VM:

tar --numeric-owner \
    --exclude=/proc \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/var/cache \
    --exclude=/usr/share/doc \
    --exclude=/tmp \
    --exclude=/var/log \
    -zcvf /mnt/rhel7-base.tar.gz 
tar --numeric-owner -cj --to-stdout . |docker import - nginx-image
cd /usr/x86_64-docker-linux-gnu/ && tar --numeric-owner -cj --to-stdout . --exclude=./{proc,sys,tmp/portage} .|docker import - gentoo-image
tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
cat centos6-base.tar | docker import - centos6-base
docker run -i -t centos6-base cat /etc/redhat-release
docker run --init # run an init inside containers to forward signals and reap processes

Dockerise Node.js app:
https://semaphoreci.com/community/tutorials/dockerizing-a-node-js-web-application

To run a full operating system in a container create the following Dockerfile:
FROM fedora:25
CMD /sbin/init

Then build and start the container and enter a shell inside it to explore the services running inside it:
docker build -t os .
docker run -d --privileged --name os os

docker exec -it os bash

No comments:

Post a Comment