获取Vmware之旅并转到Docker,如何正确设置Dockerfile或cointainer?

我是一名PHP开发人员,所以大部分时间testing我正在处理的任何应用程序是:

  • 创build一个Vmware虚拟机并安装一个完整的操作系统:大部分时间我喜欢使用CentOS
  • 安装VM上的所有内容:Apache和模块,PHP和模块以及MySQL或MariaDB

任何时候我从头开始一个新的虚拟机,我有几个步骤运行:

# Install EPEL and Remi Repos wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm # Install Apache, PHP and its dependencies yum -y install php php-common php-cli php-fpm php-gd php-intl php-mbstring php-mcrypt php-opcache php-pdo php-pear php-pecl-apcu php-imagick php-pecl-xdebug php-pgsql php-xml php-mysqlnd php-pecl-zip php-process php-soap # Start Apache on 235 run level chkconfig --levels 235 httpd on # Setup MariaDB repos nano /etc/yum.repos.d/MariaDB.repo # Write this inside the MariaDB.repo file [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 # Install MariaDB yum -y install MariaDB MariaDB-server # Start service service mysql start # Start MariaDB on run level 235 chkconfig --levels 235 mysql on # Setup MariaDB (this is interactive) /usr/bin/mysql_secure_installation # A few more steps 

这是令人讨厌的任务,我需要一直这样做(当我把虚拟机尝试新事物并且在这里和那里改变的时候,所以这里是Docker,我认为在这里保存的地方。 Docker和我通过运行docker run -it centos拉一个CentOS镜像,但是这只是一个bash shell和一个基本的CentOS镜像,所以我的任务是安装和设置所有东西。

这里是我对Docker的怀疑,以及如何处理这个重复和常见的任务:

  • 我应该创build一个Dockerfile(这是我的第一个Dockerfile,所以也许顺序是不正确的,或者我完全错了)与下面的内容,并把所有的重复任务内run-setup.sh文件?

     FROM centos:latest MAINTAINER MyName <MyEmail> RUN yum -y update && yum clean all ADD run-setup.sh /run-setup.sh RUN chmod -v +x /run-setup.sh CMD ["/run-setup.sh"] EXPOSE 80 
  • 我应该像在VM上一样手动执行重复任务吗?

  • /usr/bin/mysql_secure_installation命令是完整的交互式的,因为我需要回答几个问题并设置密码,如何处理这个或者其他的交互?
  • 更好的主意?

我将开始回答你的问题:

  • 是的,你可以从一个Dockerfile开始。 不过,我build议你直接使用命令到文件中,以便将来更容易维护。 一个例如可能是来自github的apache的Dockerfile 。

  • 重复的任务,没有。 您可以通过将图像推送到公共注册中心(如docker中心)来保存容器的图像 ,或者您可以托pipe一个专用的容器,该容器本身可以是docker容器。

  • 互联网的积极性应该以某种方式与命令行选项,如果可能的话, bash读取或传递一个文件。我不认为这是一个直接的答案。

  • 更好的想法,通常的模式是将Dockerfile托pipe在github或bitbucket公共存储库中,然后针对docker hubconfiguration自动化构build 。 他们都来免费:)

docker中心还有许多现场工作的例子。 开始search一个图像,select最stream行的/官方的,然后你必须有链接到Dockerfile

让我知道事情的后续。