일반적으로 웹서비스는 3tier 구조를 가짐
WEB SERVER → WAS SERVER → DB
위와 같은 구조를 docker container run을 이용해 구성하면
docker network’s driver
rapa@rapa:~/0819/board$ docker network create private1
c0238bf90be3e069ec40bbe856e674bb0df991583c7ad2a0040f678956e5b098
rapa@rapa:~/0819/board$ docker network ls
NETWORK ID NAME DRIVER SCOPE
b2eebdca1c3a bridge bridge local
3ead376f089f host host local
39430d1f4412 none null local
c0238bf90be3 private1 bridge local
apa@rapa:~/0819/board$ docker network inspect private1
[
{
"Name": "private1",
"Id": "c0238bf90be3e069ec40bbe856e674bb0df991583c7ad2a0040f678956e5b098",
"Created": "2022-08-19T16:27:43.436491774+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
...
]
임의의 IP 주소 할당되어 있음
rapa@rapa:~/0819/board$ docker container run -d --net=private1 centos:7
420bc14e755fb5b241e797b67b5282354c1b868980656ad7937079bfe93b8712
apa@rapa:~/0819/board$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
420bc14e755f centos:7 "/bin/bash" 53 seconds ago Exited (0) 51 seconds ago awesome_cori
3aa051c75f11 centos:7 "/bin/bash" About a minute ago Created eloquent_stonebraker
0dd8f9536071 hyper/docker-registry-web "start.sh" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp registry-web
dc0b26f3dcde registry "/entrypoint.sh /etc…" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
rapa@rapa:~/0819/board$ docker inspect 3aa051c75f11
[
{
"Id": "3aa051c75f11c853445083b6bc3907a16cb56f10f458900616add048296cc5b8",
"Created": "2022-08-19T07:30:57.586191262Z",
"Path": "/bin/bash",
...
"Networks": {
"private1": {
"IPAMConfig": {
"IPv4Address": "172.18.0.100"
},
"Links": null,
"Aliases": [
"3aa051c75f11"
],
...
}
}
]
rapa@rapa:~/0819/board$ docker network create --driver bridge --subnet 10.10.0.0/16 --ip-range 10.10.10.0/24 --gateway 10.10.10.1 private2
528e7ecee3f15a03d2eceae6bb818819e77b45674338e433477842c50a25b745
ctrl+p ctrl+q로 빠져나오기
docker container inspect centos11
IP 확인
"Networks": {
"private2": {
"IPAMConfig": {
"IPv4Address": "10.10.10.10"
},
"Links": null,
"Aliases": [
"52671517fe1d"
],
"NetworkID": "528e7ecee3f15a03d2eceae6bb818819e77b45674338e433477842c50a25b745",
"EndpointID": "a20e6a073b850ad91947563035ec9ec29bc6a512d3a16da809b753416016622d",
"Gateway": "10.10.10.1",
"IPAddress": "10.10.10.10",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:0a:0a:0a:0a",
"DriverOpts": null
}
}
rapa@rapa:~/0819/board$ vi ~/.bashrc
95번째줄
alias dc=’docker-compose’
source ~/.bashrc
각 항목의 하위 항목을 정의하려면 들여쓰기가 매우 중요
일반적으로 yaml 파일은 tab을 인식하지 못하기때문에 space bar을 이용
하나의 컴포즈 파일에 작성된 서비스는 자동으로 link가 된다.
예전에는 지원이 되었으나 지금은 지원 되지 않는 옵션 : —volumes-from 컨테이너의 디렉토리를 다른 컨테이너의 디렉토리와 마운트하는 것 (지금은 isci나 nfs 이용)
version: ‘3.9’
services:
myctl1:
image: centos:7 # 이미지
environment: # 환경변수
MYSQL_ROOT_PASSWORD: test123 # :을 사용하는 방법
MYSQL_DATABASE: wordpress
networks:
- private1
- private2
myctl2:
build: . # 현재 위치에 있는 도커파일을 이용해 이미지를 만들고 그걸 사용
environment:
- WORDPRESS_DB_USER=root # 다음과 같이 -과 =를 이용해 쓸 수도 있음
- WORDPRESS_DB_NAME=wordpress
depends_on: # 실행 순서 결정
- myctn1 # myctn2가 실행되기 전에 myctn1이 먼저 실행. myctn1의 동작 완료를 확인하지는 않음
- ports: #
- “8080:80” # 시간을 의미하는 12:30과 구분하기위해 일반적으로 큰따옴표를 붙임, host의 8888포트와 컨테이너의 80번 포트 연결
- “33061:3306” # 이렇게 여러개 쓸 수 있음 -p 33061:3306
- “8080” # -P 8080 호스트의 랜덤포트와 컨테이너의 8080을 연결
- “8081-8085” # 랜덤포트
networks:
- private2
실행순서 결정
ctn1 3 → -ctn3 -ctn2
ctn2 1 → x
ctn3 2 → ctn2
volumes:
volumes:
testvolume1: # 0822_testvolume1이 생성된다
external: true # 기존에 만들어 둔 testvolume1을 사용한다.
docker volume create [볼륨이름]
docker volume ls
docker volume prune
networks:
private1:
driver: bridge # private1은 bridge타입으로 생성
external: true # 기존에 만들어두었던 private1을 재활용한다.
docker network create [네트워크이름]
docker network ls
docker network rm [네트워크ID]
docker-compose up
docker-compose down
docker-compose stop 서비스명
docker-compose start 서비스명
docker-compose ps
docker-compose config