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 : 실시간 스트리밍이 아닌 한번 출력