[Docker] 자주 사용하는 Docker 명령어 정리

목차

  • Docker 이미지 관련 명령
    1. 이미지 내려받기
    2. 이미지 삭제하기
    3. Docker 모든 이미지 latest로 자동 업데이트
  • Docker 컨테이너 관련 명령
    1. 컨테이너 생성하기
    2. 컨테이너 조회하기
    3. 컨테이너 수정하기
    4. 컨테이너 삭제하기
    5. 컨테이너 중지하기 / 시작하기
    6. 컨테이너 접속하기 / 접속끊기
    7. WSL2에서 실행 중인 Docker에 명령 보내기
    8. 컨테이너로부터, 컨테이너로 파일 복사
  • 참고 자료

Docker 이미지 관련 명령

본 페이지는 외우는 걸 워낙 못하는 필자의 성격상 자주 사용하는 Docker 명령어들을 정리해서 저장해두고 필요할 때 참고하기 위해 작성하는 포스팅이다.


1. 이미지 내려받기

Docker 이미지를 내려받는 방법은 https://hub.docker.com 에서 검색 후 화면에 나타나는 방법대로 진행하면 된다.

Docker 이미지 내려받기


2. 이미지 삭제하기

Docker 이미지 삭제 시 rmi를 사용한다.

1
docker rmi {이미지ID}

실제 사용 예는 아래와 같다. 이미지가 업데이트된 후 동일한 이름의 이미지가 2개 이상 존재하는 경우 ID를 지정하여 불필요한 이미지를 삭제할 수 있다.

Docker 이미지 삭제


3. Docker 모든 이미지 latest로 자동 업데이트

Docker의 이미지들을 lastest 버전으로 다시 pulling하기 위해서는 각 이미지를 한 개씩 업데이트하는 방법도 있겠으나, 아래를 사용하면 Docker 전체의 이미지들을 한 번에 업데이트할 수 있다.

1
docker images | grep -v REPOSITORY | awk '{print $1}' | xargs -L1 docker pull

위 명령을 실행하면 아래처럼 현재 Docker로 가져온 모든 이미지를 latest로 업데이트하는 화면을 볼 수 있다.

Docker 모든 이미지 자동 업데이트


Docker 컨테이너 관련 명령

1. 컨테이너 생성하기

Docker를 공부하다보면 컨테이너 생성 명령이 거의다 run으로 되어 있는데, 컨테이너를 생성하는 방법은 원래 create이다.

  • create : 새로운 컨테이너를 생성, 실행은 안됨
  • run : 새로운 컨테이너를 생성 후 실행

원래대로라면 create 후 start 명령으로 실행하여 컨테이너로 진입해야 하지만, run 명령은 이 두 가지 행동을 한 번에 실행해주는 명령이다. 두 명령 모두 세부 옵션을 가지고 있다.

예를 들어, Ubuntu에 React 환경을 구성하는 컨테이너를 추가한다면 아래와 같이 –name 옵션으로 컨테이너의 이름을 지정할 수 있다. 아래는 ‘ubuntu’라는 이미지에서 ‘ubuntu-react’라는 컨테이너를 만들으라는 명령의 예다.

1
docker create -i --name ubuntu-react ubuntu

run을 사용할 때는 기본적으로 -it 옵션을 사용한다. -i는 standard input/output이며, -t는 터미널 연결을 의미한다. run을 사용하면 create 후 start 하고 attach하여 접속하므로, -it 옵션으로 생성하면 된다.

1
docker run -it --name ubuntu-react ubuntu

2. 컨테이너 조회하기

Docker 컨테이너를 조정하는 방법은 현재 작동 중인 컨테이너만 조회하는 방법과 작동을 멈춘 컨테이너까지 모든 내용을 조회하는 방법 두 개가 있다. 모든 내용 조회 시 -a를 사용한다.

1
2
docker ps
docker ps -a

3. 컨테이너 수정하기

Docker의 컨테이너를 수정하는 방법은 여러 가지가 있다. 그 중 필자가 자주 쓰는 것들을 모아보았다.

(1) Docker 컨테이너의 이름을 변경하는 방법은 ‘docker rename {예전 이름} {새로운 이름}’으로 사용한다.

1
docker rename ubuntu-react ubuntu-react-test

(2) Docker 컨테이너에 특정 포트를 추가해야 하는 경우 아래와 같이 진행한다.

1
2
3
docker stop {컨테이너 이름}
docker commit {컨테이너 이름} {이미지이름}
docker run -p 3000:3000 -d {이미지이름}

