Changeset 1495 in genappalpha for languages/docker/build_docker_footer.pl


Ignore:
Timestamp:
Jul 23, 2018, 11:15:19 AM (3 years ago)
Author:
ehb
Message:

Docker runs locally thru genapp with run directory mounted on container

File:
1 edited

Legend:

Unmodified
Added
Removed
  • languages/docker/build_docker_footer.pl

    r1494 r1495  
    22
    33foreach my $mod ( keys %dependencies ) {
    4     print "checking $mod\n";
    5     if ( $dependencies{ $mod } =~ /^__dependencies__/ ) {
     4    my $menu = $menus{ $mod };
     5    print "checking $menu:$mod\n";
     6    if ( $dependencies{ $mod } =~ /^_{2}dependencies__/ ) {
    67        print "no dependencies\n";
    78        $error .= "Module '$mod' : no dependencies defined, can not create docker container.\n";
     
    3637        my $v = $$entry{$k};
    3738        $k = lc( $k );
    38         print "k $k\n";
    3939        if ( ref( $v ) ne 'ARRAY' ) {
    4040            my @v = ( $v );
    4141            $v = \@v;
    4242        }
    43         print "v " . ref( $v ) . "\n";
    4443        # create command to build and post (?) dockerfile
    4544
    4645        for ( my $j = 0; $j < @$v; ++$j ) {
    47             print "\$v[$j] = $$v[$j]\n";
    4846            my $val = $$v[$j];
    4947            if ( length( ref( $val ) ) ) {
     
    5250                next;
    5351            }
    54             print "length ref val = " . length( ref( $val ) ) . "\n";
    5552            if ( $k eq 'base' ) {
    5653                if ( $hasbase ) {
     
    6057                }
    6158                $out .= "FROM $val\n";
    62                 $out .= "WORKDIR $workdir\n";
     59                $out .= "WORKDIR $bindir\n";
    6360                $has_base++;
    6461                next;
     
    6764                $warn .= "No 'base' entry found in first position, defaulting to 'ubuntu'\n";
    6865                $out .= "FROM ubuntu\n";
    69                 $out .= "WORKDIR $workdir\n";
     66                $out .= "WORKDIR $bindir\n";
    7067                $has_base++;
    7168                next;
     
    8683                $dest =~ s/^.*\///g;
    8784                $out .= "COPY $dest $dest\n";
     85                $val = "$executable_path/$val" if $val !~ /^\//;
    8886                push @copys, $val;
    8987                next;
     
    105103    # add CMD
    106104
    107     $out .= "CMD [\"./$$modjson{'executable'}\"]\n";
     105    ## always run in $rundir ?
     106    $out .= "WORKDIR $rundir\n";
     107
     108    ## straight form:
     109    ## $out .= "CMD [\"$bindir/$$modjson{'executable'}\"]\n";
     110
     111    ## abaco MSG form:
     112    $out .= "CMD $bindir/$$modjson{'executable'} `echo \$MSG`\n";
    108113
    109114    # write dockerfile
    110     if ( !-d $mod ) {
    111         if ( -e $mod ) {
    112             $error .= "File $mod exists in output folder, but it not directory\n";
     115    if ( !-d $menu ) {
     116        if ( -e $menu ) {
     117            $error .= "File $menu exists in output folder, but is not a directory\n";
    113118            next;
    114119        }
    115         if ( !mkdir $mod ) {
    116             $error .= "Could not create subdir $mod $!\n";
     120        if ( !mkdir $menu ) {
     121            $error .= "Could not create subdir $menu $!\n";
     122            next;
     123        }
     124    }
     125
     126    my $destdir = "$menu/$mod";
     127    if ( !-d $destdir ) {
     128        if ( -e $destdir ) {
     129            $error .= "File $destdir exists in output folder, but is not a directory\n";
     130            next;
     131        }
     132        if ( !mkdir $destdir ) {
     133            $error .= "Could not create subdir $destdir $!\n";
    117134            next;
    118135        }
    119136    }
    120137       
    121     my $df = "$mod/Dockerfile";
     138    my $df = "$destdir/Dockerfile";
    122139    my $fh;
    123140    if ( !( open $fh, ">$df" ) ) {
     
    129146
    130147    # do copies
    131     $cmd = "cp " . ( join " ", @copys ) . " $mod/";
     148    $cmd = "cp " . ( join " ", @copys ) . " $destdir/";
    132149    print "$cmd\n";
    133     print `$cmd`;
     150    system( $cmd );
     151
     152    # build containers
     153    $cmd = "cd $destdir && docker build -t genapp___application___${menu}_${mod} .";
     154    print "$cmd\n";
     155    system( $cmd );
    134156}
    135157   
Note: See TracChangeset for help on using the changeset viewer.