Docker
소프트웨어의 실행 및 배포를 편리하게 도와주는 컨테이너 기술로
애플리케이션을 쉽게 컨테이너화 하고 Docker Hub를 이용해 저장할 수 있는 기능을 제공한다.
컨테이너 방식의 최대 장점은 환경의 영향을 받지 않고 독립적이라는 점인데
도커가 어떻게 이런 기능들을 제공하는지 살펴보겠다.
도커의 컨테이너
도커는 호스트 OS 위에 가벼운 컨테이너를 만들어서 실행되는데
이러한 컨테이너는 호스트 OS나 다른 컨테이너들과 격리되어 있고
필요에 따라 자원을 할당 받는다. (cgroups와 namespace)
즉, 컨테이너는 도커 이미지를 바탕으로 생성된 가볍고 독립적인 실행 단위로
각각이 하나의 가볍고 빠른 가상머신이라고 볼 수 있다.
컨테이너 생성
$ docker run -it --name 컨테이너명 -p 8080:8080 이미지
도커의 컨테이너 생성은 위와 같이 CLI 환경에서 명령어를 입력하면 가능하다.
docker run을 통해 컨테이너를 생성하거나 실행할 수 있으며
-it 옵션은 컨테이너를 대화형 모드로 실행할 때 사용한다.
--name 옵션을 사용하여 컨테이너의 이름을 직접 지정할 수도 있지만
옵션을 사용하지 않으면 랜덤으로 지정된다.
-p 옵션은 지정한 호스트의 포트와 지정한 컨테이너의 포트를 매핑할 때 사용한다.
마지막으로 컨테이너를 생성할 때 사용할 이미지를 지정해주면 된다.
생성 시에 사용할 수 있는 옵션
-d // 컨테이너를 백그라운드에서 실행
-i // 표준 입력(stdin)을 연결
-t // TTY(터미널)을 연결
-p <호스트 포트>:<컨테이너 포트> // 호스트 포트와 컨테이너 포트를 연결
-P // 호스트와 컨테이너의 포트를 랜덤으로 연결
--name <컨테이너명> // 컨테이너의 이름을 설정
--rm // 컨테이너가 종료될 때 자동으로 삭제
-v <호스트 경로>:<컨테이너 경로> // 호스트와 컨테이너의 디렉터리를 연결
-e <환경변수> // 컨테이너 내부의 환경변수를 설정
--link <다른컨테이너명>:<별명> // 다른 컨테이너와 연결
--network <네트워크명> // 컨테이너가 속한 네트워크를 설정
--expose <포트> // 컨테이너의 포트를 노출
--entrypoint <명령어> // 컨테이너가 시작될 때 실행될 명령어를 설정
--user <사용자> // 컨테이너 내부에서 실행될 사용자를 설정
--restart <정책> // 컨테이너 재시작 정책을 설정
컨테이너는 Ctrl + D를 사용하여 종료할 수 있다.
컨테이너 시작
$ docker start [실행할 컨테이너명이나 ID]
// 컨테이너명이 출력되면 성공적으로 실행된 것
$ docker start -ai [실행할 컨테이너명이나 ID]
| Welcome to JShell -- Version 11.0.16
| For an introduction type: /help intro
jshell>
docker start 명령어를 사용하여 컨테이너를 실행만 할 수도 있고
옵션을 추가하여 실행하면 위의 코드처럼 터미널에 연결하여 대화형으로도 사용가능하다.
아래와 같은 옵션들을 사용할 수 있다.
- -a, --attach : 컨테이너와 터미널을 연결하여 컨테이너의 출력 확인
- -i, --interactive : 컨테이너와 상호작용을 위해 표준 입력(stdin)을 연결
- -p, --publish : 호스트와 컨테이너 포트를 연결
- -d, --detach : 컨테이너를 백그라운드에서 실행
- -e, --env : 컨테이너 내부의 환경변수를 설정
- -u, --user : 컨테이너 내부에서 실행될 사용자를 설정
- -a, --attach : 컨테이너 출력을 표시
컨테이너 중지
$ docker stop [중지할 컨테이너명이나 ID]
중지는 반대로 start 대신 stop을 사용하기만 하면 된다.
(위에서 언급했던 것처럼 대화형 환경 같은 경우 Ctrl + D를 사용하여 종료할 수도 있다.)
t, -time 옵션을 사용하여 컨테이너의 종료 전 대기 시간을 지정할 수도 있다.(기본값 10초)
-time-format 옵션을 사용하면 대기 시간의 형식을 지정할 수도 있다. (기본값 s, 초 단위)
컨테이너 목록 확인
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f19e4b0c3fe8 openjdk:11 "jshell" 25 minutes ago Up 2 seconds 0.0.0.0:8080->8080/tcp mycontainer
ps 명령어를 사용하여 현재 실행 중인 컨테이너들의 목록을 확인할 수 있다.
(실행 중이 아닌 컨테이너의 목록까지 확인하고 싶은 경우 -a나 -all 옵션을 추가하면 된다.)
yejun@DESKTOP-HUJUVSS:~$ docker ps -af "name=mycontainer"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f19e4b0c3fe8 openjdk:11 "jshell" 28 minutes ago Exited (143) 56 seconds ago mycontainer
-f, --filter 옵션을 사용하면 리스트를 필터링하여 조회할 수도 있으며,
당연히 실행 중이 아닌 컨테이너까지 조회하려면 -a 옵션과 함께 사용해야 한다.
아래와 같은 옵션들을 제공한다.
- name: 컨테이너 이름으로 필터링
- label: 커맨드에서 붙인 라벨로 필터링
- exited: 종료된 컨테이너의 종료 코드로 필터링
- status: 컨테이너의 상태로 필터링
- ancestor: 이미지를 공유받은 컨테이너로 필터링
- before: 설정 컨테이너를 기준으로 전에 만들어진 컨테이너 확인
- since: 설정 컨테이너를 기준으로 이후에 만들어진 컨테이너 확인
- -n, --last: 최근 생성한 n개의 컨테이너만 출력
- --format: 출력 형식 지정
- --no-trunc: 모든 정보 출력
- --quiet, -q: 컨테이너 ID만 출력
컨테이너 삭제
$ docker rm [삭제할 컨테이너명 또는 ID]
아래와 같은 옵션들을 제공한다.
- -f, --force: 실행 중인 컨테이너를 강제로 삭제
- -l, --link=false: 해당 컨테이너를 참조하는 링크를 제거
- -v, --volumes=false: 컨테이너와 관련된 볼륨을 제거
'Web' 카테고리의 다른 글
[Kubernetes] 기능 (0) | 2023.07.20 |
---|---|
[Docker] 빌드 (0) | 2023.07.19 |
[Docker] 이미지 (0) | 2023.07.19 |
[Docker] Docker Hub (0) | 2023.07.19 |
Asciidoc 기본 문법 (0) | 2023.07.03 |