도커 명령어

도커 명령어 정리

도커 명령어

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)