본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로인프라 › 컨테이너 › Docker

Docker container

목차

Docker container

[컨테이너 라이프 사이클]

컨테이너 라이프 사이클

컨테이너 라이프 사이클

컨테이너 조작 기본 명령

  • 컨테이너 생성

이미지로부터 컨테이너를 생성한다. 이 명령을 수행하면 이미지에 포함될 리눅스의 디렉토리와 파일들의 스냅샷을 취한다.

$ docker container create 명령
  • 컨테이너 생성 및 시작

이미지로부터 컨테이너를 생성하고, 컨테이너 상에서 임의의 프로세스를 시작

$ docker container run [옵션] 이미지명[:태그명] [인수]
옵션설명
–attach, -a표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 attach
–cidfile컨테이너 ID를 파일로 출력
–detach, -d컨테이너를 생성하고 백그라운드에서 실행
–interactive, I컨테이너의 표준입력을 연다
–tty, -t단말기 디바이스 사용
옵션설명
—attach, -a표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 attach
—cidfile컨테이너 ID를 파일로 출력
—detach, -d컨테이너를 생성하고 백그라운드에서 실행
—interactive, I컨테이너의 표준입력을 연다
—tty, -t단말기 디바이스 사용

백그라운드 실행 옵션

옵션설명
–detach, -d백그라운드에서 실헹
–user, -u사용자명을 지정
–restart=[no OR on-failure OR on-failure:횟수n OR always OR unless-stopped]명령의 실행 결과에 따라 재시작 하는 옵션
–rm명령 실행 완료 후에 컨테이너를 자동으로 삭제
옵션설명
—detach, -d백그라운드에서 실헹
—user, -u사용자명을 지정
—restart=[no OR on-failure OR on-failure:횟수n OR always OR unless-stopped]명령의 실행 결과에 따라 재시작 하는 옵션
—rm명령 실행 완료 후에 컨테이너를 자동으로 삭제

네트워크 설정 옵션

옵션 설명
--add-host=[호스트명:IP 주소] 컨테이너의 /etc/hosts에 호스트 명과 IP 주소 정의
--dns=[IP주소] 컨테이너용 DNS 서버의 IP주소 지정
--expose 명령의 실행 결과에 따라 재시작 하는 옵션
--mac-address=[MAC 주소] 명령 실행 완료 후에 컨테이너를 자동으로 삭제
--net=[bridge OR none OR container: OR host OR NETWORK] 컨테이너의 네트워크를 지정
--hostname, -h 컨테이너 자신의 호스트명을 지정
--publish, -p[호스트의 포트 번호]:[컨테이너의 포트 번호] 호스트와 컨테이너의 포트 매핑
--publish-all, -p 호스트의 임의의 포트를 컨테이너에 할당
옵션설명
–add-host=[호스트명:IP 주소]컨테이너의 /etc/hosts에 호스트 명과 IP 주소 정의
–dns=[IP주소]컨테이너용 DNS 서버의 IP주소 지정
–expose명령의 실행 결과에 따라 재시작 하는 옵션
–mac-address=[MAC 주소]명령 실행 완료 후에 컨테이너를 자동으로 삭제
–net=[bridge OR none OR container: OR host OR NETWORK]컨테이너의 네트워크를 지정
–hostname, -h컨테이너 자신의 호스트명을 지정
–publish, -p[호스트의 포트 번호]:[컨테이너의 포트 번호]호스트와 컨테이너의 포트 매핑
–publish-all, -p호스트의 임의의 포트를 컨테이너에 할당
옵션설명
—add-host=[호스트명:IP 주소]컨테이너의 /etc/hosts에 호스트 명과 IP 주소 정의
—dns=[IP주소]컨테이너용 DNS 서버의 IP주소 지정
—expose명령의 실행 결과에 따라 재시작 하는 옵션
—mac-address=[MAC 주소]명령 실행 완료 후에 컨테이너를 자동으로 삭제
—net=[bridge OR none OR container:<name OR id> OR host OR NETWORK]컨테이너의 네트워크를 지정
—hostname, -h컨테이너 자신의 호스트명을 지정
—publish, -p[호스트의 포트 번호]:[컨테이너의 포트 번호]호스트와 컨테이너의 포트 매핑
—publish-all, -p호스트의 임의의 포트를 컨테이너에 할당
  • 컨테이너 가동 확인
$ docker container stats [식별자]
  • 컨테이너 시작

정지중인 컨테이너를 시작하거나 할당된 컨테이너 식별자를 지정하여 컨테이너를 시작

$ docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]
옵션설명
–attach, -a표준 출력, 오류 출력을 연다
–interactive, -l컨테이너의 표준 입력을 연다
옵션설명
—attach, -a표준 출력, 오류 출력을 연다
—interactive, -l컨테이너의 표준 입력을 연다
  • 컨테이너 종료

실행중인 컨테이너를 정지시킬때 사용

$ docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]
옵션설명
–time, -t컨테이너의 정지시간을 지정(기본값 10초)
옵션설명
—time, -t컨테이너의 정지시간을 지정(기본값 10초)
  • 컨테이너 재시작할

컨테이너를 재시작할 때 사용한다.

$ docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]
옵션설명
–time, -t컨테이너의 재시작 시간을 지정(기본값 10초)
옵션설명
—time, -t컨테이너의 재시작 시간을 지정(기본값 10초)
  • 컨테이너 삭제
$ docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]
옵션설명
–force, -f강제로 삭제
–volumes, -v할당한 볼륨을 삭제
옵션설명
—force, -f강제로 삭제
—volumes, -v할당한 볼륨을 삭제
  • 컨테이너 중단 및 재개

실행중인 컨테이너의 프로세스를 모두 중단시킬 때 사용한다.

$ docker container pause <컨테이너 식별자>

## webserver인 컨테이너
$ docker container pause webserver
  • 컨테이너 재개
$ docker container unpause webserver

가동 컨테이너에서 프로세스 실행(docker container exec)

가동중인 컨테이너에서 새로운 프로세스를 실행할때 docker continaer exec명령을 사용한다. 예를들어 백그라운드에서 실행중인 컨테이너에 액세스 하고 싶을 때 임의의 명령을 실행 할 수 있다.

$ docker container exec [옵션] <컨테이너 식별자> <실행할 명령> 인수

지정할 수 있는 옵션

옵션설명
–detach, -d백그라운드에서 실헹
–interactive, -i컨테이너의 표준 입력을 연다.
–tty, -ttty(단말 디바이스)를 사용한다
–user, -u사용자명을 지정
옵션설명
—detach, -d백그라운드에서 실헹
—interactive, -i컨테이너의 표준 입력을 연다.
—tty, -ttty(단말 디바이스)를 사용한다
—user, -u사용자명을 지정

컨테이너에서 bash 실행

$ docker container exec -it webserver /bin/bash

‘hello’ echo명령 실행

‘hello’ echo명령 실행

$ docker container exec -it webserver /bin/echo 'hello'
hello

가동 컨테이너의 프로세스 확인(docker container top)

$ docker container top webserver
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4328                4302                0                   08:41               ?                   00:00:00            nginx: master process nginx -g daemon off;
uuidd               4403                4328                0                   08:41               ?                   00:00:00            nginx: worker process
uuidd               4404                4328                0                   08:41               ?                   00:00:00            nginx: worker process
uuidd               4405                4328                0                   08:41               ?                   00:00:00            nginx: worker process

가동 컨테이너의 포트 전송 확인(docker container port)

실행되고 있는 프로세스가 전송되고 있는 포트 확인

$ docker container port webserver
80/tcp -> 0.0.0.0:80

컨테이너 안의 파일을 복사(docker container cp)

컨테이너 안의 파일을 호스트에 복사할 때 docker container cp 명령을 사용한다.

$ docker container cp <컨테이너 식별자>:<컨테이너 안의 파일 경로> <호스트의 디렉토리 경로>
$ docker container cp <호스트 파일> <컨테이너 식별자>:<컨테이너 안의 파일 경로>

webserver의 컨테이너 안에 있는 /etc/nginx/nginx.conf 파일을 /tmp/에 복사할 때

$ docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf

$ ls -al /tmp/nginx.conf
-rw-r--r--  1 pscheol  wheel  648  7 20 00:06 /tmp/nginx.conf

호스트 디렉토리에 있는 test.sh 파일을 webserver 컨테이너 /tmp 폴더에 복사

$ docker container cp container cp ./test.sh webserver:/tmp/test.sh

## 복사됬는지 확인
$ docker container exec -it webserver /bin/bash
root@f29c95b346af:/tmp# ls
test.sh

컨테이너 조작의 변경확인 (docker container diff)

컨테이너 안에서 어떤 조작을 했거나 이미지로부터 생성되었을 때 달라진 점을 확인하기 위한 명령어.

$ docker container diff webserver

C /run
A /run/nginx.pid
C /tmp
A /tmp/test.sh
C /root
A /root/.bash_history
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf

같은 카테고리의 글