Esempio n. 1
0
        public async Task Install()
        {
            //docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik

            var traefikDir = cidataDir + "/traefik";

            if (!Directory.Exists(traefikDir))
            {
                Directory.CreateDirectory(traefikDir);
            }
            File.WriteAllText(Path.Combine(traefikDir, "traefik.toml"), EmbeddedResourcesCiLib.TraefikToml.ReadAsText());



            await dockerWrapper.CreateImageIfNotFound(traefikRepoTag);

            var traefikImage = await dockerWrapper.FindImage(traefikRepoTag);


            using (var client = this.dockerWrapper.GetClient())
            {
                var infraCidata = "/cidata";
                var p           = new CreateContainerParameters();
                p.Image = traefikImage.ID;

                p.ExposedPorts = new Dictionary <string, EmptyStruct>();
                p.ExposedPorts.Add("8080/tcp", new EmptyStruct());

                p.Name = containerName;

                p.HostConfig = new DockerHostConfig()
                               .Bind(infraCidata + "/traefik/traefik.toml:/etc/traefik/traefik.toml")
                               .PortBinding("0.0.0.0", "8080", "8080/tcp")
                               .PortBinding("0.0.0.0", "80", "80/tcp")
                               .RestartAlways()
                               .GetConfig();

                var response = await client.Containers.CreateContainerAsync(p);


                var p2 = new ContainerStartParameters();
                await client.Containers.StartContainerAsync(response.ID, p2);
            }

            // Traffic network so that traefic can communicate with other containers
            using (var client = this.dockerWrapper.GetClient())
            {
                //client.Networks.CreateNetworkAsync();
            }
        }
Esempio n. 2
0
 public async Task InitVaultImage()
 {
     await dockerWrapper.CreateImageIfNotFound(repoTag);
 }
Esempio n. 3
0
        public async Task Install()
        {
            // Image is alrady used by the mirror registry
            await dockerWrapper.CreateImageIfNotFound(repoTag);

            var registryImage = await dockerWrapper.FindImage(repoTag);

            using (var client = dockerWrapper.GetClient())
            {
                /*
                 * https://docs.docker.com/registry/deploying/#get-a-certificate
                 *
                 * docker run -d \
                 * --restart=always \
                 *
                 * docker run \
                 * --name privateregistry \
                 * -v ${HOME}/cidata/privateregistry/var/lib/registry:/var/lib/registry \
                 * -v ${HOME}/cidata/privateregistry/certs:/certs \
                 * -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
                 * -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/privateregistry.mynetwork.local.crt \
                 * -e REGISTRY_HTTP_TLS_KEY=/certs/privateregistry.mynetwork.local.key \
                 * -p 5443:443 \
                 * registry:2
                 */

                // copy tls keys
                shellHelper.Bash($"rm -rf {cidataDir}/privateregistry/certs");
                shellHelper.Bash($"mkdir -p {cidataDir}/privateregistry/certs");
                shellHelper.Bash($"cp {cidataDir}/tls/privateregistry.mynetwork.local.* {cidataDir}/privateregistry/certs");


                // Registry data outside the container in /privateregistry
                shellHelper.Bash("mkdir -p {cidataDir}/privateregistry/var/lib/registry");


                var infraCidata = "/cidata";
                var p           = new CreateContainerParameters();
                p.Image = registryImage.ID;

                p.ExposedPorts = new Dictionary <string, EmptyStruct>();
                p.ExposedPorts.Add("443/tcp", new EmptyStruct());

                p.Env = new List <string>()
                {
                    "REGISTRY_HTTP_ADDR=0.0.0.0:443",
                    "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/privateregistry.mynetwork.local.crt",
                    "REGISTRY_HTTP_TLS_KEY=/certs/privateregistry.mynetwork.local.key",
                    "REGISTRY_STORAGE_DELETE_ENABLED=true"
                };
                p.Name = "privateregistry";

                p.HostConfig = new DockerHostConfig()
                               .Bind($"{infraCidata}/privateregistry/var/lib/registry:/var/lib/registry")
                               .Bind($"{infraCidata}/privateregistry/certs:/certs")
                               .PortBinding("0.0.0.0", "5443", "443/tcp")
                               .RestartAlways()
                               .GetConfig();

                var response = await client.Containers.CreateContainerAsync(p);

                var p2 = new ContainerStartParameters();
                await client.Containers.StartContainerAsync(response.ID, p2);
            }
        }