Backend/도커

docker설치, docker 명령어 정리

봄다온 2024. 8. 7. 17:43

docker는 docker 이후 뒤에 명령어와 옵션을 조합하여 사용한다.

docker의 이미지를 실행하면 1개의 컨테이너가 생성되고 그 안에서 작업이 이루어진다.
docker는 여러개의 컨테이너를 동시에 실행할 수 있다.
container가 종료되면 그 안에서 작업한 내용은 모두 초기화 된다.
변경사항이 생기고 그것을 저장하고 싶다면 따로 방법을 취해야한다.

도커설치

1.wsl에서 curl -sSL get.docker.com | sh (가끔 에러나면 다시설치 or wsl재실행)
2.1분정도 기다림
3.docker --version 명령어 날려보고 깔린것 확인
4.기본적인 권한을 줘야 실행이 편하게 사용가능

// 도커 실행권한 열어주기
sudo groupadd docker
sudo usermod -aG docker $계정명
sudo chown root:docker /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

5.이후 docker 만 날려도 설명이 쭉 나온다.

image

docker에서 사용할 이미지들과 관련 명령어

docker images : 현재 로컬 환경의 이미지들 조회
docker search {이미지명} : 도커허브에서 사용가능한 이미지들 조회
docker image pull {이미지 이름}:버전태그 : 도커이미지 다운로드
docker rmi {이미지ID or 이미지이름} : 이미지 삭제
docker rmi $(docker images -q) : 이미지 모두삭제
docker commit {컨테이너이름}{저장할이미지명} : 컨테이너의 현재상태를 새로운 이미지에 저장

container

docker에서 사용할 컨테이너 관련 명령어

docker create {컨테이너 이름 or ID} : 컨테이너 생성
docker start {컨테이너 이름 or ID} : 컨테이너 실행
docker run {옵션} --name {컨테이너 이름} {이미지 이름:버전 태그 or 이미지 ID} : 컨테이너 생성 & 실행
docker restart {컨테이너 이름 or ID} : 컨테이너 재실행
docker stop {컨테이너 이름 or ID} : 컨테이너 중지
docker stop ${docker ps -aq} : 모든 컨테이너 중지
docker ps : 실행중인 컨테이너 조회
docker ps -a : 모든 컨테이너 조회
docker rename {기존 이름} {변경할 이름} : 컨테이너 이름 변경
docker rm {컨테이너 이름 또는 ID} : 컨테이너 삭제
docker rm $(docker ps -a -q) : 모든 컨테이너 삭제
docker exec -it {컨테이너 이름 또는 ID} bin/bash : 컨테이너 접속, exec는 디버깅용, 실행중인 컨테이너에만 사용, 또한 exec로 실행해도 컨테이너 생성되지않음
docker logs {컨테이너 이름 또는 ID} : 컨테이너 로그 확인
docker cp {컨테이너 이름 또는 ID}:/foo/bar/sample.txt ./foo/bar/sample.txt : 컨테이너에서 로컬로 파일 복사(순서바꾸면 거꾸로)

위의 명령어와 조합가능한 옵션들

-it : 컨테이너에 표준 입력(stdin)을 열어두고(-i), 가상 터미널을 열어(-t) 키보드의 입력을 표준 입력으로 전달할 수 있도록 하는 옵션
-d : 데몬 프로세스로 실행(백그라운드)해 프로세스가 끝나도 유지
--name {이름} : 컨테이너 이름 지정
-p {host 포트번호}:{컨테이너 포트번호}/{프로토콜} : 호스트와 컨테이너의 포트를 연결 - 외부 접근 설정
--rm : 컨테이너가 종료되면{내부에서 돌아가는 작업이 끝나면} 컨테이너를 제거
-v {host 경로}:{컨테이너 내부경로} : 호스트와 컨테이너의 디렉토리를 연결, 컨테이너 종료 후에도 호스트경로는 유지 (바인드 마운트)
--restart="always" : 컨테이너 종료시 항상 재시작
--restart="on-failure" : 종료 스테이터스가 0이 아닐 때 재시작
--privileged : 컨테이너 안에서 호스트의 리눅스 커널 기능을 모두 사용
--gpus all : 호스트의 GPU 모두 사용
--gpus "device=0,1" : 특정 GPU 사용. 첫번째(0)와 두번째(1) GPU 사용
-c {할당할 cpu자원값} : 해당 컨테이너에 CPU 자원 분배 설정. 기본값은 1024 ex) -c 2048 기본값의 2배로 CPU 자원 설정
-m {할당할 메모리자원값} : 컨테이터의 메모리 한계 설정. b, k, m, g 단위 사용 ex) -m 4g 메모리 한계 4기가 바이트
-e {환경변수=가질값} : 컨테이너 내에서 사용할 환경 변수 설정 ex) -e TT=Twice 컨테이너에서 TT 환경변수는 Twice값을 갖게됨