리눅스기반 컨테이너는 도커는 맥에서 돌아가기 위해 Docker for mac 설치 하거나 가상머신 위에 리눅스를 설치 해야한다.

여기선 Docker for mac 설치하고 실습을 해보겠다.

docker version

client와 server의 정보가 나오는데 이것은 커맨드를 입력했을때 클라이언트가 서버로 명령을 전달하는것이다.

ubunt 컨테이너 실행

docker run ubuntu:16.04

이미지가 없다면 docker hub에서 pull한 후 컨테이너를 create하고 start까지 해준다.

하지만 프로세스가 할게 없기 때문에 바로 종료된다.

그래서

docker run --rm -it ubuntu:16.04 /bin/bash

/bin/bash 명령을 붙이면 종료되지 않고 유지 된다.

--rm은 종료시 컨테이너 삭제 하라는거고 -it는 터미널 입력을 위한 것이다 .

다음으로 redis 컨테이너를 만들어 보자.

docker run -d -p 1234:6379 redis

-d는 백그라운드로 실행하기 위한거고 -p는 포트포워딩 위한것이다. 호스트 1234 <-> container 6379

telnet localhost 1234 으로 접속 가능

자 그럼 mysql 서버 컨테이너도 실행해보자.

docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql:5.7

-e는 환경변수 설정이고 --name은 컨테이너ID(과학자이름으로 자동생성됨)대신에 원하는 이름으로 설정하는 것이다.

컨테이너 목록 확인

docker ps

-a 붙이면 종료된 컨테이너도 보임. 컨테이너는 종료되어도 삭제되지 않고 남아있어서 명시적 삭제 필요.

docker stop 컨테이너ID

컨테이너 ID는 앞부분만 입력해도 됨

컨테이너 삭제

docker rm 컨테이너ID 컨테이너ID

종료된것 일괄 삭제

docker rm -v $(docker ps -a -q -f status=exited)

이미지 확인

docker images

이미지 다운로드

docker pull ubuntu:14.04

run일때 자동 다운로드 되는데 pull은 보통 최신버전으로 다시 다운 받을 때 쓰는듯

이미지 삭제

docker rmi 컨테이너ID

로그 보기

docker logs --tail 10 컨테이너id

실시간 로그보기

docker logs -f 컨테이너id

도커는 로그를 표준 스트림 (stdout, stderr)를 수집하기 때문에 프로세스의 로그 설정을 파일이 아닌 표준출력으로 바꿔야 함.

중요한 점은 컨테이너의 로그파일은 json방식으로 어딘가에 저장되서 용량 커질 수 있음.

컨테이너 명령어 실행하기 (exec)

컨테이너 관리하다 보면 실행중인 컨테이너에 들어가보거나 컨테이너의 파일을 실행하고 싶을 때가 있다.

run하고 차이점은 실행중인 컨테이너에 명령을 실행시킨다는것.

docker exec -it mysql /bin/bash

실행중인 mysql에 bash로 실행시켰다.

컨테이너 업데이트

pull -> 기존컨테이서 stop,rm-> 새컨테이너 run

그냥 기존 컨테이너 삭제하면 데이타가 날라간다.

그래서 데이타를 외부에 저장되게 호스트os에 저장 하게 해야 된다.

# before
docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql:5.7

# after
docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  -v /my/own/datadir:/var/lib/mysql \ # <- volume mount
  mysql:5.7

이제 데이터베이스 파일은 호스트의 /my/own/datadir 디렉토리에 저장되고 컨테이너를 삭제해도 데이터는 사라지지 않는다.

results matching ""

    No results matching ""