도커 기본 명령어
run
- 컨테이너를 실행하는 명령어
- 만약 없는 이미지를 run하면 이미지 저장소에 검색해서 pull 해온다.
[docker run [OPTIONS] IMAGE[:TAG or @DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
---|---|
-d | detached 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을 설정하여 컨테이너를 새로 띄워도 데이터가 유지된다.