개발자의 길

Docker 기본 명령어 본문

13. DOCKER

Docker 기본 명령어

자르르 2019. 6. 18. 09:43


도커 명령어

버전 확인하기

$ docker -v # 버전 확인

Docker version 18.09.0, build 4d60db4


도커 컨테이너 내부 쉘에서 나가기

도커 컨테이너 내부 쉘에서 나가는 방법은 두 가지가 있습니다.

  • exit : 명령어로 exit를 누르고 엔터
  • Ctrl + D : 해당 단축키를 누르면 바로 종료

위의 두 가지 방법은 컨테이너를 종료시키고 나오는 방법입니다. 아래 방법은 컨테이너를 종료시키지 않고 나오는 방법 입니다.

  • Ctrl + P, Q : 컨테이너를 종료시키지 않고 나오기 (다시 들어가려면 $ docker attach [컨테이너 명])

도커 이미지 가져오기

아래 명령어를 사용하면 도커 공식 이미지 저장소에서 이미지를 내려받습니다.

$ docker pull [이미지 이름]:[태그]

 

예제를 보도록 하겠습니다, 그럼 도커 공식 이미지 저장소에서 centos:7 이미지를 다운받게 됩니다.

ex)

$ docker pull centos:7

 


이미지 확인하기

$ docker images

REPOSITORY     TAG             IMAGE ID             CREATED        SIZE

ubuntu            14.04            7e4b16ae8b23      2 weeks ago    188MB

centos             7                 1e1148e4cc2c       5 weeks ago    202MB


컨테이너 생성하기

이미지로 컨테이너 생성하기

$ docker create [옵션] [이미지 이름]:[태그]

예제를 보겠습니다.

$ docker create -i -t centos:7
  • -i : 상호 입출력
  • -t : tty를 활성화하여 bash 쉘을 사용

컨테이너 실행하기

만들어진 도커 컨테이너를 실행하는 명령어 입니다.

$ docker start centos:7

 


컨테이너 들어가기

도커의 내부쉘로 들어가는 명령어 입니다.

$ docker attach centos:7

 


컨테이너 만들고 실행하기

위의 생성 -> 실행 -> 들어가기 까지 한번에 해주는 명령어 입니다.

$ docker run [옵션] [이미지 이름]:[태그]
  • -i : 상호 입출력
  • -t : tty를 활성화하여 bash 쉘을 사용

ex)

$ docker run -i -t ubuntu:14.04

 

보통은 컨테이너를 생성함과 동시에 시작하기 때문에 run 명령어를 더 많이 사용합니다.


컨테이너 > 이미지로 재생성

port 설정 및 다른 옵션을 주거나,

기존 컨테이너에서 설치하고 수정한 내역을 다시 이미지화 하기 위해 사용합니다.

$ docker commit [기존container명] [새로운 이미지이름]

주의할 점은 복사할 기존 컨테이너를 stop 하고 해야한다.

stop -> commit -> 새로운 이미지로 run


컨테이너 목록 확인

만들어진 컨테이너 목록을 확인할 수 있습니다.

$ docker ps

CONTAINER ID       IMAGE            COMMAND    CREATED         STATUS          PORTS                NAMES

aab67382350b       ubuntu:14.04     "/bin/bash"    16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp mywebserver

대신 위의 명령어는 현재 실행중인 컨테이너 목록만 확인할 수 있기 때문에, 정지된 컨테이너까지 보고 싶으면, 아래와 같이 -a 옵션을 같이 넣어줍니다.

 

$ docker ps -a

CONTAINER ID    IMAGE          COMMAND     CREATED        STATUS                        PORTS     NAMES

99627ff61fd7      centos:7        "/bin/bash"      42 hours ago   Exited (0) 42 hours ago                 mycentos

1758dcf92334     ubuntu:14.04  "/bin/bash"     43 hours ago   Exited (255) 25 hours ago               determined_brattain

  • CONTAINER ID : 컨테이너에게 자동으로 할당되는 고유한 ID
  • IMAGE : 컨테이너를 생성할 때 사용된 이미지 이름
  • COMMAND : 컨맨드는 컨테이너가 시작될 때 실행될 명렁어, 기본은 /bin/bash 명령어라 명령을 쓸 수 있습니다.
  • CREATED : 컨테이너가 생성되고 난 뒤 흐른 시간
  • STATUS : 컨테이너의 상태 ex) Up(실행 중), Exited(종료), Pause(일시 중지)
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트
  • NAMES : 컨테이너의 고유한 이름, --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의의로 설정

컨테이너 이름 변경

$ docker rename [기존 이름] [변경 하고자 하는 이름]
$ docker rename determined_brattain my_container

 

결과

$ docker rename determined_brattain my_container

$ docker ps -a

CONTAINER ID         IMAGE             COMMAND   CREATED           STATUS                         PORTS    NAMES

99627ff61fd7           centos:7           "/bin/bash"     42 hours ago     Exited (0) 42 hours ago                 mycentos

1758dcf92334          ubuntu:14.04     "/bin/bash"     44 hours ago     Exited (255) 25 hours ago               my_container

 


컨테이너 삭제

$ docker rm [컨테이너 이름]

 

결과

$ docker rm mycentos

mycentos

 

만약 container가 실행 중이면 종료하고 삭제를 하거나 -f 옵션을 이용해서 강제로 삭제를 해야합니다.

$ docker stop mycentos

$ docker rm mycentos

 

$ docker rm -f centos //stop을 안한 컨테이너 강제 삭제

 

한번에 모든 컨테이너를 삭제하려면 prune 명령어를 통해 삭제할 수 있습니다.

$ docker container prune

WARNING! This will remove all stopped containers.

Are you sure you want to continue? [y/N]

 


*** -q와 -a 옵션

  • -q : 컨테이너 ID만 출력
  • -a : 컨테이너 전체 출력

ex)

$ docker stop $(docker ps -a -q)

$ docker rm $(docker ps -a -q)

 


컨테이너 외부에 노출

컨테이너는 가상 머신과 마찬가지로 가상 IP를 할당 받습니다.

테스트를 위해서 network_test란 컨테이너를 만들어 보겠습니다.

 

기본적으로 도커는 172.17.0.x의 IP부터 순차적으로 할당합니다.

 

$ docker run -i -t --name network_test ubuntu:14.04

root@7b5213595de1:/# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.39  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:acff:fe11:27  prefixlen 64  scopeid 0x20
        ether 02:42:ac:11:00:27  txqueuelen 0  (Ethernet)
        RX packets 6  bytes 468 (468.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 558 (558.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 1  bytes 28 (28.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 28 (28.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

아무 설정을 하지 않으면 기본적으로 컨테이너는 외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근 가능합니다

'13. DOCKER' 카테고리의 다른 글

PRIVATE DOCKER REGISTRY 만들기  (0) 2020.06.17
docker 로 mysql 설치 실행  (0) 2020.06.11
[Docker] Centos 6 - Docker 설치  (3) 2019.12.04


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments