1) Вы не развертываете приложение Service Fabric в Docker Hub, вы развертываете образы контейнеров, не пытаетесь связать SF-приложение с процессом, просто думаете как обычный образ Docker.SF-приложение - это процесс, который происходит после.
Что касается управления версиями, попробуйте сравнить этот образ докера с неконтейнерным приложением, неконтейнерным приложением, которое вы бы создали на сервере CI (т. Е. VSTS).(Jenkins), а затем создайте исполняемое \ развертываемое приложение, которое может быть помещено, например, в zip-файл, и этот файл будет иметь имя, соответствующее версии, как правило, такое же, как сборка, сгенерировавшая его, образ докера будет иметь аналогичноепроцесс, но разница в том, что прежде чем поместить файлы в zip-файл, теперь вы сохраняете в формате изображения.
Каждое изображение будет иметь тег, который очень похож на версию, которую вы имели быдля неконтейнерного приложения, когда вы развертываете изображение, вы идентифицируете изображение по тегу, указанному при сборке изображения, а если вы не укажете одно, для него будет установлено последнее (чего следует избегать, я опишу, почемув обновлении ниже).
1a) Обновление
Я делаюЕсли вы не понимаете вашу озабоченность по поводу создания изображений, вы можете легко создать и опубликовать изображение в Docker Hub с помощью 3 простых команд (при условии, что у вас уже есть учетная запись реестра Docker):
docker build -t $(dockerId)/$(imageName) //Create the image
docker login -u $(dockerId) -p $(pswd) //Authenticate to you docker registry account
docker push $(dockerId)/$(imageName) //Push the new image
Процесстак же, как вы делали бы с образом, отличным от SF, проверьте доки здесь , описывающие, как делать в реестре Docker без сервисной фабрики, и здесь как вы используете реестр Azure.
.
2) Вы делаете то же самое, что делаете в кластере Azure и в любом другом приложении SF, ссылка, которую вы предоставили, четко описывает это.
2a) Обновление
Чтобы обновить образы контейнера, вы должны изменить ServiceManifest.xml
на тег новой версии образа вашего контейнера.
К сожалению,в документах не очень ясно, что в большинстве примеров используется неявный тег, который является последним, когда вы не определяете тег, он всегда будет считаться самым последним, а если изображение изменяется, он не распознаетэто потому, что тег один и тот же.
Вы всегда должны явно определять тег для своей службы, как в этом примере, V1
- это тег для MyImageName
:
<ServiceManifest Name="mySvcPkg" Version="1.0.0" ...
<ServiceTypes>
<StatelessServiceType ServiceTypeName="mySvcType"..
</StatelessServiceType>
</ServiceTypes>
<CodePackage Name="code" Version="1.0.0">
<EntryPoint>
<ContainerHost>
<ImageName>acrName.azurecr.io/MyImageName:v1</ImageName>
<Commands></Commands>
</ContainerHost>
</EntryPoint>
</CodePackage>
<Resources>
<Endpoints>
<Endpoint Name="myEndpoint" UriScheme="http" Port="80" Protocol="http"/>
</Endpoints>
</Resources>
</ServiceManifest>
Когда вы обновляете образ, вы добавляете в него новый тег, например V2
, также обновляет версию ServiceManifest, чтобы показать SF, что пакет услуг изменился:
<ServiceManifest Name="mySvcPkg" Version="2.0.1" ...
<ServiceTypes>
<StatelessServiceType ServiceTypeName="mySvcType"..
</StatelessServiceType>
</ServiceTypes>
<CodePackage Name="code" Version="2.0.0">
<EntryPoint>
<ContainerHost>
<ImageName>acrName.azurecr.io/MyImageName:v2</ImageName>
<Commands></Commands>
</ContainerHost>
</EntryPoint>
</CodePackage>
<Resources>
<Endpoints>
<Endpoint Name="myEndpoint" UriScheme="http" Port="80" Protocol="http"/>
</Endpoints>
</Resources>
</ServiceManifest>
Относительно аутентификации для частногохранилище, вы добавляете его в ApplicationManifest.xml
, в ServiceManifestImport:
<ServiceManifestImport>
...
<Policies>
<ContainerHostPolicies CodePackageRef="Code">
<RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
<PortBinding ContainerPort="80" EndpointRef="Guest1TypeEndpoint"/>
</ContainerHostPolicies>
</Policies>
...
</ServiceManifestImport>
Когда SF пытается загрузить изображение в хранилище, определенное в ServiceManifest.xml
, оно будет использовать учетные данные, предоставленные в ApplicationManifest.xml
для аутентификации в реестре.