Dockerfile как правильный способ подготовки образов для Docker
Простой вариант:
# mkdir /docker_files
# vi /docker_files/Dockerfile
FROM centos:centos6
# SETUP ROOT PASSWORD
RUN echo 'root:password' | chpasswd
# install SSHD
RUN yum install -y openssh-server openssh-clients
===========
# docker build -t centos6/server /docker_files
centos6 – название репозитория, где будет храниться образ,
server – имя образа.
Последний параметр — путь к папке с Dockerfile.
Если вы не укажете название образа, он автоматически получит название latest.
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos6/server latest 859ee3da3485 12 seconds ago 249.7 MB
# docker run -i -t \
--name="centos_6.5_serv" \
--hostname="serv" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.22/24" \
centos6/server /bin/bash
Вариант посложнее:
Собственно, докер стартует и все вроде как работает. Но нужно при запуске контейнера
руками перестартовывать сервисы. Это достаточно неудобно. Авотоматизировать получилось
постольку поскольку. Не особо пока нужно, но если кото подскажет, как сделать лучше, допишу.
Лучше всего (из того, что было найдено) это описано здесь:
http://stackoverflow.com/questions/25135897/how-to-automatically-start-a-service-when-running-a-docker-container
# cd docker_files
# vi Dockerfile
FROM centos:centos6
# SETUP ROOT PASSWORD
RUN echo 'root:password' | chpasswd
# install SSHD
RUN yum install -y openssh-server openssh-clients
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
##ADD SCRIPTS IN DOCKER IMAGE
ADD ssh.sh /start.sh
RUN chmod +x /*.sh
# OPEN PORT 22 FOR ENABLING SSH
EXPOSE 22
# START ssh services during startup
ENTRYPOINT ["/start.sh"]
=============
# vi /docker_files/start.sh
### SHELL SCRIPT TO BE CALLED ON CONTAINER START UP #############
#!/bin/bash
/sbin/service sshd restart && tail -F /var/log/messages
==============
Если стереть tail -F контейнер отработает команду по перестартовке сервисов и завершится. Поэтому приходится делать так.
==============
# docker build -t centos6/server .
# docker run -i -t \
--name="centos_6.5_serv" \
--hostname="serv" \
centos6/server /bin/bash
Почитать:
Погружаемся в Docker: Dockerfile и коммуникация между контейнерами
Dockerfile как правильный способ подготовки образов для Docker
https://github.com/dockerfile/ubuntu/blob/master/Dockerfile
https://github.com/dockerfiles/centos-lamp
http://www.dev2ops.in/provisioning-linux-containers-through-vagrant-docker-plugin/
https://github.com/Krijger/docker-cookbooks