도커 명령어
도커 명령어 정리
ubuntu docker download
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io
권한 추가
sudo usermod -a -G docker $USER
도커 재시작
sudo systemctl restart docker.service
bash 재 로그인
도커 안 베쉬 오토
install bash-completion
도커 컨테이너 이름 변경
docker rename [old name] [new name]
도커 세팅 구성
작업 환경(ENV) 만 구성을 하고 작업 공간(workspace)은 공유로 밖으로 추가한다.
-v /{sourcePath}/{source}[host]:/{workspace}/{file}[docker]
docker load -i nia_anly_crack
docker run --gpus all --shm-size=8g -it -p 5000:5000 --name mmdet_anly -w /mmdet_anly -v /sh_data/:/host_mount -v /etc/localtime:/etc/localtime:ro anly_crack
docker run --gpus all --shm-size=8g -it -p 5000:5000 -d --name mmdet_crack -w /mmdet_crack -v /sh_data/workspace/mmdet_crack:/mmdet_crack -v /sh_data/data:/host_mount -v /etc/localtime:/etc/localtime:ro rack_anly
run # 이미지를 읽어 컨테이너를 생성한다.
| option | 설명 |
|---|---|
| -d | detached mode 흔히 말하는 백그라운드 모드 |
| -p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
| -v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
| -e | 컨테이너 내에서 사용할 환경변수 설정 |
| –name | 컨테이너 이름 설정 |
| –rm | 프로세스 종료시 컨테이너 자동 제거 |
| -it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 (io 입출력, tty) |
| –link | 컨테이너 연결 [컨테이너명:별칭] |
| --restart=always | 자동시작 |
| --gpus | all GPU 다 사용 nvidia container toolkit 필요 |
| --shm-size=8g | 공유메모리 지정 |
도커 이미지 저장 및 사용
컨테이너 -> image 저장
commit
docker commit {컨테이너 name} {저장 image name}
image -> 파일
save
docker save {image name} -o {저장 file name}
파일 -> image
load
docker load -i {file name}
dockerfile
도커 이미지를 만드는 스크립트
Dockerfile과 같은 디렉토리에 있는 모든 파일들을 컨텍스트(context)라고 한며
docker build를 사용하여 이미지를 생성할 때 모든 컨테스트를 Docker 데몬에 전송 하기 때문에 /(root)디렉토리에서 dockerfile으로 빌드하면 시스템 처리 속도가 굉장히 느려질 수 있다.
.dockerignore을 통하여 예외를 만들수 있으며 Dockerfil과 같이 있어야 한다.
| 규칙 | 행동 |
|---|---|
| # comment | 무시됨 |
| /temp | 현디렉토리 안 temp로 시작하는 모든 파일 및 디렉토리를 제외한다. |
| //temp* | 현 디렉토리에 하위 디렉토리에서 temp로 시작하는 모든 파일 및 디렉토리를 제외 |
| temp? | 현 디렉토리에 있는 temp+{} (tempa) 같이 temp포함 5글자인 파일 및 디렉토리가 제외된다. |
| !README.md | README.md 파일을 제외한 모든것을 포함한다. |
docker build -t {생성할 이미지명} -f {dockerfile}
| 명령 | 설명 |
|---|---|
| FROM | 베이스 이미지 설정 |
| MAINTAINER | 이미지를 생성한 사람의 정보를 설정 |
| RUN | 이미지 위에서 스크립트 혹은 명령을 실행 |
| LABEL | 라벨 설정 |
| EXPOSE | 호스트와 연결할 포트 벌호 설정 |
| ENV | 환경변수 설정 |
| ARG | 빌드시점에서 만 환경변수 설정 |
| ADD | 파일을 이미지에 추가 |
| COPY | 파일을 이미지에 추가 |
| CMD | 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행 |
| ENTRYPOINT | 컨테이너가 시작되었을때 스크립트 혹은 명령을 실행 |
| WORKDIR | 작업영역을 설정 |
| VOLUME | 공유 파일 설정 |
| USER | 명령을 실행할 사용자 계정을 설정 |
| ONBUILD | 생성한 이미지 기반으로 다른 이미지 생성시 명령 트리거 |
| STOPSIGNAL | 시스템 콜 시그널 설정 |
| HEALTHCHECK | 컨테이너의 헬스 체크 |
| SHELL | 기본 쉘 설정 |
FROM {이미지}
ARG APP_PATH
EXPOSE {}
# 언어 설정
RUN locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
# TimeZone 설정
ENV TZ Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
GUI 설정
호스트
도커 GUI 열어줌
xhost +local:docker
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY
도커 포트
도커 포트 확인
docker inspect {$imageName | $dockerContainer}
도커 포트 변경
docker container stop
docker service stop하기
service docker stop
docker config file 수정하기(config.v2.json, hostconfig.json)
vi /var/lib/docker/containers/[container_id]<tab>/config.v2.json
ExposedPorts, Ports 변경
vi /var/lib/docker/containers/[container_id]<tab>/hostconfig.json
PortBindings 변경
start docker service
service docker start
docker container start하기
도커 자원 정리
prune
종료된(exit 상태의) docker container들을 모두 내리고, 쓸모 없는 image (dangling image)를 제거
docker system prune -f
참조되지 않는 (현재 사용하지 않는) docker volume을 제거
volume의 life-cycle과 container의 life-cycle은 별개, 따라서 스토리지 공간이 모자라 골치 아픈 시스템 관리자 입장에서 매우 유용한 명령임.
docker volume prune -f
현재 사용하지 않는 docker network 제거
docker network prune -f
도커 이름없는 이미지 제거
이미지 일괄 제거
docker rmi $(docker images -f "dangling=true" -q)