Docker

Virtual Machine 같이 CPU나 기타 자원들을 완전히 가상화해서 컴퓨터를 새로 만들어내는 것이 아니라, 리눅스의 컨테이너 기술을 이용해서 가상화를 하지않고 프로세스만 경유해서 빠르게 실행시키는 기술.

장점

  • 기존 시스템 자원을 공유함으로써 OS를 다시 설치하는 게 아니다.

  • 리얼 머신에서 돌아가면서 가상머신의 효과를 낸다.

docker 설치

패키지 관리자가 설치된 이미지 받아오기

  • docker pull ubuntu:14.04 (우분투 14.04 버전 이미지 받아오기)

  • 이미지 Search 하는 법 : docker search ubuntu (우분투라는 이름을 가진 이미지들을 검색)

  • Docker 홈페이지 들어가서도 우분투 버전 검색 가능

이미지 : 실행파일과 라이브러리가 조합된 것

컨테이너 : 이미지를 실행한 상태

docker 실행

docker run -i -t ubuntu:14.04 /bin/bash

-i 옵션 : Interactive. 사용자가 입출력 가능하게

-t 옵션 : sudo tty. 가상 터미널환경을 에뮬레이션

/bin/bash : Main 실행파일로 컨테이너 안의(우분투) bash 쉘을 이용하겠다. (Main 실행파일이 종료되면 컨테이너도 종료된다)

이제 root 컨테이너 안에서 apt-get install로 git 등을 설치할 수 있다.

exit -> bash 쉘의 종료 -> 컨테이너의 종료로 이어진다.

docker 이미지의 상태 보기

docker ps -a

※ docker 컨테이너를 종료하지 않고 실행상태에서 빠져나올 수 있다.

docker 재실행

docker start [컨테이너_이름]
  • start는 실행만 하고 들어가진 않음
docker attach [컨테이너_이름]
  • attach 명령은 실행 후 들어감

docker 컨테이너 종료 없이 빠져나오기

  • ctrl + P + Q를 누르면 종료 없이 빠져나온다 (다른 특별한 명령어는 없는 듯)

docker 실행 종료

docker stop [컨테이너_이름]

docker 컨테이너 삭제

docker rm [컨테이너_이름]

docker 이미지 삭제

docker rmi [이미지_이름]
  • 컨테이너 삭제와 이미지 삭제는 다르다.

  • 이미지 하나로 여러개의 컨테이너를 실행할 수 있다.

  • 컨테이너에 설치한 프로그램들은 이미지에 영향을 끼치지 않는다. 컨테이너 자체에만 저장됨 **

※ 운영체제 말고 내가 필요한 어플리케이션만 받아온다 = 어플리케이션이 설치된 이미지를 받아오는 것

nginx가 설치된 이미지 받아오기

docker pull nginx:latest

nginx 백그라운드 실행

docker run -d --name hello-nginx nginx:latest
  • -d 옵션 : 백그라운드 실행

  • -p 옵션 : 포트번호 설정 가능 (8000:80 -> 외부의 8000번 포트로 들어왔을 때 docker의 80번 포트로 보내라)

  • --name 옵션 : 컨테이너의 이름을 지정

exec command

main process 이외에 다른 실행파일을 실행할 수 있도록 함.

docker run -i -t --name hello ubuntu:14.04 /bin/bash
ctrl + pq로 빠져나옴
docker ps
docker exec hello touch /hello.txt

-> hello 컨테이너의 명령어를 외부에서 사용한다. (컨테이너 안에 hello.txt 파일을 생성)

※ 외부에 있는 파일 또는 폴더를 docker 컨테이너에 링크하면 컨테이너 내에서 외부 디렉토리를 이용 가능하다.

docker image 생성하기

이미지 생성

docker build --tag hello:0.1 .

컨테이너 생성

docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1

이미지 히스토리 살펴보기

docker history hello:0.1

컨테이너에서 파일 꺼내기

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

컨테이너의 변경 사항을 이미지로 저장하기

docker commit -a "Foo Bar <[email protected]>" -m "add hello.txt" hello-nginx hello:0.2

컨테이너에서 변경된 파일 확인하기

docker diff hello-nginx

results matching ""

    No results matching ""