반응형
1. Nginx Service 올려보기
## Nginx 이미지를 이용하여 서비스 생성
## 80포트를 연결하고 이름을 nginx_test로 생성
[root@docker1 bin]# docker service create -p 80:80 --name nginx_test nginx
lojirqir4tjvy370y2fpevrec
## 서비스 확인
## 서비스가 생성되었고 REPLICAS 항목이 0/1로 현재 replica는 1개이고 active 0개 라는 의미
[root@docker1 bin]# docker service ls
ID NAME MODE REPLICAS IMAGE
lojirqir4tjv nginx_test replicated 0/1 nginx:latest
## 이미지확인
## 이미지가 없으며 아직 pull 받고 있는 중이다.
[root@docker1 bin]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
## 시간이 지나면 아래와 같이 이미지가 보이며 서비스도 올라간다
[root@docker1 bin]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx <none> 8cf1bfb43ff5 8 days ago 132 MB
## 서비스 확인
## REPLICAS 항목이 0/1 -> 1/1 로 변경
[root@docker1 bin]# docker service ls
ID NAME MODE REPLICAS IMAGE
lojirqir4tjv nginx_test replicated 1/1 nginx:latest
## 서비스 컨테이너 확인
[root@docker1 bin]# docker service ps nginx_test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
znombp0f4jt4 nginx_test.1 nginx:latest docker1 Running Running 34 seconds ago
## 컨테이너 확인
[root@docker1 bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
639fbc9f521a nginx@sha256:0e188877aa60537d1a1c6484b8c3929cfe09988145327ee47e8e91ddf6f76f5c "/docker-entrypoin..." 41 seconds ago Up 38 seconds 80/tcp nginx_test.1.znombp0f4jt4lqn9mv2av4we5
## docker2에서 확인
## 구동 중인 컨테이너 없음.
[root@docker2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
## 서비스 목록에는 나타남
[root@docker2 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
lojirqir4tjv nginx_test replicated 1/1 nginx:latest
## 서비스 컨테이너에 docker1에서 구동중이라고 나타남.
[root@docker2 ~]# docker service ps nginx_test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
znombp0f4jt4 nginx_test.1 nginx:latest docker1 Running Running 7 minutes ago
## 이미지 없음
[root@docker2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
2. Overlay Network
## docker1의 Network 목록을 보면
## swarm으로 생성된 ingress overlay를 확인 할 수 있다.
[root@docker1 bin]# docker network ls
NETWORK ID NAME DRIVER SCOPE
96f05d3a943e bridge bridge local
776df03d1724 docker_gwbridge bridge local
3daaa3fe6b88 host host local
niczy19plszi ingress overlay swarm
d795e4a16e00 none null local
## service inspect 확인
## VirtualIPs 항목을 보면 ingress overlay network로 등록된 id 가 일치하며 ip주소가 할당 되어 있다.
[root@docker1 bin]# docker service inspect nginx_test
[
-- 중략 --
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 80,
"PublishedPort": 80,
"PublishMode": "ingress"
}
],
"VirtualIPs": [
{
"NetworkID": "niczy19plszie048piggwmm65",
"Addr": "10.255.0.2/16"
}
]
},
"UpdateStatus": {
"StartedAt": "0001-01-01T00:00:00Z",
"CompletedAt": "0001-01-01T00:00:00Z"
}
}
]
## 따라서 생성된 overlay 네트웍에 의해 VIP가 공유 되며 docker2:80, docker3:80으로 접속해도 docker1:80 VIP로 해당 패킷은 포워딩된다.
3. nginx 다른 이미지 생성
## nginx 다른 이미지를 생성 하여 네트워크 등을 살펴봄
[root@docker1 bin]# docker service create -p 90:80 --name nginx_test2 nginx
pd2vwa4o8h5ub2t79jsz49353
## 아직 생성중
[root@docker1 bin]# docker service ls
ID NAME MODE REPLICAS IMAGE
lojirqir4tjv nginx_test replicated 1/1 nginx:latest
pd2vwa4o8h5u nginx_test2 replicated 0/1 nginx:latest
## docker3에 할당 되었으며 준비중
## 생성은 docker1에서 replica 1개로 했지만 swarm 내 docker3 으로 task가 할당됨
[root@docker1 bin]# docker service ps nginx_test2
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ifb9ywlfmlmb nginx_test2.1 nginx:latest docker3 Running Preparing 15 seconds ago
## inspect 확인
[root@docker1 bin]# docker service inspect nginx_test2
[
-- 중략 --
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 80,
"PublishedPort": 90,
"PublishMode": "ingress"
}
],
"VirtualIPs": [
{
"NetworkID": "niczy19plszie048piggwmm65",
"Addr": "10.255.0.7/16"
}
]
},
"UpdateStatus": {
"StartedAt": "0001-01-01T00:00:00Z",
"CompletedAt": "0001-01-01T00:00:00Z"
}
}
]
## nginx_test와 같은 ingress overlay 네트웍에 할당되어 swarm내 어느 노드에 접속해도 연결이 된다.
4. service scale
## nginx_test, nginx_test2는 replica 1로 생성되어져 있는 것을 각각 2,3개로 scale out 함.
[root@docker1 bin]# docker service scale nginx_test=2
nginx_test scaled to 2
[root@docker1 bin]# docker service scale nginx_test2=3
nginx_test2 scaled to 3
## service 확인
[root@docker1 bin]# docker service ls
ID NAME MODE REPLICAS IMAGE
lojirqir4tjv nginx_test replicated 1/2 nginx:latest
pd2vwa4o8h5u nginx_test2 replicated 2/3 nginx:latest
## service container 확인
## nginx_test는 docker1,2에 nginx_test2는 docker1,2,3에 할당됨.
[root@docker1 bin]# docker service ps nginx_test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
znombp0f4jt4 nginx_test.1 nginx:latest docker1 Running Running 26 minutes ago
7je6gwr1hpiv nginx_test.2 nginx:latest docker2 Running Preparing 26 seconds ago
[root@docker1 bin]# docker service ps nginx_test2
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ifb9ywlfmlmb nginx_test2.1 nginx:latest docker3 Running Running 10 minutes ago
rc1xjza5ih0s nginx_test2.2 nginx:latest docker1 Running Running 24 seconds ago
wbioegg3k8br nginx_test2.3 nginx:latest docker2 Running Preparing 24 seconds ago
## 3개의 Node에 3개의 scale이 아닌 10개의 scale로 했을경우 3:3:4 정도의 비율로 컨테이너 분배 될것이다.
## 이때 nginx의 경우 80포트를 사용하는데 1개의 노드에 3~4개의 컨테이너가 같이 80포트를 사용하게 되면 문제가 발생되지 않을까?
## 개념이 다른것이 10개의 컨테이너에 트래픽이 밸런싱되므로 동일 포트는 의미가 없다.
반응형
'Micro Service Architecture > Docker' 카테고리의 다른 글
11. [docker] docker 명령어 모음 (0) | 2021.03.16 |
---|---|
9. [docker] Update(Rolling) & Rollback (0) | 2021.03.16 |
7. [docker] Orchestration (Docker Swarm) 구축 : Manager, Worker Node 구성 (0) | 2021.03.16 |
5. [docker] container run (0) | 2021.03.16 |
4. [docker] container, image 삭제 (0) | 2021.03.16 |