7일 동안 Go로 docker 쓰기 (완결편)
8079 단어 docker
용기 정지
이전 절에서 우리는
config.json
를 통해 용기의 기본 정보를 기록했다. 그 중 하나status
필드는 용기의 상태를 기록하는 데 사용되고, 하나의PID 필드는 용기를 기록하는 init
프로세스가 숙주 호스트에 있는Pid는 용기를 정지한다. 즉, 이pid 프로세스를 죽이고 status 상태를 업데이트하면 된다.// ,
func StopContainer(containerName string) {
info, err := getContainerInfo(containerName)
if err != nil {
logrus.Errorf("get container info, err: %v", err)
return
}
if info.Pid != "" {
pid, _ := strconv.Atoi(info.Pid)
//
if err := syscall.Kill(pid, syscall.SIGTERM); err != nil {
logrus.Errorf("stop container, pid: %d, err: %v", pid, err)
return
}
//
info.Status = common.Stop
info.Pid = ""
bs, _ := json.Marshal(info)
fileName := path.Join(common.DefaultContainerInfoPath, containerName, common.ContainerInfoFileName)
err := ioutil.WriteFile(fileName, bs, 0622)
if err != nil {
logrus.Errorf("write container config.json, err: %v", err)
}
}
}
컨테이너 삭제
우선 우리는 실행 중인 용기, 즉
status
인 Running
용기를 삭제할 수 없다는 것을 명확히 해야 한다. 따라서 용기를 삭제하기 전에 반드시 용기를 멈추고 이 용기가 생성한 일련의 폴더를 삭제하면 된다.//
func RemoveContainer(containerName string) {
info, err := getContainerInfo(containerName)
if err != nil {
logrus.Errorf("get container info, err: %v", err)
return
}
//
if info.Status != common.Stop {
logrus.Errorf("can't remove running container")
return
}
dir := path.Join(common.DefaultContainerInfoPath, containerName)
err = os.RemoveAll(dir)
if err != nil {
logrus.Errorf("remove container dir: %s, err: %v", dir, err)
return
}
}
여기까지 저희'7일 동안 고로 docker를 써요'시스템 글이 끝났습니다. 마지막으로 여러분의 관심과 지지에 감사드립니다!기사의 모든 원본 코드가 GitHub에서 시작되었습니다. 여기를 클릭하여 보십시오
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swarm의 도커 비밀이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 사용 방법을 보여주고자 합니다. Docker 기술에 대한 기본 지식 Docker Swarm 오케스트레이터에 대한 기본 지식 "Docker Swarm ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.