Docker를 Container의 기술이라고 하며, 이 기술은 Virtualization과 아주 흡사하게 동작하는 기술이다.
이는 개발과 배포를 보다 손쉽게 해주는 실행해주는 기술로, 가상머신처럼 Image를 받아 실행을 해주는 기술이다.
Docker 기본환경설치
https://ahyuo79.blogspot.com/2017/07/docker.html
Docker Redmine 설치
https://ahyuo79.blogspot.com/2018/02/docker-redmine.html
1.1 Docker 의 containers 와 Image 개념
Dockerfile -> Image -> Container
Virtual Machine과 다르게 Hypervisior / Guest OS를 사용하지 않고 Docker만을 이용하여, 외부(Container 끼리 혹은 Host)와 차단을 하여 동작을 한다.
물론 Container 외부와 통신하고 공유하는 방법도 존재하므로 설정에 따라 이 부분은 다르게 동작한다.
Container가 생성된 후에는 Container 내부에서는 독립적으로 데이타 저장도 가능하며 확장도 가능하지만, 종료가 될 때 Container도 삭제하도록 구성도 가능하다
일반적으로 Docker에서 Container를 생성하는 방법은 run 명령와 create를 이용하여 생성할 수 있다.
Docker는 Image 기반으로 Container라는 공간을 만들어 APP/Bins/Libs를 관리하며 기본으로 외부와 격리되어 동작된다.
Virtual Machine은 Hypervisior라는 가상의 CPU구성 및 HW 환경구성 기반위에 별도의 GuestOS가 있고, 그 위에 App 관련된 구성이 돌아간다. (다른 CPU구성과 HW구성도 가능)
위에서 보았듯이 Docker의 Container 기술은 가볍고 빠르게 동작이 가능하지만, Host OS Kernel 과 공유하는 부분이 존재하므로, HW 자원의 고갈문제가 발생한다.
예를들면, 여러개의 Contianer가 동작 중이라면, 각각의 Container 마다 Host OS의 HW자원을 사용하려고 할텐데, 이 부분을 별도로 관리가 필요해서 오케스트라션이 필요한 것 이다.
이를 흔히 로드밸랜스라고 한다.
https://docs.docker.com/get-started/part2/
https://blog.docker.com/2016/04/containers-and-vms-together/
https://blog.thousandeyes.com/thousandeyes-docker-enterprise-agents/
https://www.aquasec.com/wiki/display/containers/Docker+Architecture
https://docs.docker.com/engine/docker-overview/
https://www.phpflow.com/misc/devops/part-1-getting-started-docker-tutorial/
https://success.docker.com/article/networking
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
http://www.leafcats.com/146
1.3 Docker 개념의 관련자료 링크모음
http://www.opennaru.com/openshift/docker/what-is-the-difference-between-docker-lxd-and-lxc/
https://linuxcontainers.org/lxc/introduction/
https://robin.io/blog/containers-deep-dive-lxc-vs-docker-comparison/
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
https://www.clien.net/service/board/lecture/7042127
http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/
https://docs.docker.com/machine/drivers/virtualbox/
https://ahyuo79.blogspot.com/2018/02/docker-redmine.html
1.1 Docker 의 containers 와 Image 개념
Dockerfile -> Image -> Container
- Container
쉽게 생각하면, Virtual Machine에서 Virtual HW에 해당하는 부분이지만, 좀 다르게, 추상화된 Package가 맞을 것 같다.
Containers는 Image (App/Bin/Libs) 가 제대로 동작할 수 있도록하는 Image의 Instance 개념으로 Container를 생성한다.그리고, 이 Image의 Instance를 Docker 기반으로 내부 App을 실행을 하고 외부와 차단하여 동작되어진다.
아래 그림 참조
Virtual Machine과 다르게 Hypervisior / Guest OS를 사용하지 않고 Docker만을 이용하여, 외부(Container 끼리 혹은 Host)와 차단을 하여 동작을 한다.
물론 Container 외부와 통신하고 공유하는 방법도 존재하므로 설정에 따라 이 부분은 다르게 동작한다.
Container가 생성된 후에는 Container 내부에서는 독립적으로 데이타 저장도 가능하며 확장도 가능하지만, 종료가 될 때 Container도 삭제하도록 구성도 가능하다
일반적으로 Docker에서 Container를 생성하는 방법은 run 명령와 create를 이용하여 생성할 수 있다.
- Images
Runtime Code , Libraries , 환경변수 및 설정파일들을 포함하고 있다.
처음 Dockerfile에 의해서 상위구성들을 Image로 만든다. 그리고,
이 Image는 Container를 처음 구성할때 같이 포함되어 실행될때 필요하다.
이 Image는 Container를 처음 구성할때 같이 포함되어 실행될때 필요하다.
Container 와 image의 차이라면, Container는 Docker에서 실행을 하면서 필요한 Data 저장 및 변화된 환경 및 상태보관이 가능하다.
이외 에도 있을 거지만, 거기까지는 나도 잘 모르겠다.
이외 에도 있을 거지만, 거기까지는 나도 잘 모르겠다.
- Container Orchestration
이를 Container Orchestration 이라고 하며, 현재 유명한 것이 Docker Swarm 과 Kubernetes 인 것 같으며, 아직 사용법은 모르겠다.
요즘 이슈가 되는게, Kubernetes로 Server기반으로 많이 사용되는 것 같으며, 내가 사용을 할 기회는 거의 없을 것 같다.
1.2 Docker 와 Virtual Machine 비교
간단하게 차이를 보면 Hypervisior, 즉 가상의 CPU / HW환경구성을 비롯하여 Guest OS를 볼수 있겠다.
1.2 Docker 와 Virtual Machine 비교
간단하게 차이를 보면 Hypervisior, 즉 가상의 CPU / HW환경구성을 비롯하여 Guest OS를 볼수 있겠다.
- Docker vs Virtual Machine 비교
Virtual Machine은 Hypervisior라는 가상의 CPU구성 및 HW 환경구성 기반위에 별도의 GuestOS가 있고, 그 위에 App 관련된 구성이 돌아간다. (다른 CPU구성과 HW구성도 가능)
위에서 보았듯이 Docker의 Container 기술은 가볍고 빠르게 동작이 가능하지만, Host OS Kernel 과 공유하는 부분이 존재하므로, HW 자원의 고갈문제가 발생한다.
예를들면, 여러개의 Contianer가 동작 중이라면, 각각의 Container 마다 Host OS의 HW자원을 사용하려고 할텐데, 이 부분을 별도로 관리가 필요해서 오케스트라션이 필요한 것 이다.
이를 흔히 로드밸랜스라고 한다.
- Docker 세부내용은 아래 사이트 참조
https://docs.docker.com/get-started/part2/
- Virtual Machine 과 Docker 비교
https://blog.docker.com/2016/04/containers-and-vms-together/
https://blog.thousandeyes.com/thousandeyes-docker-enterprise-agents/
https://www.aquasec.com/wiki/display/containers/Docker+Architecture
https://docs.docker.com/engine/docker-overview/
https://www.phpflow.com/misc/devops/part-1-getting-started-docker-tutorial/
https://success.docker.com/article/networking
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
http://www.leafcats.com/146
1.3 Docker 개념의 관련자료 링크모음
- Docker Overview 및 개념확인
- LXC vs Docker
http://www.opennaru.com/openshift/docker/what-is-the-difference-between-docker-lxd-and-lxc/
https://linuxcontainers.org/lxc/introduction/
https://robin.io/blog/containers-deep-dive-lxc-vs-docker-comparison/
- Docker 관련내용
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
https://www.clien.net/service/board/lecture/7042127
http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/
- Docker VirtualBox
https://docs.docker.com/machine/drivers/virtualbox/
- Docker EE의 구성
- Container Orchestration
추후에 세부적으로 사용할 일이 있겠지?
Docker SWARM
https://docs.docker.com/swarm/overview/#understand-swarm-cluster-creation
Kubernetes
https://kubernetes.io/
https://www.redhat.com/ko/topics/containers/what-is-kubernetes
https://www.popit.kr/kubernetes-introduction/
https://www.slideshare.net/ienvyou/docker-on-kubernetes-v1
https://cloud.google.com/kubernetes-engine/
Jenkins(DevOps) 와 Kubernets 연결 (Google의 활용)
https://cloud.google.com/solutions/jenkins-on-kubernetes-engine-tutorial
2. Docker 의 기본설치
Docker는 최근부터 두가지 Edition으로 제공하고 있으며, CE는 아래의 글을 읽어 보면 알겠지만,
Docker SWARM
https://docs.docker.com/swarm/overview/#understand-swarm-cluster-creation
Kubernetes
https://kubernetes.io/
https://www.redhat.com/ko/topics/containers/what-is-kubernetes
https://www.popit.kr/kubernetes-introduction/
https://www.slideshare.net/ienvyou/docker-on-kubernetes-v1
https://cloud.google.com/kubernetes-engine/
Jenkins(DevOps) 와 Kubernets 연결 (Google의 활용)
https://cloud.google.com/solutions/jenkins-on-kubernetes-engine-tutorial
2. Docker 의 기본설치
Docker는 최근부터 두가지 Edition으로 제공하고 있으며, CE는 아래의 글을 읽어 보면 알겠지만,
무료이고 개발용/실험용으로 무료로 제공해주고 있다.
EE는 기업용으로 좀 더 나은 기능을 제공해주고 있다.
현재 내가 본 Docker Version 17.09이며 지속적으로 새로운 기능과 다른 기능을 추가해주고 있는 것 같다.
기업용(EE)는 나는 사용할 기회가 없으므로, 추후 기회가 생긴다면 그때 알아보자.
그리고 현재 아래의 사이트에서 다른 점 및 CE의 업데이트 주기를 알고 넘어 가야겠다.
https://docs.docker.com/v17.09/engine/installation/
https://docs.docker.com/install/
EE는 기업용으로 좀 더 나은 기능을 제공해주고 있다.
현재 내가 본 Docker Version 17.09이며 지속적으로 새로운 기능과 다른 기능을 추가해주고 있는 것 같다.
- Docker CE (Community Edition)
- Docker EE (Enterprise Edition)
그리고 현재 아래의 사이트에서 다른 점 및 CE의 업데이트 주기를 알고 넘어 가야겠다.
- Docker 설치 전에 확인사항
https://docs.docker.com/v17.09/engine/installation/
https://docs.docker.com/install/
- Docker 설치 방법
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository
http://dololak.tistory.com/354?category=644234
http://pyrasis.com/Docker/Docker-HOWTO
https://docs.docker.com/glossary/
2.1 Docker 의 명령어 사용법
간단하게 아래의 사이트에서 Docker 의 명령어들을 익혀보자
간단 Manual
https://gist.github.com/nacyot/8366310
Docker Command의 Option 확인
https://docs.docker.com/engine/reference/commandline/start/#options
Docker 안쓰는 Image / Container 삭제
http://www.kwangsiklee.com/2017/07/docker-%EC%95%88%EC%93%B0%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0/
https://www.popit.kr/%ED%95%B4%EA%B2%B0%EB%B0%A9%EC%95%88-docker%EB%A5%BC-%EC%9A%B4%EC%98%81%ED%95%98%EB%8B%A4-%EC%9A%A9%EB%9F%89%EC%9D%B4-%EA%BD%89%EC%B0%BC%EC%9D%84%EB%95%8C/
http://jibak.tistory.com/7
2.3 Docker Container의 Backup 과 Restore 방법
Docker 기반으로 개발할 경우, Container의 Backup 과 Restore는 중요하며, 이부분은 별도로 테스트를 해서 검증을 해보며 써야 할 것 같다.
대부분 Container에서 부족한 부분은 본인 Terminal을 이용해서 설치도 가능하며, 이를 Backup 해서 본인만의 image를 새로 구축해도 될 것 같다. (배포도 가능)
commit 후에 save를 할때 tar 묶는 이유를 보면, docker가 하나의 image로 저장이 되지 않아서 인것 같다.
/var/lib/docker 으로 분산되어 존재하는 것 같은데, 추후에 자세히 알면 이 부분은 다시 분석
아래사이트 참고
http://home.zany.kr:9003/board/bView.asp?bCode=13&aCode=14131&cBlock=0&cPageNo=1&sType=0&sString=
https://digndig.kr/docker/709/
2.4 Docker File 만들기
docker build를 이용하여 dokerfile을 쉽게 image로 만들 수 있으며, 대 부분은 기존의 Base Image가 존재하는 상태에서
본인 필요한 Package를 추가하는 형태로 새롭게 만들어나가는 구조로 사용하는 것 같다.
결과적으로 보면 Docker Container Backup 과 기존의 Image를 이용하여 Docker File을 새롭게 만들어서 구축하는 방법은 동일하다.
배포도 가능하며, 이 부분은 추후에 다시 동작을 해보도록 하자.
https://medium.com/@NovaWoo/docker-%EC%99%80-jenkins-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ci-1-9510178a525f
3. Simple Linux File System Download
우연히 발견한 사이트이지만, 가끔 Simple한 File system 구성이 필요할때가 있는데, 마침 찾았다.
예전처름 처음부터 package를 일일히 설치해가며 Filesystem을 구축을 해 만들필요는 없는것 같다.
https://alpinelinux.org/downloads/
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository
http://dololak.tistory.com/354?category=644234
http://pyrasis.com/Docker/Docker-HOWTO
https://docs.docker.com/glossary/
2.1 Docker 의 명령어 사용법
간단하게 아래의 사이트에서 Docker 의 명령어들을 익혀보자
간단 Manual
https://gist.github.com/nacyot/8366310
Docker Command의 Option 확인
https://docs.docker.com/engine/reference/commandline/start/#options
- Docker-CE의 Command 확인
$ docker --help Usage: docker [OPTIONS] COMMAND [arg...] A self-sufficient runtime for linux containers. Options: --api-cors-header= Set CORS headers in the remote API -b, --bridge= Attach containers to a network bridge --bip= Specify network bridge IP -D, --debug=false Enable debug mode -d, --daemon=false Enable daemon mode --default-ulimit=[] Set default ulimits for containers --dns=[] DNS server to use --dns-search=[] DNS search domains to use -e, --exec-driver=native Exec driver to use --fixed-cidr= IPv4 subnet for fixed IPs --fixed-cidr-v6= IPv6 subnet for fixed IPs -G, --group=docker Group for the unix socket -g, --graph=/var/lib/docker Root of the Docker runtime -H, --host=[] Daemon socket(s) to connect to -h, --help=false Print usage --icc=true Enable inter-container communication --insecure-registry=[] Enable insecure registry communication --ip=0.0.0.0 Default IP when binding container ports --ip-forward=true Enable net.ipv4.ip_forward --ip-masq=true Enable IP masquerading --iptables=true Enable addition of iptables rules --ipv6=false Enable IPv6 networking -l, --log-level=info Set the logging level --label=[] Set key=value labels to the daemon --log-driver=json-file Containers logging driver --mtu=0 Set the containers network MTU -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file --registry-mirror=[] Preferred Docker registry mirror -s, --storage-driver= Storage driver to use --selinux-enabled=false Enable selinux support --storage-opt=[] Set storage driver options --tls=false Use TLS; implied by --tlsverify --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA --tlscert=~/.docker/cert.pem Path to TLS certificate file --tlskey=~/.docker/key.pem Path to TLS key file --tlsverify=false Use TLS and verify the remote -v, --version=false Print version information and quit Commands: attach Attach to a running container // 동작 중인 Container에 접속가능 (exec로도 가능) build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders from a container's filesystem to the host path // Container에서 생성된 정보를 가져올때 사용 create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container // 동작 중인 Container에 명령어 실행 (/bin/bash 를 이용하여 접속가능) export Stream the contents of a container as a tar archive history Show the history of an image images List images // 현재 존재하는 Image List들을 확인 import Create a new filesystem image from the contents of a tarball info Display system-wide information inspect Return low-level information on a container or image kill Kill a running container load Load an image from a tar archive login Register or log in to a Docker registry server logout Log out from a Docker registry server logs Fetch the logs of a container port Lookup the public-facing port that is NAT-ed to PRIVATE_PORT pause Pause all processes within a container ps List containers // 동작 중인 containers의 list 보여주며, name도 확인가능 pull Pull an image or a repository from a Docker registry server // Image를 가져올때 사용 push Push an image or a repository to a Docker registry server rename Rename an existing container restart Restart a running container rm Remove one or more containers // container 제거 rmi Remove one or more images // image 제거 run Run a command in a new container // 처음 Container를 생성할 때 사용하는 명령 save Save an image to a tar archive search Search for an image on the Docker Hub // Docker Hub에서 Image 검색 start Start a stopped container stats Display a stream of a containers' resource usage statistics // Container의 HW 자원 확인 stop Stop a running container tag Tag an image into a repository top Lookup the running processes of a container unpause Unpause a paused container version Show the Docker version information wait Block until a container stops, then print its exit code
Docker 안쓰는 Image / Container 삭제
http://www.kwangsiklee.com/2017/07/docker-%EC%95%88%EC%93%B0%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0/
https://www.popit.kr/%ED%95%B4%EA%B2%B0%EB%B0%A9%EC%95%88-docker%EB%A5%BC-%EC%9A%B4%EC%98%81%ED%95%98%EB%8B%A4-%EC%9A%A9%EB%9F%89%EC%9D%B4-%EA%BD%89%EC%B0%BC%EC%9D%84%EB%95%8C/
$ cat /lib/systemd/system/docker.service //docker server부분 설정 $ sudo du -sh /var/lib/docker // docker image 및 저장위치 인 것 같음 $ ls /etc/docker/ // 각 설정, 현재 모름 daemon.json key.json
- MYSQL 세부저장
http://jibak.tistory.com/7
- Docker 저장소 변경
2.3 Docker Container의 Backup 과 Restore 방법
Docker 기반으로 개발할 경우, Container의 Backup 과 Restore는 중요하며, 이부분은 별도로 테스트를 해서 검증을 해보며 써야 할 것 같다.
대부분 Container에서 부족한 부분은 본인 Terminal을 이용해서 설치도 가능하며, 이를 Backup 해서 본인만의 image를 새로 구축해도 될 것 같다. (배포도 가능)
commit 후에 save를 할때 tar 묶는 이유를 보면, docker가 하나의 image로 저장이 되지 않아서 인것 같다.
/var/lib/docker 으로 분산되어 존재하는 것 같은데, 추후에 자세히 알면 이 부분은 다시 분석
아래사이트 참고
http://home.zany.kr:9003/board/bView.asp?bCode=13&aCode=14131&cBlock=0&cPageNo=1&sType=0&sString=
https://digndig.kr/docker/709/
2.4 Docker File 만들기
docker build를 이용하여 dokerfile을 쉽게 image로 만들 수 있으며, 대 부분은 기존의 Base Image가 존재하는 상태에서
본인 필요한 Package를 추가하는 형태로 새롭게 만들어나가는 구조로 사용하는 것 같다.
결과적으로 보면 Docker Container Backup 과 기존의 Image를 이용하여 Docker File을 새롭게 만들어서 구축하는 방법은 동일하다.
배포도 가능하며, 이 부분은 추후에 다시 동작을 해보도록 하자.
- Docker File 만들기
DOCKERFILE , File을 만든 후 아래의 Link의 Command로 쉽게 구성할 수 있다.
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/https://medium.com/@NovaWoo/docker-%EC%99%80-jenkins-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ci-1-9510178a525f
3. Simple Linux File System Download
우연히 발견한 사이트이지만, 가끔 Simple한 File system 구성이 필요할때가 있는데, 마침 찾았다.
예전처름 처음부터 package를 일일히 설치해가며 Filesystem을 구축을 해 만들필요는 없는것 같다.
https://alpinelinux.org/downloads/