Post

도커 기본 명령어





run

  • 컨테이너를 실행하는 명령어
    • 만약 없는 이미지를 run하면 이미지 저장소에 검색해서 pull 해온다.

[docker run [OPTIONS] IMAGE[:TAG or @DIGEST] [COMMAND] [ARG...]

옵션설명
-ddetached mode (백그라운드 모드)
-p호스트와 컨테이너의 포트를 연결
-v호스트와 컨테이너의 디렉토리를 연결
-e컨테이너 내에서 사용할 환경변수 설정
–name컨테이너 이름 설정
–rm프로세스 종료시 컨테이너 자동 제거
-it컨테이너 내의 터미널 입력을 위한 옵션
–network네트워크 연결


docker run --rm -it ubuntu:20.04 /bin/sh

  • –rm 옵션으로 컨테이너가 종료되면 자동으로 삭제된다.
  • 컨테이너 내부의 셸을 켜기 위해 /bin/sh를 뒤에 붙여주고,
  • 셸과 키보드로 대화하기 위해 -it 옵션을 넣어준다.


docker run -d -p 8080:8080 jxlwqq/http-echo --text="hello"

  • -d 옵션으로 detached mode로 컨테이너를 실행한다.
    • 컨테이너를 백그라운드로 실행하기 때문에 터미널을 자유롭게 사용할 수 있다.
  • -p 옵션으로 내 포트 번호와 jxlwqq 컨테이너의 포트와 연결해준다.
    • 이제 8080으로 요청을 보내면 jxlwqq 컨테이너의 8080 포트로 요청이 전달된다.
    • –text 로 넘긴 hello를 응답한다.

docker run -d -p 8081:8080 jxlwqq/http-echo --text='babo'

  • 이번엔 -p 옵션으로 8081과 8080을 연결해줬다.
  • 내 포트 번호 8081에 요청을 보내면 jxlwqq 컨테이너의 8080 포트에 요청이 전달되어
  • babo를 응답한다.

docker run -d -p 8080:8081 jxlwqq/http-echo --text='bogeun'

  • 이번엔 8080:8081를 옵션으로 줬다.
  • 8080으로 요청을 보냈더니 적절한 응답이 없다고 한다.
  • 저 컨테이너의 웹 서버는 8081 포트에 아무 것도 없어서 아무 것도 응답하지 않는다.


docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:8.0

  • mysql:8.0 이미지의 컨테이너를 3306:3306 포트로 띄웠다.
  • -e를 사용해 컨테이너에 환경 변수를 전달했다.
  • –name으로 컨테이너에 mysql이란 이름을 붙였다.
    • docker ps 또는 docker ps -a로 확인해보면
    • 다른 애들은 이름이 1556ad15 뭐 이런건데 쟤만 이쁘게 mysql인걸 볼 수 있다.

docker exec -it mysql mysql

  • docker exec 명령어를 통해 mysql 컨테이너 내부의 mysql 명령어를 실행한다.
    • 앞의 mysql은 컨테이너 이름이고
    • 뒤의 mysql은 컨테이너 내에서 실행할(execute) 명령어다.
    • exec 명령어는 실행중인 컨테이너에 명령을 날리는 역할이다.
  • -it 옵션을 줘서 키보드로 상호작용이 가능하다.
  • 실행해보면 그냥 mysql 8.0 버전을 설치해서 사용하는 것과 같다.



ps

  • 현재 실행중인 컨테이너 목록

docker ps

  • 중지된 컨테이너 포함 모든 컨테이너 목록

docker ps -a



stop

  • stop은 실행중인 명령어를 중지 시키는 명령어다.
  • 컨테이너의 id나 name을 주면 된다.

  • 1개 이상의 컨테이너 종료하기

docker stop [CONTAINER...]

  • 모든 컨테이너 종료하기

docker stop $(docker ps -aq)



rm

  • 특정 컨테이너 삭제하기

docker rm [CONTAINER_NAME]

  • 모든 컨테이너 삭제하기

docker rm $(docker ps -aq)



logs

  • 실행중인 컨테이너의 로그를 확인하는 명령어

docker logs [OPTIONS] CONTAINER

  • 실시간으로 로그를 계속 확인하기

docker logs -f CONTAINER

  • 최근 로그 몇 개만 확인하기
    • 아래의 예시는 10줄

docker logs --tail 10 CONTAINER



images

  • 도커가 다운로드한 이미지 목록을 확인하는 명령어

docker images [OPTIONS] [REPOSITORY[:TAG]]



pull

  • 이미지를 다운받는 명령어

docker pull [OPTIONS] NAME[:TAG or @DIGEST]



rmi

  • 이미지를 삭제하는 명령어

docker rmi [OPTIONS] [IMAGES..]



network

  • 도커의 컨테이너들은 기본적으로 각자 격리된 상태이기 때문에 서로 통신이 불가능하다.
  • 도커 네트워크를 만들어 컨테이너들을 연결시키면 연결된 컨테이너들끼리 통신이 가능하게 된다.

network 조회

docker network ls

  • 도커 네트워크 목록을 조회하는 명령어이다.
  • 네트워크 이름 드라이버 등을 확인할 수 있다.

network의 종류

  • 도커 네트워크는 여러가지 드라이버가 존재한다.
  • 드라이버를 사용하여 네트워킹의 기능을 사용할 수 있다.

  • bridge
    • 디폴트 네트워크 드라이버
    • 하나의 호스트 내에서 여러
  • host

  • overlay

  • ipvlan

  • macvlan

  • none
    • 모든 네트워킹을 비활성
    • 일반적으로 커스텀 네트워크 드라이버와 함께 사용된다.



volume

  • 컨테이너에 저장한 정보는 컨테이너가 삭제되면 같이 사라진다.
  • volume을 설정해서 내 로컬 디렉토리와 컨테이너 내부의 디렉토리를 연결하여 삭제된 후에도 데이터를 유지할 수 있다.

docker run -p 3306:3306 --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true -v /my/own/datadir:/var/lib/mysql mysql:8.0

  • -v /my/own/datadir:/var/lib/mysql 옵션을 줘서
    • 내 로컬의 /my/own//datadir 디렉토리와
    • 컨테이너 내부의 /var/lib/mysql 디렉토리를 연결하였다.
  • 이제 mysql 컨테이너를 삭제하고 다시 volume을 설정하여 컨테이너를 새로 띄워도 데이터가 유지된다.





This post is licensed under CC BY 4.0 by the author.