ETC.

Docker 주요 명령어

Kyle79 2020. 5. 3. 15:02

docker search

Docker Hub 에서 이미지를 검색합니다.


docker search [옵션] <검색어>

--automated=false : Automated Build만 표시
--no-trunc=false : 모든 결과를 다 표시
-s[--stars=n] : star 수가 n개 이상인 결과만 표시 
--limit n : 최대 n개만 표시 

 

docker build

Dockerfile 를 빌드하여, 이미지를 생성합니다.


docker build <옵션> <Dockerfile 경로>

--tag : 이미지 이름과 태그를 설정할 수 있습니다. 이미지 이름만 설정하면 태그는 latest로 설정됩니다.
 
 

 

docker run


docker run <옵션> <이미지:태그>

--name : 컨테이너 이름을 설정합니다. 이름이 없을 경우 이미지명으로 자동으로 넘버링이 붙습니다.
-d : 컨테이너를 백그라운드로 실행합니다
-p : 포트를 설정합니다.
     예를 들어, <80:80> 옵션으로 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하고 외부에 노출합니다. 
     이렇게 설정한 뒤 http://<호스트 IP>:80에 접속하면 컨테이너의 80번 포트로 접속됩니다
-v : 도커 외부의 시스템과 파일볼륨을 연결합니다.
     예를 들어, </root/data:/data> 옵션으로 호스트의 /root/data 디렉터리를 컨테이너의 /data 디렉터리에 연결합니다. 
    /root/data 디렉터리에 파일을 넣으면 컨테이너에서 해당 파일을 읽을 수 있습니다
--link : 컨테이너간을 별칭으로 연결합니다. <컨테이너 이름>:<별칭> 형식.
         예를 들어, <db:db> 으로 컨테이너 내에서 db 컨테이너를 별칭으로 호출할 수 있습니다.
 
 

별칭과 IP 주소
다음과 같이 docker inspect 명령으로 web 컨테이너의 세부 정보에서 hosts 파일 경로를 구한 뒤,

cat 명령으로 내용을 살펴봅니다. (`는 탭키 위에 있는 문자입니다).


$ cat `sudo docker inspect -f "{{ .HostsPath }}" web`

db는 --link db:db에서 설정한 별칭이고, 172.17.0.12는 db 컨테이너의 IP 주소입니다.

컨테이너를 연결하면 이렇게 hosts 파일에 IP 주소가 자동으로 설정되기 때문에 별칭을 통해 연결한 컨테이너에 접속할 수 있습니다.

 

docker network

link 기능을 컨테이너에 국한하지 않고, 네트워크를 생성할 수 있는 기능이 정식으로 추가되었습니다.

이때 네트워크를 생성하고 컨테이너를 연결시키면 해당 네트워크 안에 속한 컨테이너끼리는 서로 접속할 수 있습니다.

먼저 docker network create 명령으로 hello-network를 생성합니다.


$ sudo docker network create hello-network

DB 컨테이너를 생성하면서 hello-network에 연결합니다.


$ sudo docker run --name db -d --network hello-network mongo

web 컨테이너를 생성하면서 hello-network에 연결합니다.


$ sudo docker run --name web -d -p 80:80 --network hello-network nginx

web 컨테이너에서 Bash 셸을 실행한 뒤에 ping을 실행해봅니다.


$ sudo docker exec -it web bash
root@ed384f006421:/# ping db
PING db (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.023 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.058 ms

이렇게 같은 네트워크에 속한 컨테이너끼리는 컨테이너 이름으로 접속할 수 있습니다.

 

docker exec

외부에서 컨테이너 안의 명령을 실행합니다.


docker export <옵션> <컨테이너 이름, ID> <명령> <매개 변수>

-d, --detach=false: 명령을 백그라운드로 실행합니다.
-i, --interactive=false: 표준 입력(stdin)을 활성화하며 
                         컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다.
-t, --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 
                 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.

ex>
$ docker exec -d hello redis-server
$ docker exec -it hello /bin/bash

 

docker system prune

사용하지 않는 도커 이미지 및 컨테이너를 삭제합니다.


docker container prune : 중지된 모든 컨테이너를 삭제한다.
docker image prune : 이름 없는 모든 이미지를 삭제한다.
docker network prune : 사용되지 않는 도커 네트워크를 모두 삭제한다.
docker volume prune : 도커 컨테이너에서 사용하지 않는 모든 도커 볼륨을 삭제한다.
docker system prune : 중지된 모든 컨테이너, 사용되지 않은 모든 네트워크,
                      하나 이상의 컨테이너에서 사용되지 않는 모든 이미지를 삭제한다.
                      
                      

 

docker stats

도커 컨테이너의 상태를 확인합니다.


docker stats <컨테이너명>

-a, --all : 모든 컨테이너에 관하여 출력 (기본값)
--no-steam : 실시간 스트리밍이 아닌 한번 출력

'ETC.' 카테고리의 다른 글

Git Merge/Pull Request  (0) 2020.07.13
Docker Image 및 Container 명령어  (0) 2020.05.03
Docker Hub  (0) 2020.05.03
Dockerfile 기본 명령어  (0) 2020.05.01
vscode (mac terminal, server remote sync)  (0) 2020.04.24