기존 가상화 시스템인 VMware, VirtualBox 등과 달리 Guest OS 를 설치하지 않고 Host OS 의 자원을 공유해서 사용할 수 있어 빠른 장점이 있다.
(기존 가상화 시스템은 게스트 OS 와 호스트 OS 를 사이에 Hypervisor 가 존재하고 이과정으로 인해 전반적인 속도 저하가 발생한다.)
도커는 이미지(image)라는 일종의 파일 묶음을 컨테이너(container)라는 일종의 실행환경 인스턴스로 만들어 사용하게 된다.
도커는 리눅스에서 동작하지만 Mac 이나 Windows 에서 Docker ToolBox 를 이용해서 사용할 수 있다.
# 윈도우에서 docker 설치하기(legacy)
# DockerToolBox 다운로드 https://www.docker.com/products/docker-toolbox
# 아래 그림 처럼 docker compose, virtualbox, kitematic 를 모두 설치하자.
# DockerToolBox 다운로드 https://www.docker.com/products/docker-toolbox
# 아래 그림 처럼 docker compose, virtualbox, kitematic 를 모두 설치하자.
# Docker QuickStart Terminal 실행하면 도커의 마스코트 고래가 짜잔~ㅎ
# 참고로 초기 실행시 환경 설정으로 느리고 다음 실행 부터는 빠르게 프롬프트가 표시된다.
# 참고로 초기 실행시 환경 설정으로 느리고 다음 실행 부터는 빠르게 프롬프트가 표시된다.
# dockertoolbox 는 legacy 로 대신 docker ce(community edition) 을 설치할 수 도 있다.
# 윈도우 도커 다운로드 https://docs.docker.com/docker-for-windows/install/
#####
# 맥에서 docker 설치
# Docker.dmg 다운로드 https://docs.docker.com/docker-for-mac/install/
# docker.app 실행 하면 도커 데몬이 실행되고 상단에 다음과 같은 고래 아이콘이 보인다.
# 2017년 현재 mac 에서 docker 사용시 몇자기 제한이 있다.
# docker0 브리지가 없고 컨테이너 ip 설정이 안된다.
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
# 설정 파일을 이용한다면
vi /etc/docker/daemon.json
{
"data-root": "/home/ysoftman/docker",
"insecure-registries" : ["myregistrydomain.com:5000", "ysoftman.com:5000"]
}
sudo service docker restart
#####
# centos 에서 docker 설치
# 기존 설치된 docker 모두 삭제
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 도커 설치 파일 다운로드
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm
# 윈도우 도커 다운로드 https://docs.docker.com/docker-for-windows/install/
#####
# 맥에서 docker 설치
# Docker.dmg 다운로드 https://docs.docker.com/docker-for-mac/install/
# docker.app 실행 하면 도커 데몬이 실행되고 상단에 다음과 같은 고래 아이콘이 보인다.
# 2017년 현재 mac 에서 docker 사용시 몇자기 제한이 있다.
# docker0 브리지가 없고 컨테이너 ip 설정이 안된다.
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
# 설정 파일을 이용한다면
vi /etc/docker/daemon.json
{
"data-root": "/home/ysoftman/docker",
"insecure-registries" : ["myregistrydomain.com:5000", "ysoftman.com:5000"]
}
sudo service docker restart
#####
# centos 에서 docker 설치
# 기존 설치된 docker 모두 삭제
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 도커 설치 파일 다운로드
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm
# 설치(rpm 파일은 yum 으로도 설치할 수 있다.)
sudo yum install ./docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm
#####
# linux 에서 sudo 없이 docker 명령 사용하기
# 방법1 - docker 그룹 추가 (/etc/group)
sudo groupadd docker
sudo yum install ./docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm
#####
# linux 에서 sudo 없이 docker 명령 사용하기
# 방법1 - docker 그룹 추가 (/etc/group)
sudo groupadd docker
# /etc/group 에 docker 그룹에 현재 사용자 추가
sudo gpasswd -a $USER docker
sudo gpasswd -a $USER docker
# 소켓파일 docker 그룹으로 변경
sudo chgrp docker /var/run/docker.sock
sudo chgrp docker /var/run/docker.sock
# 터미널 로그아웃/로그인
# 방법2 - socket 파일 권한 변경
# docker.sock file acl 보기
getfacl /var/run/docker.sock
# 방법2 - socket 파일 권한 변경
# docker.sock file acl 보기
getfacl /var/run/docker.sock
# docker.sock docker 그룹 권한 설정
sudo setfacl -m g:docker:rw /var/run/docker.sock
sudo setfacl -m g:docker:rw /var/run/docker.sock
# docker.sock docker 그룹 권한 삭제
sudo setfacl -x g:docker /var/run/docker.sock
sudo setfacl -x g:docker /var/run/docker.sock
# 방법3 - socket 파일 현재 사용자:그룹으로 권한 변경
sudo chown -R ysoftman:ysoftman /var/run/docker.sock
#####
sudo chown -R ysoftman:ysoftman /var/run/docker.sock
#####
# docker command
# 도커 이미지 저장 위치(docker root dir) 저장소(registry) 등 정보 확인
docker info
# 도커 이미지 저장 위치(docker root dir) 저장소(registry) 등 정보 확인
docker info
# 현재 가지고 있는 이미지 목록 보기
docker images
docker images
# 도커 hub 에 올라온 nginx 이미지 검색하기
docker search nginx
docker search nginx
# description 에 Official 이라고 명시된 공식 이미지를 다운 받자.
# nginx:123 와 같이 태그를 명시하지 않으면 가장 최근 버전을 다운 받는다.
docker pull nginx
# nginx:123 와 같이 태그를 명시하지 않으면 가장 최근 버전을 다운 받는다.
docker pull nginx
# nginx 에서 사용에 마운트해서 사용할 공간 만들기
mkdir /www
vi /www/index.html
ysoftman nginx test
mkdir /www
vi /www/index.html
ysoftman nginx test
# nginx 이미지로 컨테이너 만들기
# run : 컨테이터 생성(실행)
# --name : 컨테이너 이름 설정
# -d : 컨테이너를 백그라운드로 실행
# -i : interactive(stdin open)
# -t : tty 환경
# -v : 호스트 /www 를 컨테이너의 /usr/share/nginx/html 에 readonly 로 마운트, 둘다 절대경를 사용해얖 한다. readonly 를 빼면 디폴트로 쓰기도 가능하다.
# -p : 호스트 포트 8080 을 컨테이너 포트 80 에 바인딩
# run : 컨테이터 생성(실행)
# --name : 컨테이너 이름 설정
# -d : 컨테이너를 백그라운드로 실행
# -i : interactive(stdin open)
# -t : tty 환경
# -v : 호스트 /www 를 컨테이너의 /usr/share/nginx/html 에 readonly 로 마운트, 둘다 절대경를 사용해얖 한다. readonly 를 빼면 디폴트로 쓰기도 가능하다.
# -p : 호스트 포트 8080 을 컨테이너 포트 80 에 바인딩
# nginx : 실행시킬 이미지 이름
docker run --name ysoftman_nginx -dit -v /www:/usr/share/nginx/html:ro -p 8080:80 nginx
docker run --name ysoftman_nginx -dit -v /www:/usr/share/nginx/html:ro -p 8080:80 nginx
# 컨테이너에 명령어 실행하기(쉘 실행하여 접속해보기)
docker exec -u root -it ysoftman_nginx /bin/bash
docker exec -u root -it ysoftman_nginx /bin/bash
# 컨테이너 상태 파악
# -v 마운트를 했는데 Config -> Volumes 가 null 이라면 -v 을 사용하지 말자
docker inspect ysoftman_nginx
# -v 마운트를 했는데 Config -> Volumes 가 null 이라면 -v 을 사용하지 말자
docker inspect ysoftman_nginx
# 컨테이터의 ip 확인
docker inspect --format='{{.NetworkSettings.IPAddress}}' ysoftman_nginx
docker inspect --format='{{.NetworkSettings.IPAddress}}' ysoftman_nginx
# 도커(호스트) ip 확인
# 윈도우의 경우 mingw64 환경(git bash사용)에서 도커가 동작하기 때문에 mingw64 가 호스트가 된다.
# http://도커ip:8080 로 nginx 동작 확인
# 윈도우의 경우 mingw64 환경(git bash사용)에서 도커가 동작하기 때문에 mingw64 가 호스트가 된다.
# http://도커ip:8080 로 nginx 동작 확인
docker-machine ip
# ysoftman_nginx 컨테이너에서 현재 실행중이 프로세스 보기
docker top ysoftman_nginx
docker top ysoftman_nginx
# 컨테이너 변경사항으로부터 이미지 만들기
# -m "ysoftman_nginx" : 커밋 메시지
# -a "ysoftman" : 작성자
# ysoftman/ysoftman_nginx:1.0 : 저장소:tag 로 이미지 생성
docker commit -m "ysoftman_nginx" -a "ysoftman" ysoftman_nginx ysoftman/ysoftman_nginx:1.0
# -m "ysoftman_nginx" : 커밋 메시지
# -a "ysoftman" : 작성자
# ysoftman/ysoftman_nginx:1.0 : 저장소:tag 로 이미지 생성
docker commit -m "ysoftman_nginx" -a "ysoftman" ysoftman_nginx ysoftman/ysoftman_nginx:1.0
# dockerfile 을 작성하여 이미지 빌드시
# --no-cache=true 캐시된 이미지를 사용하지 않고 새로 만들어 시간이 올래 걸린다.
# -t 태그 명시(저장소:태그)
# 자세한 내용은 https://docs.docker.com/engine/reference/builder/
docker build --no-cache=true -t ysoftman/ysoftman_nginx:1.0 .
# --no-cache=true 캐시된 이미지를 사용하지 않고 새로 만들어 시간이 올래 걸린다.
# -t 태그 명시(저장소:태그)
# 자세한 내용은 https://docs.docker.com/engine/reference/builder/
docker build --no-cache=true -t ysoftman/ysoftman_nginx:1.0 .
# dockerfile 작성시 유념
# RUN,COPY 실행 마다 레이어가 생성된다.
# 이전 레이어가 실행한것을 알지 못하기 의존성이 있는 명령은 && 연결해 하나의 RUN 으로 실행해야 한다.
# CMD 는 한번밖에 사용하지 못한다.
# CMD "echo aaa; echo bbb" 는 shell(새로운 프로세스 생성) 방식이다.
# CMD ["echo aaaa"] 는 exec(현재 프로세스를 대체) 방식이다.
# exec 방식에서 여러개의 명령을 실행하려면
# CMD ["bash", "-c", "echo aaa; echo bbb;"] 와 같이 bash -c(뒤에 오는 스트링을 쉘명을 처리) 로 실행해야 한다.
# 참고 https://docs.docker.com/engine/reference/builder/#cmd
# 다음은 명령마다 생성된 이미지와 각각의 크기를 알 수 있다.
docker histsory ysoftman/ysoftman_nginx:1.0
# RUN,COPY 실행 마다 레이어가 생성된다.
# 이전 레이어가 실행한것을 알지 못하기 의존성이 있는 명령은 && 연결해 하나의 RUN 으로 실행해야 한다.
# CMD 는 한번밖에 사용하지 못한다.
# CMD "echo aaa; echo bbb" 는 shell(새로운 프로세스 생성) 방식이다.
# CMD ["echo aaaa"] 는 exec(현재 프로세스를 대체) 방식이다.
# exec 방식에서 여러개의 명령을 실행하려면
# CMD ["bash", "-c", "echo aaa; echo bbb;"] 와 같이 bash -c(뒤에 오는 스트링을 쉘명을 처리) 로 실행해야 한다.
# 참고 https://docs.docker.com/engine/reference/builder/#cmd
# 다음은 명령마다 생성된 이미지와 각각의 크기를 알 수 있다.
docker histsory ysoftman/ysoftman_nginx:1.0
# docker hub 로그인(없으면 계정 생성 https://hub.docker.com)
# $HOME/.docker/config.json 설정된 서버로 로그인한다.
docker login
# $HOME/.docker/config.json 설정된 서버로 로그인한다.
docker login
# docker hub 에 이미지 푸시하기
docker push ysoftman/ysoftman_nginx:1.0
docker push ysoftman/ysoftman_nginx:1.0
# 컨테이너 5초 후 중지
docker stop -t 5 ysoftman_nginx
docker stop -t 5 ysoftman_nginx
# 컨테이너 시작하기
docker start ysoftman_nginx
docker start ysoftman_nginx
# 컨테이너 로그(비정상 종료 코드로 exit 되는 경우 참고)
# -f, --follow
docker logs -f ysoftman_nginx
# -f, --follow
docker logs -f ysoftman_nginx
# 컨테이너 강제 삭제
docker rm -f ysoftman_nginx
docker rm -f ysoftman_nginx
# 컨테이너 전체 삭제
docker rm $(docker ps -aq)
docker rm $(docker ps -aq)
# 이미지 강제 삭제
docker rmi -f ysoftman_nginx:1.0
docker rmi -f ysoftman_nginx:1.0
# 이미지 전체 삭제
docker rmi $(docker images -q)
docker rmi $(docker images -q)
# 이미지 태깅이 안되거나 이미지 생성 중 실패된 상태의 <none> 이미지 삭제
docker rmi $(docker images -a | grep "<none>" | awk '{print $3}')
docker rmi $(docker images -a | grep "<none>" | awk '{print $3}')
# docker 1.13 부터 image container ... 등 관리 명령이 추가되었다.
# 최신 docker 무료버전(ce) 를 설치하자
# 기존 old docker 삭제
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
# 최신 docker 무료버전(ce) 를 설치하자
# 기존 old docker 삭제
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
# yum 관련 유틸 설치
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# centos 용 docker 저장소 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# docker ce 설치
sudo yum install docker-ce
sudo yum install docker-ce
# unused 이미지들 모두 삭제
docker image prune
docker image prune
# dangling 이미지들 모두 삭제
sudo docker rmi $(sudo docker images --filter "dangling=true" -q)
sudo docker rmi $(sudo docker images --filter "dangling=true" -q)
# 중지된 컨테이너들 모두 삭제
docker container prune
docker container prune
# exited 또는 created 상태 컨테이너들 삭제
sudo docker ps -a | grep -i -e exited -e created | awk '{print $1}' | xargs docker rm
sudo docker ps -a | grep -i -e exited -e created | awk '{print $1}' | xargs docker rm
# 도커 이미지,컨테이너등이 사용하는 디스크 용량 확인
# 사용안하는 이미지, 컨테이너들 모두 삭제
# 참고
http://pyrasis.com/docker.html
https://hub.docker.com/_/nginx
http://blog.iolo.kr/510
https://docs.docker.com/engine/reference/commandline/dockerd/
https://docs.docker.com/engine/installation/windows/#container-port-redirection
http://www.slideshare.net/pyrasis/docker-fordummies-44424016
docker system df
docker system df -v
# 사용안하는 이미지, 컨테이너들 모두 삭제
docker system prune
# 100일(2400시간)이 지난 이미지는 모두 삭제
# -a, --all Remove all unused images, not just dangling ones
# --filter filter Provide filter values (e.g. 'until=<timestamp>')
# -f, --force Do not prompt for confirmation
docker image prune -a -f --filter "until=2400h"
http://pyrasis.com/docker.html
https://hub.docker.com/_/nginx
http://blog.iolo.kr/510
https://docs.docker.com/engine/reference/commandline/dockerd/
https://docs.docker.com/engine/installation/windows/#container-port-redirection
http://www.slideshare.net/pyrasis/docker-fordummies-44424016
comments:
댓글 쓰기