Docker - Basic

3 minute read

누군가는 25세에 죽고, 누구는 75세까지 산다.


Docker 기본 명령어

Docker 버전 체크

Docker의 명령은 docker {명령} 형식이며, Root 권한으로 이용해야 한다.


$ docker --version

Docker는 Docker Hub를 통해 이미지를 공유하는 생태계가 구축되어 았다. 리눅스 배포 판 부터 오픈 소스 기반의 환경이 구축되어 있는 Image를 제공하고 있다. docker search를 이용한 검색

Pull 명령으로 이미지 받기


$ docker search nodejs
$ docker pull ubuntu:latest

pull 명령으로 이미지 받기
docker pull {이미지 이름}:{태그}

Images 명령으로 이미지 출력하기


 $ docker images / docker image ls

run 명령어로 컨테이너 생성하기


$ docker run -i -t --name hello ubuntu bin/bash

이미지를 컨테이너로 생성한 후에 Bash 셀로 ubuntu에 접근한다.

docker run {옵션} {이미지 이름} {실행할 파일}
-i(interactive) -t(Pseudo-try) : Bash 셀에 대한 입력 및 출력을 할 수 있다.
–name : 컨테이너의 이름을 지정한다.
여기에서 docker run을 통해 접속할 때 bin/bash를 바로 실행하여 들어갔기 때문에 exit 를 통해서 빠져나오면 컨테이너가 정지됩니다.


# docker 에서 외부로 연결할 포트를 지정할 경우 
# docker container의 6379포트외 외부 80포트를 연결해준다.
$ docker run -d -p 6379:80 --name lines-redis redis-6379:0.1

$ docker run -it -p 5005:5005 ubuntu

# run : 기동  , --name : 이름 지정 , -d : 백그라운드 기동 , -p : 외부/내부 포트 연결 , redis : 이미지 명 
$ docker run --name line-redis -d -p 6379:6379 redis

ps 명령으로 컨테이너 목록 확인하기

ps 명령으로 컨테이너 목록 확인하기
docker ps 형식으로 -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력하고, 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력합니다


$ docker ps -a / docker container ls 

start 명령으로 컨테이너 시작하기

start 명령으로 컨테이너 시작하기
docker start를 통해 container를 기동 시키고, docker ps 로 해당 실행된 컨테이너 상태를 확인한다.


$ docker start hello      

restart 명령으로 컨테이너 시작하기

restart 명령으로 컨테이너 시작하기
docker restart를 통해 container를 기동 시키고, docker ps 로 해당 실행된 컨테이너 상태를 확인한다.


$ docker restart hello

attach 명령으로 컨테이너 시작하기

attach 명령으로 컨테이너 시작하기
bin/bash를 통해 실행되기 때문에 명령을 자유롭게 입력할 수 있지만, DB나 서버 애플리케이션을 실행하면 입력은 할 수 없고, 출력만 보게된다.
exit 또는 ctrl + D 를 통해 종료 가능


$ docker attach hello  

exec 명령으로 외부에서 컨테이너 안의 명령 실행하기

Excel 명령으로 외부에서 컨테이너 안의 명령 실행하기
docker exec {컨테이너 이름} {명령} {매개 변수}
컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없습니다.


$ docker exec hello echo "Hello World"     

stop 명령어로 컨테이너 정지하기

Stop 명령으로 컨테이너 정지하기
docker stop {컨테이너 이름}


$ docker stop hello 

rm 명령으로 컨테이너 삭제하기

rm 명령으로 컨테이너 삭제하기
docker stop {컨테이너 이름}


$ docker rm hello    

rmi 명령으로 이미지 삭제하기

rmi 명령으로 이미지 삭제하기
docker stop {이미지 이름}:{태그}


$ docker rm hello  

hello-python:0.1 이라는 이미지가 생성되었고 이를 실행 시켜 본다.


$ docker run --name hello-flask -d -p 4000:80 hello-python:0.1  

기동을 하였을 때, 아래와 같은 이미지가 표시된다.

  • -d detached mode 흔히 말하는 백그라운드 모드
  • -p 호스트와 컨테이너의 포트를 연결 (포워딩)
  • -v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
  • -e 컨테이너 내에서 사용할 환경변수 설정
  • –name 컨테이너 이름 설정
  • –rm 프로세스 종료시 컨테이너 자동 제거
  • -it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
  • –link 컨테이너 연결 [컨테이너명:별칭]

History 명령으로 이미지의 히스토리를 살펴보기

History 명령으로 이미지의 히스토리를 살펴보기
docker hsitory <이미지 이름="">:<태그>


$ docker history hello:0.1

내가 생성한 이미지의 컨테이너로 부터 파일을 꺼내고 싶을 때

내가 생성한 이미지의 컨테이너로 부터 파일을 꺼내고 싶을 때
docker cp <컨테이너이름>:<경로> <호스트경로>


$ docker cp hello-nginx:/etc/nginx/nginx.conf ./

Commit 명령으로 컨테이너의 변경사항을 이미지로 생성하기

Commit 명령으로 컨테이너의 변경사항을 이미지로 생성하기
docker commit <옵션> <컨테이너 이름=""> <이미지 이름="">:<태그> -a "Foo Bar <foo@bar.com>" -m "add hello.txt"

diff명령으로 컨테이너에서 변경된 파일 확인하기

diff 명령으로 컨테이너에서 변경된 파일 확인하기
docker diff <컨테이너 이름=""> A : 추가한 파일 B : 변경된 파일 C : 삭제된 파일


$ docker diff hello

inspect 명령으로 세부 정보 확인하기

inspect 명령으로 세부 정보 확인하기
docker inspect <이미지 또는="" 컨테이너="" 이름="">


$ docker inspect hello

Docker Logs - 컨네이너에서 발생하는 다양한 로그 확인

컨테이너의 로그를 확인하는 명령은 docker logs를 사용한다. docker logs 명령은 컨테이너의 표준 출력을 표시함으로써 애플리케이션 상태를 알 수 있다.


$ docker logs mariadb

# 컨테이너의 로그가 너무 많아 읽기 힘들면 --tail 옵션을 사용하여 마지막 로그부터 지정한 라인까지 출력할 수 있다. 
$ docker logs --tail 10 mariadb 


# --since 옵션은 입력받은 유닉스 시간 이후의 로그를 확인할 수 있으며 -t 옵션으로 타임 스탬프를 표시할 수도 있다. 
$ docker logs --since 15491503000 -t mariadb 

# -f 옵션을 이용하여 실시간 로그 확인 
$ docker logs --tail 10 -f mariadb                       

로깅 드라이버
로깅 드라이버는 기본적으로 json-file 로 설정되지만 도커 데몬 시작 옵션에서 –log-drive


$ docker run -it --log-driver none alpine ash

# 실행중인 컨테이너의 로깅 드라이버를 확인하려면 docker inspect 명령을 실행한다. 
$ docker inspect -f '' <CONTAINER>

$ docker inspect -f '' mariadb

# 컨테이너 로그는 json 형태로 docker 내부에 저장된다. 
$ /var/lib/docker/cotainers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

# docker 명령을 통해 직접 이용할 경우 
$ docker run --log-opt max-size=100m --log-opt max-file=5 my-lines:lastest