Docker Compose Version 2로 전환할 때 가장 적합한 점
15664 단어 Docker
시스템 구성
이번에 이전된 시스템은 두 개의 Rails 응용 프로그램과 한 개의 역방향 에이전트로 구성되어 있다.Rails 애플리케이션은 모두 같은 인상을 바탕으로 하고 설정만 조금 다르다.사실 컨테이너가 좀 많은데 아무 상관이 없어서 생략했습니다.
또한 이전을 전후하여 Docker Engine, Docker Compose의 버전 업그레이드도 진행됩니다.
이전 전
마이그레이션 후
Docker Engine
1.10
1.12
Docker Compose
1.6
1.8
행 이동 전 설정
이전 프로그램의 docker-compose입니다.다음은 yml입니다.이미지는 공식적인 것이 아니라 직접 만든 것이기 때문에 이름이 적당히 바뀐다.
리버스 프록시와 Rails 응용 프로그램은 통신할 수 있지만 Docker Compose의 externalLINks를 사용하지 않았습니다.이걸 사용하면 리버스 프록시 밑에 있는 앱이 멈췄을 때 리버스 프록시 서버도 멈췄고 다른 앱과 연결할 수 없습니다.약 1년 전 구축할 때의 정보이기 때문에 지금은 다를 수 있습니다...
nginx:
image: hoge/nginx:latest
ports:
- "80:80"
redis:
image: hoge/redis:latest
rails:
image: hoge/rails:latest
links:
- redis:redis
redis:
image: hoge/redis:latest
rails:
image: hoge/rails:latest
links:
- redis:redis
변환 후 설정(첫 번째 실패)
우선 간단하게 격식을 바꾸어 보았다.
version: '2'
services:
nginx:
image: hoge/nginx:latest
ports:
- "80:80"
version: '2'
services:
redis:
image: hoge/rails:latest
rails:
image: hoge/rails:latest
depends_on:
- redis
version: '2'
services:
redis:
image: hoge/redis:latest
rails:
image: hoge/rails:latest
depends_on:
- redis
포맷만 간단하게 바꾸면 리버스 프록시 응용 프로그램에서 Rails 응용 프로그램 용기에 연결할 수 없습니다.Version1에서는 이 설정으로 모든 컨테이너가 동일한 서브넷에 속하므로 연결할 수 있습니다.따라서 모든 응용 프로그램이 같은 네트워크에 속하기 위해 우리는 전용 네트워크를 설치했다.변환 후 설정(2차 실패)
version: '2'
services:
nginx:
image: hoge/nginx:latest
ports:
- "80:80"
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
redis:
image: hoge/redis:latest
networks:
- proxy_network
rails:
image: hoge/rails:latest
depends_on:
- redis
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
redis:
image: hoge/redis:latest
networks:
- proxy_network
rails:
image: hoge/rails:latest
depends_on:
- redis
networks:
- proxy_network
networks:
proxy_network:
external: true
어플리케이션 공통 네트워킹proxy_network
을 정의합니다.네트워크를 만들면 다음 명령이 실행됩니다.command
$ docker network create --driver bridge proxy_network
공통된 네트워크에 속하기 때문에 역 에이전트에서 각 응용 프로그램에 연결할 수 있다.새로운 문제의 발생
이렇게 하면 해결될 줄 알았는데 이번에 라일스 앱 중 하나가 리디스에 연결되지 않는 현상이 발생했다.Rails1 응용 프로그램의 Redis 용기의 IP 주소는
172.21.0.2
입니다. Rails1 응용 프로그램의 rails 용기에서 Redis에게 핑을 치면 172.21.0.5
입니다.이 172.21.0.5는 무엇을 조사했습니까Rails2アプリのredisコンテナ
.Rails 응용 프로그램에서는 Redis 용기에 연결하는 목적지 호스트 이름을 Docker Compose를 통해 설정한 서비스 이름redis
으로 설정하지만 모든 응용 프로그램이 공공 네트워크에 속하기 때문에 서비스 이름redis
은 Rails1과 Rails2 두 응용 프로그램에 포함된다.서비스 이름이 중복되어 내장 컨테이너의 DNS가 다른 IP 주소를 반환합니다.이 현상 조사에서는 라일스 앱을 하나씩 가동하면 제대로 연결이 되기 때문에 원인을 찾기 전까지 시간이 오래 걸렸다.그래서 나는 이 문제를 해결하기 위해 두 가지 방법을 고려했다.
변환 후 설정(세 번째 실패)
docker-compose.yml
version: '2'
services:
nginx:
image: hoge/nginx:latest
ports:
- "80:80"
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
rails1_redis:
image: hoge/redis:latest
networks:
- proxy_network
rails1:
image: hoge/rails:latest
depends_on:
- rails1_redis
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
rails2_redis:
image: hoge/redis:latest
networks:
- proxy_network
rails2:
image: hoge/rails:latest
depends_on:
- rails2_redis
networks:
- proxy_network
networks:
proxy_network:
external: true
이제 rails1 용기부터 rails1레드스 용기, rails2 용기에서 rails2까지레드스 용기의 IP 주소를 정확하게 식별할 수 있습니다.문제가 재발하다
이번엔 꼭 해결될 줄 알았는데 이번에는 Rails 애플리케이션 rails1리디스에 접근하려고 시도했을 때
InvalidURIError
발생했습니다.호스트 이름_
이 포함되어 있기 때문인 것 같습니다.이에 따라 서비스명의_
를 -
로 변경했다.Docker Compose와 직접적인 관련이 없는 문제지만 서비스명 변경에 따른 분쟁인 만큼 함께 적었다.전환 후 설정(최종 형식)
docker-compose.yml
version: '2'
services:
nginx:
image: hoge/nginx:latest
ports:
- "80:80"
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
rails1-redis:
image: hoge/redis:latest
networks:
- proxy_network
rails1:
image: hoge/rails:latest
depends_on:
- rails1-redis
networks:
- proxy_network
networks:
proxy_network:
external: true
version: '2'
services:
rails2-redis:
image: hoge/redis:latest
networks:
- proxy_network
rails2:
image: hoge/rails:latest
depends_on:
- rails2-redis
networks:
- proxy_network
networks:
proxy_network:
external: true
이렇게 해서 마침내 모두 정상적으로 운행되었다.Docker Compose는 매우 편리하지만 업데이트 속도가 매우 빨라서 따라잡기 어렵다.반드시 자세하게 검사해야 한다.
Reference
이 문제에 관하여(Docker Compose Version 2로 전환할 때 가장 적합한 점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ogasada0/items/c8bfe603617caa8a3de2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)