Como carregar containers Docker usando gofn
Primeiro instanciamos a struct BuildOptions que vai informar para o gofn os detalhes do container, como o nome da imagem, por exemplo.
buildOpts := &provision.BuildOptions{ ImageName: "nome da imagem aqui", StdIN: "o que você quer passar no stdin para o container aqui", DoNotUsePrefixImageName: true, }
Depois instanciamos as opções do container, por exemplo, se você quer passar variáveis de ambiente.
containerOpts := &provision.ContainerOptions{}
É uma boa pratica criar um contexto e definir um timeout para ele. No nosso caso, definimos um timeout de cinco segundos. Se o seu container não retornar nesse tempo, o gofn se encarrega de matar ele.
ctx, cancelFunc := context.WithTimeout( context.Background(), time.Duration(5)*time.Second)
Então rodamos o gofn passando nossas opções e pegamos o retorno de stdin, stdout e error, caso exista.
stdout, stderr, err = gofn.Run(ctx, buildOpts, containerOpts)
Por fim, como criamos uma função cancel devido ao nosso contexto de timeout, sempre temos que chamar a função cancel no final.
cancelFunc()
O container
É bem simples fazer containers docker para usar com gofn. Basicamente tudo que você faz com um container normal vai funcionar. Geralmente preferimos mandar e receber informações via stdin, sdtout e stderr porque é uma forma simples e fácil de modificar.
Esse é um exemplo bem simples usando Clojure:
(ns runner.core (:gen-class)) (defn upper [] (print (clojure.string/upper-case (slurp *in*))) (flush)) (defn -main [] (upper))
E agora um exemplo usando Python:
import sys import json import base64 d = json.load(sys.stdin) d["encoded"] = base64.b64encode(d["phrase"].encode('utf-8')).decode('utf-8') json.dump(d, sys.stdout, ensure_ascii=False)
Links mencionados, alguns foram mencionados fora da gravação:
- Código fonte de hoje
- Repositório do gofn
- Repositório do nosso grupo
- E você encontra mais exemplos aqui
- Pagina do grupo de estudos
Nossos encontros ocorrem todas as quintas-feiras às 22h00. Para participar, entre no canal de Go no Slack e procure por #brazil.