사용자 도구

사이트 도구


docker

Docker

Usage

설치 후 테스트

docker run hello-world
docker search [검색어]

이미지 관리

  • docker pull [image-name]:[tag] : 이미지의 tag 버전을 다운로드함. latest는 최신버전.
  • docker images : 이미지 목록보기
  • docker rmi [image-name]:[tag] : 이미지 삭제. tag 생략시 버전 상관없이 모두 삭제.

Container 관리

  • run 명령으로 컨테이너 생성
    docker run [option] [image-name] {[실행명령]}
    • -i -t or -it : interactive, pseudo-tty : 실행된 명령에서 인터랙티브하게 입력/출력 가능
    • --name [container-name] 컨테이너 이름지정
    • -d : detached 상태로(background로) 실행
    • --rm : 기존에 이미 도커 컨텐이너가 존재하면 삭제하고 다시 실행
    • -v $HOSTDIR:$DOCKERDIR : HOST의 디렉토리를 컨테이너의 디렉토리에 마운트
    • -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT : HOST의 특정포트로 들어오는 요청을 Container의 특정포트로 보내기.
      # 11211 port로 실행되는 memcached docker 이미지가 있다고 할 때 아래 명령으로 컨테이너 생성하면
      docker run -d -p 127.0.0.1:11211:11211 --name memcachedtest memcached
      # 앞의 "127.0.0.1:" 생략 가능.
    • --restart=[option] : no,on-failure[:max-retries],always,unless-stopped 등을 지정하면 해당 컨테이너 자동 리스타트를 옵션으로 지정할 수 있다. 개발환경에서는 unless-stopped(명시적 중지가 아니면 자동 재시작) 정도이면 될 듯.
  • docker ps -a : 모든 컨테이너 목록 출력. -a는 전체 목록, -a없으면 현재 실행중인 것들만.
    • --no-trunc 명령줄 줄이지 않고 보여주기
  • docker start [container-name|id] : 컨테이너 시작
  • docker restart [container-name] : 재시작
  • docker attach [container-name] : 컨테이너에 접속
    • exit 혹은 Ctrl-D 사용시 컨테이너 정지
    • Ctrl-P, Ctrl-Q를 차례로 누르면 실행상태로 그냥 빠져나옴.
  • docker exec [container-name] [명령] … : 외부에서 컨테이너 안의 명령 실행하기
  • docker exec -it [container-name] /bin/bash : 외부에서 컨네이너 안의 bash interactive 하게 실행
  • docker exec -it -u [user]:[group] [container-name] /bin/bash : docker 컨테이너 안에 있는 특정 user:group 으로 접속
  • docker stop [container-name] : 컨테이너 정지
  • docker rm [container-name]
  • 불필요한 Container, Image 삭제
    # 이름없는 모든 이미지 삭제
    docker image prune
     
    # 중지된 모든 컨테이너 삭제
    docker container prune
     
    # 사용하지 않는 모든 도커 볼륨 삭제
    docker volume prune -f
     
    # 사용하지 않는 모든 도커 네트워크 삭제
    docker network prune
     
    # 위 모든 명령을 합친 것. 이것에 의해 삭제되지 않는 다는 것은 사용중인 컨테이너, 이미지, 기타 등등이라는 의미
    docker system prune -a

Shell 만 즉시 실행

  • docker 이미지의 entrypoint 는 실행하지 않고 해당 이미지의 shell 실행하고자 할때. /bin/sh 말고 알고 있다면 해당 shell 을 지정.
docker run --rm -it --entrypoint /bin/sh <image-name-or-id>
  • 원하는 명령 즉시 실행하고, 명령 인자 전달. <image-name-or-id> 뒤의 내용을 인자로 전달함.
docker run --rm  --entrypoint /bin/cat <image-name-or-id> "/etc/redhat-release"

Volume Mount

  • host 의 diretory를 docker container에 마운트하기
  • run -v /volume/dir : /volume/dir 을 컨테이너에 생성, 실제 저장될 위치는 inspect로 확인
docker run -d -P --name web -v /webapp training/webapp python app.py
  • docker inspect [container-name] 으로 마운팅 상황 확인 가능
  • Host 디렉토리를 마운트하려면 -v /host/dir:/container/dir로 host 디렉토리를 container의 특정 디렉토리에 마운팅
  • 현재 디렉토리 마운팅 script
    #The following two options will work on both PowerShell and Linux:
     
    docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
     
    docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

Docker Proxy

  • Linux에서 Docker Proxy 프로세스가 뜨는 것을 막으려면, 커널 2.6을 제외하고,
docker daemon --userland-proxy=false
/etc/default/docker 파일에 DOCKER_OPTS 을 추가한 후 docker daemon 을 재시작하면 된다. 
 
$ cat /etc/default/docker
DOCKER_OPTS="--userland-proxy=false"

/etc/hosts

docker run --add-host="some.example.com:127.17.0.1"

오류 대응

centos

unable to remount sys readonly: unable to mount sys as readonly max retries reached 오류를 만나면 /etc/sysconfig/docker 파일에 --exec-driver=lxc 추가 후 docker 재시작.

other_args="--selinux-enabled --exec-driver=lxc"

Docker & Java / JVM / JDK

# 설정 안했을 경우 관련 오류
Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 142: Operation not permitted

Windows 10 & Docker CE

Mac OS X 성능 문제

Docker Log rotation

  • /var/lib/docker/containers/*/*.log 에 STDOUT 이 모두 계속 출력되므로 log rotate가 필요하다.

Localhost 접속

Gnome Shell Docker Integration

volume 저장소

참조

docker.txt · 마지막으로 수정됨: 2024/02/15 09:58 저자 kwon37xi