Переглянути джерело

Only build database images at time of use

Also, with --network=host we don't have to expose ports
in the dockerfiles ^_^
Mike Smith 7 роки тому
батько
коміт
3490c5e576

+ 0 - 2
frameworks/Java/gemini/gemini-mysql.dockerfile

@@ -13,6 +13,4 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini-mysql.conf GeminiHello.conf;
 
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
 
-EXPOSE 8080
-
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 0 - 2
frameworks/Java/gemini/gemini-postgres.dockerfile

@@ -13,6 +13,4 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini-postgres.conf GeminiHello.conf;
 
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
 
-EXPOSE 8080
-
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 0 - 2
frameworks/Java/gemini/gemini.dockerfile

@@ -10,6 +10,4 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini.conf GeminiHello.conf;
 
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
 
-EXPOSE 8080
-
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 17 - 0
toolset/benchmark/benchmarker.py

@@ -411,6 +411,23 @@ class Benchmarker:
     ############################################################
     ############################################################
     ############################################################
     ############################################################
     def __setup_database_container(self, database, port):
     def __setup_database_container(self, database, port):
+        def __scp_string(files):
+            scpstr = ["scp", "-i", self.database_identity_file]
+            for file in files:
+                scpstr.append(file)
+            scpstr.append("%s@%s:~/" % (self.database_user, self.database_host))
+            return scpstr
+
+        dbpath = os.path.join(self.fwroot, "toolset", "setup", "linux", "docker", "databases", database)
+        dbfiles = ""
+        for dbfile in os.listdir(dbpath):
+            dbfiles += "%s " % os.path.join(dbpath,dbfile)
+        p = subprocess.Popen(__scp_string(dbfiles.split()),
+        stdin=subprocess.PIPE)
+        p.communicate()
+        p = subprocess.Popen(self.database_ssh_string, shell=True, stdin=subprocess.PIPE)
+        p.communicate("docker build -f ~/%s.dockerfile -t %s ~/" % (database, database))
+
         p = subprocess.Popen(self.database_ssh_string, stdin=subprocess.PIPE, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         p = subprocess.Popen(self.database_ssh_string, stdin=subprocess.PIPE, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         (out,err) = p.communicate("docker run -d --rm -p %s:%s --network=host %s" % (port,port,database))
         (out,err) = p.communicate("docker run -d --rm -p %s:%s --network=host %s" % (port,port,database))
         return out.splitlines()[len(out.splitlines()) - 1]
         return out.splitlines()[len(out.splitlines()) - 1]

+ 1 - 40
toolset/initializer.py

@@ -29,10 +29,6 @@ def initialize(args):
   # set up database software
   # set up database software
   if not __init_database(fwroot, dbuser, dbhost, dbiden, args.quiet) and not args.quiet:
   if not __init_database(fwroot, dbuser, dbhost, dbiden, args.quiet) and not args.quiet:
     return __print_failure()
     return __print_failure()
-  else:
-    # set up database docker images
-    if not __build_database_docker_images(fwroot, dbuser, dbhost, dbiden, args.quiet) and not args.quiet:
-      return __print_failure()
 
 
 def __print_failure():
 def __print_failure():
   print("""
   print("""
@@ -53,13 +49,6 @@ def __print_failure():
 
 
 def __ssh_string(user, host, identity_file):
 def __ssh_string(user, host, identity_file):
   return ["ssh", "-T", "-o", "StrictHostKeyChecking=no", "%s@%s" % (user, host), "-i", identity_file]
   return ["ssh", "-T", "-o", "StrictHostKeyChecking=no", "%s@%s" % (user, host), "-i", identity_file]
-
-def __scp_string(user, host, identity_file, files):
-  scpstr = ["scp", "-i", identity_file]
-  for file in files:
-    scpstr.append(file)
-  scpstr.append("%s@%s:~/" % (user, host))
-  return scpstr
   
   
 def __check_connection(user, host, identity_file, app_host):
 def __check_connection(user, host, identity_file, app_host):
   ''' 
   ''' 
@@ -113,32 +102,4 @@ def __init_database(fwroot, user, host, identity_file, quiet):
       p = subprocess.Popen(__ssh_string(user, host, identity_file), 
       p = subprocess.Popen(__ssh_string(user, host, identity_file), 
         stdin=subprocess.PIPE)
         stdin=subprocess.PIPE)
     p.communicate(remote_script)
     p.communicate(remote_script)
-    return p.returncode == 0
-
-def __build_database_docker_images(fwroot, user, host, identity_file, quiet):
-  '''
-  Transfers all the files required by each database to the database machine and
-  builds the docker image for each on the database machine.
-  '''
-  if not quiet:
-    print("INSTALL: Building database docker images")
-
-  returncode = 0
-  databases_path = os.path.join(fwroot, "toolset", "setup", "linux", "docker", "databases")
-  for database in os.listdir(databases_path):
-    dbpath = os.path.join(databases_path, database)
-    dbfiles = ""
-    for dbfile in os.listdir(dbpath):
-      dbfiles += "%s " % os.path.join(dbpath,dbfile)
-    p = subprocess.Popen(__scp_string(user, host, identity_file, dbfiles.split()),
-      stdin=subprocess.PIPE)
-    p.communicate()
-    returncode += p.returncode
-
-    if p.returncode == 0:
-      p = subprocess.Popen(__ssh_string(user, host, identity_file),
-        stdin=subprocess.PIPE)
-      p.communicate("docker build -f ~/%s.dockerfile -t %s ~/" % (database, database))
-      returncode += p.returncode
-
-  return returncode == 0
+    return p.returncode == 0

+ 0 - 2
toolset/setup/linux/docker/databases/mysql/mysql.dockerfile

@@ -37,6 +37,4 @@ RUN service mysql start && \
     mysqladmin -uroot -psecret flush-hosts && \
     mysqladmin -uroot -psecret flush-hosts && \
     mysql -uroot -psecret < create.sql
     mysql -uroot -psecret < create.sql
 
 
-EXPOSE 3306
-
 CMD ["mysqld"]
 CMD ["mysqld"]

+ 0 - 1
toolset/setup/linux/docker/databases/postgres/postgres.dockerfile

@@ -45,7 +45,6 @@ RUN service postgresql start && \
     psql < create-postgres-database.sql && \
     psql < create-postgres-database.sql && \
     psql -q hello_world < create-postgres.sql
     psql -q hello_world < create-postgres.sql
 
 
-EXPOSE 5432
 ENV PATH $PATH:/usr/lib/postgresql/$PG_VERSION/bin
 ENV PATH $PATH:/usr/lib/postgresql/$PG_VERSION/bin
 ENV PGDATA=/var/lib/postgresql/data 
 ENV PGDATA=/var/lib/postgresql/data