docker prune 명령 요약

  • docker system prune -f
    • 종료된(exit 상태의) docker container들을 모두 내리고, 쓸모 없는 image (dangling image)들을 제거

  • docker volume prune -f
    • 참조되지 않는 (현재 사용하지 않는) docker volume을 제거
    • volume의 life-cycle과 container의 life-cycle은 별개, 따라서 스토리지 공간이 모자라 골치 아픈 시스템 관리자 입장에서 매우 유용한 명령

  • docker network prune -f
    • 현재 사용하지 않는 docker network 제거


마이크로 팁, 끝.


Posted by ingee
TAG docker

댓글을 달아 주세요

GOPATH와 module 관련 소식

Golang 의존성 관리 규칙이 바뀔 참이라고 한다. 2019년 8월 golang 1.13과 함께 공식 릴리즈 된다고 하니 그때까지는 지켜보는게 좋겠다.

An intro to dep: How to manage your Golang project dependencies

https://medium.freecodecamp.org/an-intro-to-dep-how-to-manage-your-golang-project-dependencies-7b07d84e7ba5
2018-11-26
  • Golang 툴체인에 의존성 관리 기능이 내장됨
  • dep 도구는 Golang의 공식 의존성 관리 도구가 아님

Go Modules in 2019

https://blog.golang.org/modules2019
2018-12-19
  • 패키지 의존성 관리에 관한 커뮤니티 차원의 토론이 있었음. 향후 패키지 의존성 관리를 위해 module 개념을 도입할 것임. module 개념이 GOPATH 사용을 대치할 것임.
  • module 지원 계획
    • go 1.11 (2018년 8월 출시) ~ module 개념 시험 도입 (go.mod 파일 이용)
    • go 1.12 (2019년 2월 출시) ~ module 개념 지원 강화 (go run, go get 명령과 연계)
    • go 1.13 (2019년 8월 예정) ~ module 개념 디폴트 적용

결론

지금은 GOPATH 환경변수만 쓰고, module 개념은 8월가서 공부하기로 함.


Posted by ingee
TAG Golang

댓글을 달아 주세요

VIM-GO, Golang 개발환경 꾸미기


회사 업무 때문에 Golang을 쓰고 있다. 코딩 스타일과 디렉토리 구조를 강제하는 점이 불만이지만, 그에 대한 반대급부로 편리함을 제공해준다. Golang은 개성이 중요한 예술가적 마인드의 개발자를 위한 도구가 아니라 문제해결이 중요한 실용가적 마인드의 개발자를 위한 도구인 것 같다.

Golang이 강제하는 코딩 스타일과 디렉토리 구조를 받아들인다면, 주요 OS마다 제공되는 표준 툴의 편리함과 일관됨을 누릴 수 있다. Golang을 설치하고 vim-go를 설치하면 다른 번잡한 툴이 필요 없다.

Golang 툴 설치

https://golang.org/doc/install 페이지가 안내하는 대로 따라하면 어렵지 않게 설치할 수 있다. GOROOT 환경변수와 GOPATH 환경변수 설정이 중요하다. GOROOT는 Golang 툴이 설치된 root 디렉토리 (예를 들어 /usr/local/go)이고, GOPATH는 Golang 프로젝트 관리를 위해 사용할 home 디렉토리 (예를 들어 /home/some-usr/go)이다. GOPATH 디렉토리 아래에는 툴에 의해 bin, pkg, src 디렉토리가 강제로 생성되고 관리된다. 개발자는 $GOPATH/src/ 디렉토리 아래에 프로젝트 디렉토리를 만들어야 한다 (안 내켜도 받아들이는게 편하다).

