일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- i3
- ceph
- repository
- Octavia
- kolla-ansible
- Linux
- Kubernetes
- kolla
- cloud-init
- OpenStack
- awx
- pacman
- terraform
- port open
- ubuntu
- nfs-provisioner
- KVM
- golang
- HTML
- yum
- k8s
- Ansible
- libvirt
- Arch
- Kubeflow
- cephadm
- archlinux
- grafana-loki
- ceph-ansible
- Docker
Archives
- Today
- Total
YJWANG
Docker 교육용 (기초) 본문
컨테이너 vs VM
Architecture
설치
컨테이너 기반 기술은 컨테이너 엔진을 통해 구현을 할 수 있다.
일반적으로 Docker를 사용하는데 CentOS기준 Docker를 기본으로 사용하지 않고 PodMan을 사용하기 때문에 repo먼저 구축을 하고 설치해야한다.
추가로 Docker 컨테이너의 Network는 Docker-Proxy를 통해 구성되는데 이를 위해 iptables가 필요하다.
[root@kube62_deploy_0 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
[root@kube62_deploy_0 ~]# yum -y install iptables
[root@kube62_deploy_0 ~]# yum -y install docker-ce
[root@kube62_deploy_0 ~]# ip a show dev docker0
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:5c:f4:e5:a9 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Sample container
one time
[root@kube62_deploy_0 ~]# docker run -it centos:7 /bin/bash
[root@ab4fbeb887c1 /]# yum install iproute
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirror.kakao.com
...
[root@ab4fbeb887c1 /]# hostname
ab4fbeb887c1
[root@ab4fbeb887c1 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@kube62_deploy_0 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab4fbeb887c1 centos:7 "/bin/bash" About a minute ago Up About a minute bold_edison
[root@ab4fbeb887c1 /]# exit
exit
컨테이너 중지됨.
running container
iptables의 rule을 통해 실제 서버가 8888로 서비스를 listen하고 이를 80으로 포워드한다.
실행중인 컨테이너는 하나의 프로세스로 동작하며
[root@kube62_deploy_0 ~]# docker run -d --name test-httpd1 -p 8888:80 httpd
2cb042e1cb2811fcb7acb345ea3d006f14a7c82594cd2faa032ce8e86cd02567
[root@kube62_deploy_0 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2cb042e1cb28 httpd "httpd-foreground" 3 seconds ago Up 2 seconds 0.0.0.0:8888->80/tcp test-httpd1
[root@kube62_deploy_0 ~]# ps -ef |grep 2cb042e1cb28
root 35091 1 0 01:46 ? 00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 2cb042e1cb2811fcb7acb345ea3d006f14a7c82594cd2faa032ce8e86cd02567 -address /run/containerd/containerd.sock
[root@kube62_deploy_0 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.17.0.3 tcp dpt:80
[root@kube62_deploy_0 ~]# ss -antp |grep 8888
LISTEN 0 128 0.0.0.0:8888 0.0.0.0:* users:(("docker-proxy",pid=35074,fd=4))
host network container
[root@kube62_deploy_0 ~]# docker run -d --name test-httpd2 --network host httpd
991efd21e145bb6f51ea6a545686ddd7d733b859a9bf31af47e711dad07bf43e
[root@kube62_deploy_0 ~]# ss -antp |grep 80
LISTEN 0 128 *:80 *:* users:(("httpd",pid=36013,fd=4),("httpd",pid=36012,fd=4),("httpd",pid=36011,fd=4),("httpd",pid=35992,fd=4))
위 컨테이너들의 데이터는 컨테이너가 삭제되는 즉시 같이 삭제됨
영구적인 데이터를 위해서는 Volume을 별도로 Mount 하기도 하고 컨테이너 구축 후 여러 설정 및 환경을 설정하기 위해
yaml 파일로 사전 정의 해서 아래와 같이 자동화 하기도 한다.
허나 컨테이너 자체의 LifeCycle이나 HA node간 통신 및 HA등 관리를 위해 Kubernetes의 필요성이 생기게됐다.
반응형