위에서 1번 라인은 현재 실행 중인 컨테이너를 중지하는 명령이다. 2번 라인은 중지한 컨테이너를 이미지로 저장하는 명령이다. 3번 라인은 저장한 이미지로 새로운 컨테이너를 생성하면서 port를 지정하는 명령이다. 이 방식으로 현재 컨테이너의 내용을 잃지 않으면서 포트 포워딩을 추가하여 사용할 수 있다.

3번 라인에서 포트 지정 시 첫 번째 숫자는 외부에서 들어가는 inbound port, 두 번째 숫자는 컨테이너 내부에서 처리하는 forwarding port이다. 예를 들어, react 서비스를 실행하는 각기 다른 컨테이너 2개를 동시에 사용한다면, 2개 모두 3000번 포트를 테스트 포트로 사용하므로 둘 중 하나는 작동하지 않는다. 이 때 아래와 같이 지정하면 컨테이너 2개 모두 사용할 수 있게 된다.

1
2
docker run -p 3000:3000 -d react-test1
docker run -p 3001:3000 -d react-test2

웹브라우저에서 localhost:3000과 localhost:3001로 호출하면 모두 react를 표시할 수 있다. 서로 다른 컨테이너에서 각각 포트 번호 별로 따로 신호를 처리할 수 있기 때문이다.

(3) 그 외, 환경 변수를 추가하거나 bash를 추가하는 방법 등이 있으나, 도구와 상황에 따라 다르므로 ‘그런게 있다’ 정도로 기억하고 검색해서 사용하는 걸로 한다.


4. 컨테이너 삭제하기

Docker 컨테이너 삭제는 rm 명령을 사용한다. 컨테이너 이름이나 ID를 입력하여 삭제할 수 있다.

1
2
docker rm {컨테이너 이름}
docker rm {컨테이너 ID}

Docker 이미지 삭제


5. 컨테이너 중지하기 / 시작하기

실행 중인 Docker 컨테이너를 중지할 때는 stop, 다시 시작할 때는 start를 사용한다. 또, 다시 시작할 때는 restart를 사용한다.

1
2
3
docker stop {컨테이너 이름}
docker start {컨테이너 이름}
docker restart {컨테이너 이름}

6. 컨테이너 접속하기 / 접속끊기

컨테이너에 접속은 attach를 사용한다.

1
docker attach {컨테이너 이름}

컨테이너 사용 후 접속을 끊는 방법은 해당 컨테이너의 bash에서 exit을 입력하면 된다.

1
root@container : exit

7. WSL2에서 실행 중인 Docker에 명령 보내기

Docker 컨테이너들 여러 개를 동시에 다루어야 하는 경우 컨테이너들을 들락날락하면서 필요한 내용들을 실행하기는 번거로울 수 있다. 이런 경우 exec 명령을 사용하여 컨테이너에 명령을 보내고 결과를 얻을 수 있다.

WLS2에서 Docker로 명령을 보내 실행하는 문법은 아래와 같다.

1
2
docker exec {컨테이너 ID} {명령}
docker exec {컨테이너 이름} {명령}

exec 명령은 작동 중인 컨테이너에서만 실행 가능하므로, 먼저 컨테이너가 실행 중인지 확인해야 한다. 이후에 작동 중인 컨테이너에 대해서 명령을 실행한다.

Docker 컨테이너로 명령 보내기

위와 같이 컨테이너가 작동 중임을 확인하고, 컨테이너 내에서 실행할 수 있는 명령을 보내 실행할 수 있다.

1
docker exec -t react-test ls /root/react-test1

8. 컨테이너로부터, 컨테이너로 파일 복사

Docker 컨테이너에서 파일을 복사하여 WSL2 시스템으로 복사하거나, WSL2에 있는 파일을 컨테이너로 파일을 복사하는 방법이 있다. 이를 이용하여 특정 컨테이너에 있는 파일이나 디렉토리를 다른 컨테이너로 복사할 수 있다.

먼저 컨테이너로부터 WSL2로 복사하는 문법은 아래와 같다.

1
docker cp {container name}:{container 내부 경로} {host 파일경로}

컨테이너가 작동하고 있음을 확인 후 컨테이너 내부에 있는 파일을 WSL2로 복사하는 과정은 아래와 같다.

Docker 컨테이너에서 파일 복사

다음으로는 WLS2에서 특정 컨테이너로 복사하는 문법은 아래와 같다.

1
docker cp {host 파일경로} {container name}:{container 내부 경로}

컨테이너가 작동하고 있음을 확인 후, WSL2로에 있는 파일을 컨테이너 내부로 옮기는 과정은 아래와 같다. 아래 예제에서는 위 예제에서 복사한 파일의 이름을 변경한 후 다시 원래 위치로 복사해보았다.

Docker 컨테이너에서 파일 복사

docker exec 명령으로 복사한 파일이 컨테이너 내부에 정상적으로 복사되었음을 확인할 수 있다.


참고 자료