golang 을 사용 하여 docker api 개발
3357 단어 go.
docker 를 사용 하면 docker build 와 같은 docker 명령 을 직접 진행 할 수 있 습 니 다.
2 Docker 원 격 API
또한 reote api 방식 으로 상호작용 을 할 수 있 습 니 다.다음 과 같이 설정 하 는 방법 을 소개 합 니 다.
개발 환경:centos 7,docker 17.11
docker 오픈 api:
파일 수정:/usr/lib/systemd/system/docker.service 의 ExecStart
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H unix:///var/run/docker.sock -H tcp://127.0.0.1:1234
$systemctl daemon-reload
$systemctl restart docker.service
설정 에 성공 하면 로 컬 접근 이 가능 합 니 다:
curl http://localhost:1234/info
tip : 제 localhost ip 은 127.0.0.1 이 라 서 ExecStart 에 적 힌 것 은...tcp://127.0.0.1:1234 포트 번호 1234 는 무 작위 로 지정 되 어 있 습 니 다.
구체 적 인 명령 소개 글 보기:http://dockone.io/article/109
3 Docker Engine SDK 및 API
다음 소개:Develop using the Docker Engine SDK and API(docker 의 SDK 와 API 를 통 해 docker 개발)
https://docs.docker.com/develop/sdk/(docker 공식 링크)
현재 사용 하고 있 는 코드 를 기반 으로 golang 입 니 다.golang 의 용법 만 소개 합 니 다.
go get github.com/docker/docker/client
cli, err := client.NewEnvClient()
if err != nil {
panic(err)
}
(ii)client.NewClient()사용 하기
구체 적 인 문서 주소https://godoc.org/github.com/moby/moby/client(docker 프로젝트 가 moby 로 변경 되 었 습 니 다)
func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error)
이 인 터 페 이 스 는 사용자 가 지정 한 host,version 등 매개 변 수 를 통 해 새로운 연결 을 만 들 수 있 습 니 다(2)push 미 러 는 자신 이 만 든 로 컬 창 고 를 사용 하고 인증 이 설정 되 어 있 지 않 으 면 types.AuthConfig 의 Username 과 Password 값 을 비 울 수 있 습 니 다.
authConfig := types.AuthConfig{Username: "username", Password: "password",}
encodedJSON, err := json.Marshal(authConfig)
if err != nil {
panic(err)
}
authStr := base64.URLEncoding.EncodeToString(encodedJSON)
out, err := cli.ImagePush(ctx, "alpine", types.ImagePushOptions{RegistryAuth: authStr})
if err != nil {
panic(err)
}
(3)빌 드 미 러
https://docs.docker.com/engine/api/v1.32/#operation/ImageBuild
미 러 를 구축 하려 면 필요 한 코드 파일 을 tar 형식의 압축 패키지 로 포장 해 야 합 니 다.
client 에 customHttpHeades 를 설정 합 니 다.
새로 클 라 이언 트 를 만 들 때 NewEnvClient 방법 을 사용한다 면 코드 를 추가 해 야 합 니 다.
cli.SetCustomHTTPHeaders(map[string]string{"Content-type":"application/x-tar"})
새로 클 라 이언 트 를 만 들 때 NewClient 방법 을 사용 하면 새로 만 들 때 인자 httpHeaders 값 은
map[string]string{"Content-type":"application/x-tar"}
입 니 다.유사 하 다
cli,_ := client.NewClient(host,version,nil,map[string]string{"Content-type":"application/x-tar"})
다음 미 러 구축:
사용 하 는 방법 은:
func (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error)
그 중에서 buildContext 는 코드 의 압축 패키지 입 니 다.
BuildContext, err := os.Open("/path/to/tar/archieve.tar")
문제 가 발생 하면 참고 할 수 있 습 니 다.https://stackoverflow.com/questions/39893116/docker-client-build-error 다음 대답 의 코드 는 사용 할 수 있 습 니 다.