仅复制Dockerfile中Git跟踪的文件

时间:2018-08-05 09:50:49

标签: git docker

我想知道如何在Dockerfile中实现以下目标(不使用.dockerignore):

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators, FormArray, ValidatorFn, ValidationErrors, FormBuilder } from '@angular/forms';
import { Adresse } from './adresse';
import { addresseValidator } from '../valid-address.directive';

@Component({
  selector: 'app-adresse',
  templateUrl: './adresse.component.html',
  styleUrls: ['./adresse.component.css']
})
export class AdresseComponent implements OnInit {
  addressForm: FormGroup;
  label: FormControl;
  rue: FormControl;
  nomRue: FormControl;
  list: Adresse[] = [];
  adresse: Adresse = new Adresse();
  fa: FormArray;

  listAddres: Adresse[] = [
    { label: 'labs1', rue: '2', nomRue: 'allerte' },
    { label: 'Olabel', rue: '3', nomRue: 'allerte' }
  ];
  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {
    this.addressForm = new FormGroup({
      adresses: this.formBuilder.array([])
    });
    this.initFormArray(this.listAddres);
  }
  createForms(adresse): FormGroup {
    let formGroup: FormGroup = new FormGroup(
      {
        label: new FormControl(adresse.label),
        rue: new FormControl(adresse.rue),
        nomRue: new FormControl(adresse.nomRue)
      },
      {
        validators: addresseValidator
      }
    );
    return formGroup;
  }

  initFormArray(adresse: Adresse[]) {
    const formArray = this.addressForm.get('adresses') as FormArray;
    adresse.map(item => {
      formArray.push(this.createForms(item));
    });
    this.addressForm.setControl('adresses', formArray);
  }

  get adresses() {
    return this.addressForm.get('adresses') as FormArray;
  }

  add() {
    this.adresses.push(this.createForms(this.adresse));
  }

  finish() {
    this.list = this.addressForm.value
    console.log(this.list);
  }
}

也就是说,仅复制在Git存储库中跟踪的文件。当然,上面的方法不起作用,因为Docker不以这种方式执行shell命令,但是可能有类似的可能吗?

这是一个相当普遍的问题。例如,在AWS Elastic Beanstalk平台中,使用COPY `git ls-tree -r HEAD --name-only` ./ https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html)对其进行解析。同样,Heroku基于Git push(同样,仅在Git文件中进行跟踪)构建其“子弹”。

综上所述,我想将应用程序打包为Docker映像,并且我不想包含所有未跟踪的文件以及被Git忽略的文件。 我希望避免将git archive -v -o myapp.zip --format=zip HEAD文件复制到.gitignore文件中。

1 个答案:

答案 0 :(得分:1)

您可以按照建议使用Unit将应用存档:

git archive

然后从存档文件构建您的docker映像:

git archive -v -o myapp.tar.gz --format=tar.gz HEAD