Vim-go 설치

  1. Vundle (VIM 플러그인 매니저) 설치
    .vimrc 설정파일을 GitHub에 올렸다. 해당 파일에 Vundle 플러그인 매니저의 설치방법도 메모해뒀다.
    https://gist.github.com/ingee/0554f2a8ae8c018d0f8b0c0c2c322767
  2. vim-go (Golang VIM 플러그인) 설치
    VIM 에디터에는 Vundle 말고도 다양한 플러그인 매니저가 존재한다. 어느 플러그인 매니저를 사용하든 상관 없다. VimAwesome 페이지(https://vimawesome.com/)를 방문하면 수많은 VIM 플러그인들의 목록과 설치방법을 확인할 수 있다. Golang 프로젝트 개발을 위해서는 vim-go 플러그인을 설치해야 한다 (바로 위 .vimrc 파일에는 이미 설정되어 있다).
  3. Go 소스 탐색
    • hello.go 새로 편집
      vim hello.go를 입력하면 vim-go가 기본 뼈대를 자동으로 만들어 준다.
      package main
      
      import "fmt"
      
      func main() {
        fmt.Println("vim-go")
      }
      
    • <ctrl> ] 입력으로 소스코드 추적
      커서를 Println 구문 위에 놓고 <ctrl>+] 키를 입력하면 fmt.Println() 함수 구현부로 이동한다.
      // Println formats using the default formats for its operands and writes to standard output.
      // Spaces are always added between operands and a newline is appended.
      // It returns the number of bytes written and any write error encountered.
      func Println(a ...interface{}) (n int, err error) {
        return Fprintln(os.Stdout, a...)
      }
      
    • <ctrl> o 입력으로 소스코드 복귀
      다시 <ctrl>+o 키를 입력하면 직전 편집 위치로 복귀한다. <ctrl>+] 키와 함께 쓰면 편하다.
      package main
      
      import "fmt"
      
      func main() {
        fmt.Println("vim-go")
      }
      
끝!


Posted by ingee
TAG Golang

댓글을 달아 주세요

Private vs. Public,
Permissioned vs. Permissionless 블록체인


멋지고 선명한 정의를 발견하여 메모함.

private vs. public 블록체인

  • Who can read from the Blockchain?
  • 제한된 사람들만 블록체인을 조회할 수 있으면 프라이빗 블록체인
  • 누구나 블록체인을 조회할 수 있으면 퍼블릭 블록체인

permissioned vs. permissionless 블록체인

  • Who can write to the Blockchain?
  • 허가된 사람들만 블록체인 합의에 참여할 수 있으면 퍼미션드 블록체인
  • 누구나 블록체인 합의에 참여할 수 있으면 퍼미션리스 블록체인

Posted by ingee

댓글을 달아 주세요

도커 운영 중, 호스트 머신의 스토리지가 가득찼을 때


현상

docker storage를 충분한 크기로 적절히 설정하고 운영함에도 host 머신의 스토리지가 full 되는 경우가 있다.

# df Filesystem Size Used Avail Use% Mounted on /dev/vda1 10G 3.9G 6.2G 39% / /dev/vdc1 10G 10G 0 100% /var /dev/vdd1 100G 7.5G 93G 8% /home ...


설명

  • /var/lib/docker/containers/ 디렉토리 아래, <container-id>/<container-id>-json.log 파일이 스토리지를 모두 차지했을 수 있다
  • 이 파일은 도커가 docker logs 명령 실행시 출력할 로그를 저장하는 파일이다 (docker storage에 저장되지 않고 host 머신의 파일 시스템을 소진한다)
  • 도커 실행시 max-size 옵션을 설정하면 로그 파일의 크기를 제한할 수 있다
  • 도커 실행시 max-file 옵션을 설정하면 로그 파일의 개수를 제한할 수 있다 (log rotate 효과)

해법

$ sudo vi /etc/docker/daemon.json
...다음 내용 추가...
{
  "log-driver": "json-file",
  "log-opts": {
    "mode": "non-blocking",
    "max-size": "4m",
    "max-file": "3"
  }
}

$ sudo systemctl restart docker

Ref


Posted by ingee
TAG docker

댓글을 달아 주세요