Docker Compose 사용 설명서
7830 단어 springbootdockerjava
Docker Compose란 무엇입니까?
부두 일꾼이 뭔지 모르면 여기서 읽어도 돼.만약 docker에서 실행되는 프로그램이 있고 데이터베이스, 웹 서버, 부하 균형기 등 여러 개의 다른 서비스를 사용하고 있다면, 여러 개의 docker 파일을 작성하고 여러 용기를 실행할 수 있습니다.이 서류들을 관리하는 것은 매우 번거로울 수 있다.만약 당신이 어떤 내용을 변경해야 한다면, 모든 파일을 변경해야 할 수도 있습니다.
Docker compose는 한 파일에 여러 컨테이너를 정의하는 YAML 파일을 작성하여 이 문제를 해결할 수 있도록 합니다.docker 파일을 작성하여 모든 용기에 파일을 구축하고 실행합니다.
Docker Compose 설치
docker의 정의를 바탕으로 docker compose는 여러 개의 docker 용기를 정의하고 실행하는 도구입니다.
환경에 따라 설명에 따라 docker compose를 설치해야 합니다.docker compose를 설치하기 전에 docker 엔진이 필요합니다.Windows 환경을 사용하고 있으므로 이러한 지침을 여기에 설명합니다.
docker compose를 설치합니다.새 명령 프롬프트를 열고 첫 번째 명령
docker-compose -v
설치에 문제가 없으면 docker compose 버전을 제공해야 합니다.
Docker를 사용하여 Spring Boot 응용 프로그램 설정하기
docker compose의 강력한 기능을 보여주기 위해서 간단한 업무 목록spring을 사용하여 프로그램을 시작합니다.GitHub 저장소에서 docker compose 파일과 이 프로그램을 공유할 것입니다.그러나 이 응용 프로그램에는 docker compose에서 사용할 다음 응용 프로그램이 포함됩니다.
이 Spring Boot 응용 프로그램에 대해 자체 컨테이너에서 실행되는 docker 파일을 만듭니다.이제 KeyClope 및 MySQL 데이터베이스에 연결하여 인증합니다.Keyclope은 같은 MySQL 데이터베이스가 아닌 Postgres 데이터베이스를 사용합니다.
Spring Boot 응용 프로그램의 docker 파일은 다음과 같습니다.
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY ./build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
이 docker 파일은 기본적으로 OpenJDK8을 다운로드합니다.디스크는 /tmp
에 설치됩니다.프로그램jar 파일을 app.jar
로 복사합니다.물론, 실행 java -jar
을 통해 프로그램을 시작할 것입니다.Docker Compose 파일 작성 방법
현재는
docker-compose.yml
파일입니다.이렇게 하면 다음과 같습니다.version: "3.8"
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- db
- keycloak
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/todolist?autoReconnect=true&useSSL=false
SPRING_DATASOURCE_USERNAME: betterjavacode
SPRING_DATASOURCE_PASSWORD: betterjavacode
KEYCLOAK_URI: http://keycloak:8180/auth
REALM: SpringBootKeycloakApp
networks:
- common-network
db:
image: mysql:5.7
ports:
- "3307:3306"
restart: always
environment:
MYSQL_DATABASE: todolist
MYSQL_USER: betterjavacode
MYSQL_PASSWORD: betterjavacode
MYSQL_ROOT_PASSWORD: root
volumes:
- db-data:/var/lib/mysql
networks:
- common-network
postgres:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
networks:
- common-network
keycloak:
image: jboss/keycloak
ports:
- "8180:8180"
command: ["-Djboss.socket.binding.port-offset=100"]
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: password
DB_SCHEMA: public
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: Pa55w0rd
depends_on:
- postgres
networks:
- common-network
networks:
common-network:
driver: bridge
volumes:
db-data:
driver: local
postgres_data:
driver: local
docker compose 파일의 첫 번째 줄은 docker compose 버전입니다.services
docker 용기의 다양한 유형을 구축하는 데 사용할 서비스를 정의합니다.웹 서비스는 docker 파일에서 생성된 이미지를 사용합니다.예를 들어, Spring Boot 응용 프로그램의 docker 이미지를 구축하고 있습니다.이 응용 프로그램은 포트 8080에서 실행될 것입니다.우리는 또한 전달에 필요한 환경 변수를 확보해야 한다.파일에서 보듯이 데이터베이스를db로 사용합니다. 변수 SPRING_DATASOURCE_URL
는 이 점을 보여 줍니다.db는 응용 프로그램이 연결할 데이터베이스 서비스의 이름입니다.Dell 데이터베이스 서비스
db
는 호스트 포트 3307에서 실행되지만 컨테이너에서는 포트 3306(기본 포트)을 사용합니다.이것은 호스트의 3306 포트에서 MySQL을 실행하기 때문에 포트 충돌을 피하기 위해 3307을 사용합니다.저희 docker compose 파일에는 또 다른 데이터베이스 서비스
postgres
가 있습니다.기본 포트 5432를 사용합니다. 이것이 바로 여기에 지정되지 않은 이유입니다.KeyClope은 전체 응용 프로그램의 일부로 postgres를 사용합니다.postgres를 지정하지 않으면 KeyClope은 기본적으로 메모리의 H2 데이터베이스를 사용합니다.메모리 데이터베이스의 문제는 용기를 멈추면 모든 데이터를 잃어버린다는 것이다.이런 상황을 피하기 위해서, 나는 우리의 영역과 사용자의 데이터를 저장하기 위해 진실한 데이터베이스를 사용했다.우리가 사용하고 있는 또 다른 서비스는
keycloak
이다.인증 IDP입니다.이 서비스는 포트 8180에서 실행 중입니다.Postgres 데이터베이스를 사용하여 연결합니다.KeyClope 서비스의 명령 부분은 기본 8080이 아닌 컨테이너의 포트 8180에서 서비스를 실행하도록 표시합니다.networks
서비스는 모든 용기가 같은 네트워크common-network
의 일부이며 이 네트워크에는bridge 형식의 드라이버가 있음을 정의합니다.데이터베이스를 사용할 수 있도록 MySQL과 Postgres 데이터베이스에 디스크 볼륨을 불러와야 합니다.이 볼륨을 로컬에서 마운트합니다.
컨테이너 실행
현재 응용 프로그램 실행 용기를 사용하려면 다음 명령을 실행하십시오 (응용 프로그램을 구축할 수 있는지 확인하십시오)
docker-compose up
모든 서비스에 Docker 컨테이너를 구축하고 시작합니다.이제 http://localhost:8080
를 통해 애플리케이션에 액세스하는 경우사용자가
Get all tasks
를 클릭하면 다음과 같이 KeyClope 로그인 화면이 표시됩니다.사용자 이름과 암호를 입력하면 로그인한 사용자의 작업이 표시됩니다.
유용한 명령
docker-compose up
- 이 명령은 docker 컨테이너를 구축하고 시작합니다.docker-compose up -d
- 이 명령은 백그라운드에서 모든 프로세스를 실행하는 것과 유사합니다.docker-compose stop
- docker 서비스를 중지합니다.이렇게 하면 컨테이너를 중지한 경우에도 컨테이너의 이전 상태가 유지됩니다.docker-compose start
- docker 서비스 시작docker-compose logs
- docker 컨테이너의 로그를 표시합니다.docker-compose ps
- Docker 컨테이너를 나열합니다.docker-compose run
- 일회성 명령을 실행합니다.예-docker-compose run web env
- 웹 서비스의 환경 변수를 보여 줍니다.Docker Compose의 이점
docker compose의 고급 사용
이 글에서
network
서비스로 언급되지 않았습니다. docker compose를 통해 확장할 수 있습니다.또한 부하 균형기(또는 역방향 에이전트, 예를 들어 nginx
를 실행하고 여러 호스트를 사용하여 부하를 관리할 수 있습니다.환경 변수를 사용하는 것 외에
.env
파일을 환경 변수로 사용하고 용기를 시작할 때 불러올 수 있습니다.결론
본고에서, 나는 docker compose를 사용하여 한 docker compose 파일을 사용하여 여러 용기를 실행하는 방법을 보여 주었다.또한 환경을 손쉽게 관리할 수 있습니다.
도구책
Reference
이 문제에 관하여(Docker Compose 사용 설명서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/betterjavacode/the-complete-guide-to-use-docker-compose-2gh7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)