示例#1
0
        public async Task <bool> BuildImageAsync(BuildImageParameters buildParams, CancellationToken ct)
        {
            var buildOptions = $"-t {buildParams.Image}:{buildParams.Tag} {Path.GetDirectoryName(buildParams.DockerfilePath)}";
            var output       = await BuildImageAsync(buildOptions, ct);

            return(output.ContainsIgnoreCase($"Successfully tagged {buildParams.Image}:{buildParams.Tag}"));
        }
        public async Task BuildImageTest()
        {
            var dockerFileContent = @"FROM ubuntu:16.10
RUN apt-get update && apt-get upgrade -y";
            var tempDirectory     = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            Directory.CreateDirectory(tempDirectory);
            var dockerFile = Path.Combine(tempDirectory, "Dockerfile");

            File.WriteAllText(dockerFile, dockerFileContent);
            var svc   = new WindowsDockerService(_services);
            var param = new BuildImageParameters(dockerFile, "rtvs-test-build-image", "latest");

            (await svc.BuildImageAsync(param, CancellationToken.None)).Should().BeTrue();
            Directory.Delete(tempDirectory, true);
        }
示例#3
0
        public async Task <IContainer> CreateContainerFromFileAsync(BuildImageParameters buildParams, CancellationToken ct)
        {
            await TaskUtilities.SwitchToBackgroundThread();

            var images = await ListImagesAsync(true, ct);

            if (!images.Any(i => i.Name.EqualsOrdinal(buildParams.Image) && i.Tag.EqualsOrdinal(buildParams.Tag)))
            {
                var buildOptions = $"-t {buildParams.Image}:{buildParams.Tag} \"{Path.GetDirectoryName(buildParams.DockerfilePath)}\"";
                await BuildImageAsync(buildOptions, ct);
            }

            var createOptions = Invariant($"-p {buildParams.Port}:5444 --name {buildParams.Name} {buildParams.Image}:{buildParams.Tag} rtvsd");
            var containerId   = await CreateContainerAsync(createOptions, ct);

            return(await GetContainerAsync(containerId, ct));
        }
示例#4
0
        public async Task <IContainer> CreateContainerFromFileAsync(BuildImageParameters buildParams, CancellationToken ct)
        {
            await TaskUtilities.SwitchToBackgroundThread();

            var(dockerFile, imageName, imageTag, imageParams, containerName, containerPort) = buildParams;
            var images = await ListImagesAsync(true, ct);

            if (!images.Any(i => i.Name.EqualsOrdinal(imageName) && i.Tag.EqualsOrdinal(imageTag)))
            {
                var buildArgs    = string.Join(" ", imageParams.Select(p => $"--build-arg {p.Key}={p.Value}"));
                var buildOptions = $"-t {imageName}:{imageTag} {buildArgs} \"{Path.GetDirectoryName(dockerFile)}\"";
                await BuildImageAsync(buildOptions, ct);
            }

            var createOptions = Invariant($"-p {containerPort}:5444 --name {containerName} {imageName}:{imageTag} rtvsd");
            var containerId   = await CreateContainerAsync(createOptions, ct);

            return(await GetContainerAsync(containerId, ct));
        }