Docker 컨테이너는 하나의 도커 이미지를 통해 생성하는 격리된 시스템과 네트워크를 사용할 수 있는 독립된 공간입니다.
컨테이너는 읽기전용의 이미지에 여러 계층의 바이너리 파일을 쌓아 올려 만들어집니다.
1. 컨테이너 생성, 실행 및 삭제
1. 이미지 가저오기
위에서 언급했듯이 컨테이너 생성은 하나의 이미지를 필요로 한다. 다음 명령어를 통해 도커 허브에서 이미지를 다운 받을 수 있다.
# docker pull 이미지:태그
docker pull ubuntu:16.04
가져온 이미지는 다음 명령어로 확인 할 수 있다.
docker images
2. 컨테이너 생성
도커 컨테이너는 create명령어를 사용하여 생성할 수 있다. 이 때 --name 옵션으로 컨테이너의 이름을 설정할 수 있다.
또한 생성시에 -i 옵션과 -t 옵션을 추가해야 터미널을 입력가능하게 사용할 수 있다.
i 옵션은 사용자의 인터렉티브를 허용하고 t옵션은 입출력 터미널인 tty를 허용한다.
# docker create [ --name 컨테이너명 ] 이미지:태그
docker create -it --name my_container ubuntu:16:04
## 1c67c961821a22f7f552e157333d2e21778c34bc02ef5838ccbfb3c102d88c00
컨테이너를 생성하면 무작위의 16진수 해쉬값이 생성되는데 이는 컨테이너의 ID이다. 해당 아이디는 중복되지만 않는 길이만큼 얼마든지 줄여 사용할 수 있다. 이는 아래의 컨테이너 시작에서 확인 해보도록 하자.
생성된 컨테이너는 다음과 같이 확인 할 수 있다.
docker ps -a
혹은
docker container ls -a
ps 혹은 ls 모두 실행중인 컨테이너만 출력하기 때문에 -a 옵션을 실행하여야 실행중이지 않는 컨테이너까지 확인 할 수 있다.
3. 컨테이너 시작 및 내부 접속
# dokcer start 컨테이너 명 혹은 컨테이너 아이디
docker start my_container
or
docker start 1c6
# docker attach 컨테이너 명 혹은 컨테이너 아이디
docker attach my_container
or
docker attach 1c6
start 명령어는 컨테이너를 구동시키고 attach는 컨테이너 내부로 접속할 수 있게 한다.
이 때 이전 설명처럼 컨테이너 아이디를 사용할 경우 모두 입력하지 않아도 된다.
컨테이너를 나가는 방법은
맥 기준으로 ( ctrl + q )로 종료시에 컨테이너를 종료하지 않고 나가는 방법과
exit를 입력하여 컨테이너를 종료시키고 나가는 방법이 있다.
4. 컨테이너 생성과 실행 내부접속 한번에 하기
사실 위의 방법은 일반적으로는 사용되지 않는다.
# docker run [-it] [--name 컨테이너 명] 이미지명
docker run -it --name my_run_container ubuntu:16.04
일반적으로는 run명령어를 사용하는데 run 명령어는 create + start + attach명령어를 동시에 실행한다. 이 때, 이미지가 없다면 이미지 역시 pull받는다.
5. 컨테이너 삭제
사용한 컨테이너를 삭제하려면 다음 명령어를 사용한다.
# docker rm 컨테이너명 혹은 컨테이너 아이디
docker rm my_container
이 때, 실행중인 컨테이너는 삭제 할 수 없다. 이를 삭제하려면 컨테이너를 중지하거나 -f 옵션을 사용 할 수 있다.
또 컨테이너가 너무 많을 시에 일일이 삭제 할 수 없는데, 다음과 같은 방법으로 모든 컨테이너를 삭제 가능하다.
# 모든 컨테이너를 정지함
docker stop $(docker ps -aq)
# 모든 정지되어있는 컨테이너를 지움
docker container prunce
# 모든 컨테이너를 지움
docker rm -f $(docker ps -aq)
$()를 사용하면 변수로 사용할 수 있기 때문에 다음과 같이 사용가능하다.
참고로 -a 옵션은 컨테이너 전부 출력하고 -q옵션은 그중 아이디만 출력하는 옵션이다.
'Develop' 카테고리의 다른 글
SVG (0) | 2021.02.01 |
---|---|
Docker 컨테이너 네트워크 (1) 기본편 (0) | 2021.01.31 |
AWS VPC 및 간단한 IPv4 (0) | 2021.01.30 |
AWS Lambda 기본 기능 파악하기 (1) (0) | 2021.01.27 |
API Gateway를 사용하여 API 구축하기 (3) REST API 생성 (0) | 2021.01.26 |