Docker란
컨테이너 기반(프로세스)의 오픈소스 가상화 플랫폼(OS가상화와 조금은 다른 개념)
Docker의 주요 개념
-컨테이너
-도커이미지
-오버레이 네트워크
-유니온 파일 시스템
도커이미지란
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않음
도커이미지 관리
-URL방식으로 태그를 붙일 수 있음
-docker.io/library/ubuntu:14.04(public)
-my.private.image:5000/hello-app:123(private)
컨테이너란
도커이미지를 실행한 상태, 추가되거나 변하는 값은 컨테이너에 저장
도커이미지와 컨테이너관계
도커이미지에서 여러개의 컨테이너를 생성가능
컨테이너의 상태가 바뀌거나 삭제되어도 도커이미지는 변하지 않고 그대로 남아있음
도커이미지 배포서버
-docker hub(public)
-docker registry(private)
도커 이미지 만들기
-dockerfile 이용
-예시
# vertx/vertx3 debian version FROM subicura/vertx3:3.3.1 MAINTAINER chungsub.kim@purpleworks.co.kr
ADD build/distributions/app-3.3.1.tar / ADD config.template.json /app-3.3.1/bin/config.json ADD docker/script/start.sh /usr/local/bin/ RUN ln -s /usr/local/bin/start.sh /start.sh
EXPOSE 8080 EXPOSE 7000
CMD ["start.sh"] |
도커설치(윈도우)
윈도우용 설치 조건
-Windows 10 Enterprise, Professional 또는 Education
-두 번째 수준 주소 변환(SLAT)을 사용하는 64비트 프로세서.
-VM 모니터 모드 확장(Intel CPU의 VT-c)을 지원하는 CPU.
-최소 4GB의 메모리
[명령어]
1.도커버젼 확인
docker version
client와 server정보가 출력되면 설치 완료
2. 컨테이너 실행하기(이미지가 저장되었는지 확인하고 없다면 다운로드 한후 컨테이너를 생성하고 시작함)
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
ex) docker run ubuntu:16.04 -> 뭘 하라는 명령어를 주지 않았기 때문에 컨테이너는 생성되자마자 종료됨
ex) docker run --rm -it ubuntu:16.04 /bin/bash -> 컨테이너내부의 명령어 프롬프트 띄우기
cat /etc/isssue입력
ls입력
exit로 빠져나옴
-it 옵션은 키보드 입력
--rm 프로세스가 종료되면 컨테이너가 자동으로 삭제
ex) docker run -d -p 1234:6379 redis
-d 옵션은 background로 실행되도록 하는 것
-p 옵션은 컨테이너 포트를 호스트의 포트로 연결
호스트의 1234 포트를 컨테이너의 6379포트로 연결
telnet localhost 1234 입력
ctrl + c
ex) docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7
-e 환경변수(mysql docker hub에 여러가지 환경변수 있음)
--name 옵션을 이용하여 컨테이너에 읽기 어려운 ID대신 쉬운 이름을 부여할 예정
--name 생략하면 도커가 자동으로 이름을 지어줍니다
mysql -h127.0.0.1 -uroot 입력
show databases; 입력
3. 컨테이너 목록 확인
docker ps [OPTIONS]
ex)docker ps -a
4. 컨테이너 중지하기
docker stop [OPTIONS] CONTAINER [CONTAINER...]
ex) docker stop ${TENSORFLOW_CONTAINER_ID}
***도커 ID의 전체 길이는 64자리 입니다. 하지만 명령어의 인자로 전달할 때는 전부 입력하지 않아도 됩니다. 예를 들어 ID가 abcdefgh...라면 abcd만 입력해도 됩니다. 앞부분이 겹치지 않는다면 1-2자만 입력해도 됩니다.
5. 컨테이너 제거하기
docker rm [OPTIONS] CONTAINER [CONTAINER...]
ex)docker rm ${UBUNTU_CONTAINER_ID} ${TENSORFLOW_CONTAINER_ID}
ex)docker rm -v $(docker ps -a -q -f status=exited) 한번에 삭제
6. 도커 이미지 목록 확인하기
docker images [OPTIONS] [REPOSITORY[:TAG]]
ex) docker images
7. 도커 이미지 다운
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
ex) docker pull ubuntu:14.04
8. 도커 이미지 삭제
docker rmi [OPTIONS] IMAGE [IMAGE...]
ex)docker images # get image ID
docker rmi ${TENSORFLOW_IMAGE_ID}
9. 컨테이너 로그 보기
docker logs [OPTIONS] CONTAINER
ex) docker logs ${WORDPRESS_CONTAINER_ID}
ex) docker logs --tail 10 ${WORDPRESS_CONTAINER_ID} 마지막 10줄
ex) docker logs -f ${WORDPRESS_CONTAINER_ID} 실시간
10. 컨테이너에서 실행
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
run명령어는 새로 컨테이너를 만들어서 실행하고
exec는 실행중인 컨테이너에 명령어를 내리는 것이 다름
ex) docker exec -it mysql /bin/bash
ex) docker exec -it mysql mysql -uroot
도커 컨테이너를 업데이트
-새버전의 이미지를 다운(pull) 기존컨테이너를 삭제(stop, rm) 새 이미지를 기반으로 새 컨테이너를 실행(run) 하면 됨
컨테이너 삭제시 유지해야 되는 데이터 보관
-클라우드 서비스(아마존 S3)
-데이터 볼륨(호스트의 디렉토리에 마운트)
ex)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디렉토리를 컨테이너의 /var/lib/mysql디렉토리로 마운트 하였습니다. 이제 데이터베이스 파일은 호스트의 /my/own/datadir디렉토리에 저장되고 컨테이너를 삭제해도 데이터는 사라지지 않습니다.
Docker compose
도커는 복잡한 설정을 쉽게 관리하기 위해 YAML방식의 설정파일을 이용한 docker compse라는 툴을 제공함
docker를 설치하면 깁노적으로 설치되어있음
docker-compose version 으로 버젼확인
overlay network
http://naver.me/FnTD925p오버레이 네트워크의 중요한 처리(상자에 넣어 라벨을 붙이는 처리)를 ‘캡슐화’라고 합니다. 이 장치의 경우, 캡슐화라는 처리를 해서 캡슐로부터 내용을 꺼내 보낼 곳으로 데이터를 보내는 작업을 하거나, 누가 어떤 공장에 있는지를 작업자 Y씨나 Z 씨에게 적절히 알려주는 역할(기능)이 필요합니다. 사실 요즘은 Hyper-V 등과 같은 서버 가상화가 그 역할을 담당할 수 있게 되어 있습니다.
즉, 지금까지 라우터나 스위치 등과 같은 물리 네트워크 기기가 담당하던 처리의 일부를 서버 가상화가 담당해주는 것입니다. 이로써 네트워크 사이에 데이터를 보내는 물리적인 네트워크 기기의 종류에 구애받지 않게 됩니다. 따라서 싼 가격에 심플한 기기를 잘 활용할 수 있으면 ‘비교적 비싸다’라고 여겨지는 네트워크 기기의 비용을 줄일 수 있습니다.