golang 을 사용 하여 docker api 개발

3357 단어 go.
Docker 명령:
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/infotip : 제 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 SDK 획득go get github.com/docker/docker/client
  • version 에 관 한 문제 API 의 version 은 설치 한 docker 버 전에 달 려 있 습 니 다.타 임 스 버 전 을 실행 하 는 중 오류 가 발생 하면 변 수 를 설정 합 니 다. DOCKER_API_VERSION 은 오류 알림 에 지 정 된 버 전 으로 구체 적 인 버 전 을 홈 페이지 에 표시 할 수 있 습 니 다
  • 개발 코드(1)연결 코드:(i)기본 환경 변수 설정 으로 새로운 연결 생 성
  • 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 다음 대답 의 코드 는 사용 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기