

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 레거시 플랫폼
<a name="create_deploy_dockerpreconfig-legacy"></a>

이 장에는에서 더 이상 지원하지 않는 이전 Docker 플랫폼과 관련된 콘텐츠가 나열되어 있습니다 AWS Elastic Beanstalk. 여기에 나열된 주제는 사용 중지 전에 이러한 기능 또는 구성 요소를 사용한 모든 고객이 참조할 수 있도록 이 문서에 남아 있습니다.

**Topics**
+ [

# Amazon Linux에서 실행되는 다중 컨테이너 Docker로부터 Amazon Linux 2에서 실행되는 Elastic Beanstalk Docker로 마이그레이션
](docker-multicontainer-migration.md)
+ [

# Elastic Beanstalk의 사전 구성된 Docker GlassFish 컨테이너
](create_deploy_dockerpreconfig.md)

# Amazon Linux에서 실행되는 다중 컨테이너 Docker로부터 Amazon Linux 2에서 실행되는 Elastic Beanstalk Docker로 마이그레이션
<a name="docker-multicontainer-migration"></a>

*64비트 Amazon Linux 2에서 실행되는 ECS* 플랫폼 브랜치 릴리스에 앞서, Elastic Beanstalk는 *64비트 Amazon Linux에서 실행되는 멀티컨테이너 Docker* 플랫폼 브랜치를 기반으로 한 환경을 보유한 고객을 위해 Amazon Linux 2로의 대체 마이그레이션 경로를 제공했습니다. 이 주제에서는 해당 마이그레이션 경로에 대해 설명하며, 해당 마이그레이션 경로를 완료한 모든 고객을 위한 참조로 이 문서에 유지됩니다.

이제 *64비트 Amazon Linux 에서 실행되는 멀티컨테이너 Docker* 플랫폼 브랜치를 기반으로 하는 환경을 가진 고객에게 *64비트 Amazon Linux 2에서 실행되는 ECS* 플랫폼 브랜치로 마이그레이션을 권장합니다. 대체 마이그레이션 경로와 달리, 이 접근 방식은 Amazon ECS를 사용하여 ECS 관리형 Docker 환경에 대한 컨테이너 배포를 조정합니다. 이 측면은 좀 더 간단한 접근 방식을 지원합니다. 소스 코드에 대한 변경이 필요하지 않으며, 동일한 `Dockerrun.aws.json` v2가 지원됩니다. 자세한 내용은 [Elastic Beanstalk 애플리케이션을 AL1의 ECS 관리형 다중 컨테이너 도커에서 Amazon Linux 2023 기반의 ECS로 마이그레이션](migrate-to-ec2-AL2-platform.md) 단원을 참조하십시오.

## Amazon Linux에서 실행되는 멀티컨테이너 Docker를 Amazon Linux 2에서 실행되는 Docker 플랫폼 브랜치로 레거시 마이그레이션
<a name="docker-multicontainer-migration-to-docker-al2"></a>

[Amazon Linux AMI의 멀티컨테이너 Docker 플랫폼](create_deploy_docker_ecs.md)에서 실행되는 애플리케이션을 Amazon Linux 2 Docker 플랫폼으로 마이그레이션 할 수 있습니다. Amazon Linux AMI의 멀티컨테이너 Docker 플랫폼을 사용하려면 컨테이너로 실행할 미리 빌드된 애플리케이션 이미지를 지정해야 합니다. 마이그레이션 후에는 Amazon Linux 2 Docker 플랫폼에서 Elastic Beanstalk가 배포 중에 컨테이너 이미지를 빌드할 수 있으므로 더 이상 이러한 제한이 없습니다. 애플리케이션은 Docker Compose 도구의 추가 이점과 함께 멀티컨테이너 환경에서 계속 실행됩니다.





Docker Compose는 멀티컨테이너 Docker 애플리케이션을 정의하고 실행하는 도구입니다. Docker Compose에 대한 자세한 내용과 설치 방법은 Docker 사이트에서 [Docker Compose 개요](https://docs.docker.com/compose/) 및 [Docker Compose 설치](https://docs.docker.com/compose/install/)를 참조하십시오.

### `docker-compose.yml` 파일
<a name="docker-multicontainer-migration.files"></a>

Docker Compose 도구는 애플리케이션 서비스를 구성하는 데 `docker-compose.yml` 파일을 사용합니다. 이 파일은 애플리케이션 프로젝트 디렉터리 및 애플리케이션 소스 번들에 있는 `Dockerrun.aws.json v2` 파일을 대체합니다. `docker-compose.yml` 파일을 수동으로 생성하면 대부분의 파라미터 값에 대해 `Dockerrun.aws.json v2` 파일을 참조하는 것이 도움이 됩니다.

다음은 `docker-compose.yml` 파일과 동일한 애플리케이션에 해당하는 `Dockerrun.aws.json v2` 파일의 예제입니다. `docker-compose.yml` 파일에 대한 자세한 내용은 [Compose 파일 참조](https://docs.docker.com/compose/compose-file/)를 확인하십시오. `Dockerrun.aws.json v2` 파일에 대한 자세한 내용은 [`Dockerrun.aws.json` v2](create_deploy_docker_v2config.md#create_deploy_docker_v2config_dockerrun) 단원을 참조하십시오.


| **`docker-compose.yml`** | **`Dockerrun.aws.json v2`** | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/docker-multicontainer-migration.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/docker-multicontainer-migration.html)  | 
|  <pre>version: '2.4'<br />services:<br />  php-app:<br />    image: "php:fpm"<br />    volumes:<br />      - "./php-app:/var/www/html:ro"<br />      - "${EB_LOG_BASE_DIR}/php-app:/var/log/sample-app"<br />    mem_limit: 128m<br />    environment:<br />      Container: PHP<br />  nginx-proxy:<br />    image: "nginx"<br />    ports:<br />      - "80:80"<br />    volumes:<br />      - "./php-app:/var/www/html:ro"<br />      - "./proxy/conf.d:/etc/nginx/conf.d:ro"<br />      - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx"<br />    mem_limit: 128m<br />    links:<br />      - php-app</pre>  | 
|  <pre>{<br />  "AWSEBDockerrunVersion": 2,<br />  "volumes": [<br />    {<br />      "name": "php-app",<br />      "host": {<br />        "sourcePath": "/var/app/current/php-app"<br />      }<br />    },<br />    {<br />      "name": "nginx-proxy-conf",<br />      "host": {<br />        "sourcePath": "/var/app/current/proxy/conf.d"<br />      }<br />    }<br />  ],<br />  "containerDefinitions": [<br />    {<br />      "name": "php-app",<br />      "image": "php:fpm",<br />      "environment": [<br />        {<br />          "name": "Container",<br />          "value": "PHP"<br />        }<br />      ],<br />      "essential": true,<br />      "memory": 128,<br />      "mountPoints": [<br />        {<br />          "sourceVolume": "php-app",<br />          "containerPath": "/var/www/html",<br />          "readOnly": true<br />        }<br />      ]<br />    },<br />    {<br />      "name": "nginx-proxy",<br />      "image": "nginx",<br />      "essential": true,<br />      "memory": 128,<br />      "portMappings": [<br />        {<br />          "hostPort": 80,<br />          "containerPort": 80<br />        }<br />      ],<br />      "links": [<br />        "php-app"<br />      ],<br />      "mountPoints": [<br />        {<br />          "sourceVolume": "php-app",<br />          "containerPath": "/var/www/html",<br />          "readOnly": true<br />        },<br />        {<br />          "sourceVolume": "nginx-proxy-conf",<br />          "containerPath": "/etc/nginx/conf.d",<br />          "readOnly": true<br />        },<br />        {<br />          "sourceVolume": "awseb-logs-nginx-proxy",<br />          "containerPath": "/var/log/nginx"<br />        }<br />      ]<br />    }<br />  ]<br />}<br /> </pre>  | 

### 추가 마이그레이션 고려 사항
<a name="docker-multicontainer-migration.considerations"></a>

Docker Amazon Linux 2 플랫폼과 멀티컨테이너 Docker Amazon Linux AMI 플랫폼은 환경 속성을 다르게 구현합니다. 또한 이 두 플랫폼에는 Elastic Beanstalk에서 각 컨테이너에 대해 생성하는 로그 디렉토리가 서로 다릅니다. Amazon Linux AMI 멀티 컨테이너 Docker 플랫폼에서 마이그레이션한 후에는 새로운 Amazon Linux 2 Docker 플랫폼 환경에 대한 이러한 다양한 구현을 알고 있어야 합니다.


|  **영역**  |  **Docker Compose를 사용하는 Amazon Linux 2의 Docker 플랫폼**  |  **Amazon Linux AMI의 멀티컨테이너 Docker 플랫폼**  | 
| --- | --- | --- | 
|  환경 속성  |  컨테이너가 환경 속성에 액세스하려면 `.env` 파일의 `docker-compose.yml` 파일에 대한 참조를 추가해야 합니다. Elastic Beanstalk는 `.env` 파일을 생성하여 각 속성을 환경 변수로 나열합니다. 자세한 내용은 [컨테이너의 환경 변수 참조](create_deploy_docker.container.console.md#docker-env-cfg.env-variables) 단원을 참조하세요.  |  Elastic Beanstalk는 환경 속성을 컨테이너에 직접 전달할 수 있습니다. 컨테이너에서 실행 중인 코드는 추가 구성 없이 이러한 속성에 환경 변수로 액세스 할 수 있습니다.  | 
|  로그 디렉터리  |  각 컨테이너에 대해 Elastic Beanstalk는 `/var/log/eb-docker/containers/<service name>`(또는 `${EB_LOG_BASE_DIR}/<service name>`)이라는 로그 디렉터리를 생성합니다. 자세한 내용은 [Docker Compose를 사용한 Docker 컨테이너 사용자 지정 로깅](create_deploy_docker.container.console.md#docker-env-cfg.dc-customized-logging) 단원을 참조하세요.  |  각 컨테이너에 대해 Elastic Beanstalk는 `/var/log/containers/<containername>`이라는 로그 디렉터리를 생성합니다. 자세한 내용은 [컨테이너 정의 형식](create_deploy_docker_v2config.md#create_deploy_docker_v2config_dockerrun_format)의 `mountPoints` 필드를 참조하세요.  | 

### 마이그레이션 단계
<a name="docker-multicontainer-migration.procedure"></a>

**Amazon Linux 2 Docker 플랫폼으로 마이그레이션하려면**

1. 기존 `docker-compose.yml ` 파일을 기반으로 애플리케이션에 대한 `Dockerrun.aws.json v2` 파일을 생성합니다. 자세한 내용은 위의 [`docker-compose.yml` 파일](#docker-multicontainer-migration.files) 섹션을 참조하십시오.

1. 애플리케이션 프로젝트 폴더의 루트 디렉터리에서 `Dockerrun.aws.json v2` 파일을 방금 생성한 `docker-compose.yml`로 바꿉니다.

   디렉터리 구조는 다음과 같아야 합니다.

   ```
   ~/myApplication
   |-- docker-compose.yml
   |-- .ebextensions
   |-- php-app
   |-- proxy
   ```

1. **eb init** 명령을 사용하여 Elastic Beanstalk에 배포할 로컬 디렉터리를 구성합니다.

   ```
   ~/myApplication$ eb init -p docker application-name
   ```

1.  **eb create** 명령을 사용하여 환경을 생성하고 Docker 이미지를 배포합니다.

   ```
   ~/myApplication$ eb create environment-name
   ```

1. 앱이 웹 애플리케이션인 경우 환경이 시작된 후 **eb open** 명령을 사용하여 웹 브라우저에서 확인합니다.

   ```
   ~/myApplication$ eb open environment-name
   ```

1. **eb status** 명령을 사용하여 새로 생성된 환경의 상태를 표시할 수 있습니다.

   ```
   ~/myApplication$ eb status environment-name
   ```

# Elastic Beanstalk의 사전 구성된 Docker GlassFish 컨테이너
<a name="create_deploy_dockerpreconfig"></a>

**참고**  
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

Amazon Linux AMI(AL1) 에서 실행되는 미리 구성된 도커 GlassFish 플랫폼 브랜치는 더 이상 지원되지 않습니다. GlassFish 애플리케이션을 지원되는 Amazon Linux 2023 플랫폼으로 마이그레이션하려면 GlassFish와 애플리케이션 코드를 Amazon Linux 2023 도커 이미지에 배포합니다. 자세한 내용은 [도커 플랫폼에 GlassFish 애플리케이션 배포: Amazon Linux 2023에 대한 마이그레이션 경로](#docker-glassfish-tutorial) 주제를 참조하십시오.

## Amazon Linux AMI(이전 Amazon Linux 2)에서 미리 구성된 Docker 컨테이너 시작하기
<a name="create_deploy_dockerpreconfig.walkthrough"></a>

이 섹션에서는 미리 구성된 도커 컨테이너를 사용하여 로컬로 예제 애플리케이션을 개발한 다음 애플리케이션을 Elastic Beanstalk에 배포하는 방법을 연습합니다.

### 로컬 개발 환경 설정
<a name="create_deploy_dockerpreconfig.walkthrough.setup"></a>

이 연습을 위해 GlassFish 예제 애플리케이션을 사용합니다.

**환경을 설정하려면**

1. 예제 애플리케이션을 위한 새 폴더를 만듭니다.

   ```
   ~$ mkdir eb-preconf-example
   ~$ cd eb-preconf-example
   ```

1. 예제 애플리케이션 코드를 새 폴더에 다운로드하십시오.

   ```
   ~$ wget https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/docker-glassfish-v1.zip
   ~$ unzip docker-glassfish-v1.zip
   ~$ rm docker-glassfish-v1.zip
   ```

### 로컬로 개발 및 테스트
<a name="create_deploy_dockerpreconfig.walkthrough.dev"></a>

**예제 GlassFish 애플리케이션을 개발하려면**

1. 애플리케이션의 루트 폴더에 `Dockerfile`을 추가합니다. 파일에서 로컬 사전 구성된 AWS Elastic Beanstalk Docker 컨테이너를 실행하는 데 사용할 Docker 기본 이미지를 지정합니다. 나중에 애플리케이션을 Elastic Beanstalk 미리 구성된 Docker GlassFish 플랫폼 버전에 배포합니다. 이 플랫폼 버전에서 사용하는 도커 기본 이미지를 선택하십시오. 플랫폼 버전의 현재 도커 이미지를 확인하려면 *AWS Elastic Beanstalk 플랫폼* 안내서에서 *AWS Elastic Beanstalk 지원 플랫폼* 페이지의 [미리 구성된 도커](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.dockerpreconfig)을 참조하세요.  
**Example \$1/Eb-preconf-example/Dockerfile**  

   ```
   # For Glassfish 5.0 Java 8
   FROM amazon/aws-eb-glassfish:5.0-al-onbuild-2.11.1
   ```

   `Dockerfile` 사용에 대한 자세한 내용은 [Elastic Beanstalk에 배포하도록 Docker 이미지 준비](single-container-docker-configuration.md) 단원을 참조하십시오.

1. 도커 이미지를 구축합니다.

   ```
   ~/eb-preconf-example$ docker build -t my-app-image .
   ```

1. 해당 이미지에서 도커 컨테이너를 실행합니다.
**참고**  
컨테이너의 포트 3000을 로컬 호스트 포트 8080에 매핑하려면 `-p` 플래그를 포함시켜야 합니다. Elastic Beanstalk 도커 컨테이너는 항상 컨테이너의 포트 8080에 애플리케이션을 표시합니다. `-it` 플래그는 이미지를 대화형 프로세스로 실행합니다. `--rm` 플래그는 컨테이너가 종료될 때 컨테이너 파일 시스템을 정리합니다. 필요에 따라 `-d` 플래그를 포함시켜 이미지를 데몬으로 실행할 수도 있습니다.

   ```
   $ docker run -it --rm -p 3000:8080 my-app-image
   ```

1. 예제 애플리케이션을 보려면 웹 브라우저에 다음 URL을 입력합니다.

   ```
   http://localhost:3000
   ```  
![\[웹 브라우저에 표시되는 GlassFish 예제 애플리케이션\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/dockerpreconfig-webpage.png)

### Elastic Beanstalk에 배포
<a name="create_deploy_dockerpreconfig.walkthrough.deploy"></a>

애플리케이션을 테스트하면 이를 Elastic Beanstalk에 배포할 준비가 완료됩니다.

**Elastic Beanstalk에 애플리케이션을 배포하려면**

1. 애플리케이션의 루트 폴더에서 `Dockerfile`을 `Dockerfile.local`로 이름을 바꿉니다. 이 단계는 Elastic Beanstalk가 Elastic Beanstalk에 대한 올바른 지침이 포함된 `Dockerfile`을 사용하여 Elastic Beanstalk 환경의 각 Amazon EC2 인스턴스에 사용자 지정된 도커 이미지를 빌드하는 데 필요합니다.
**참고**  
`Dockerfile`에 플랫폼 버전의 기본 도커 이미지를 수정하는 지침이 포함된 경우 이 단계를 수행하지 않아도 됩니다. `Dockerfile`에 컨테이너를 구축할 기본 이미지를 지정하는 `Dockerfile` 줄만 포함된 경우 `FROM`을 사용하지 않아도 됩니다. 이 경우 `Dockerfile`은 불필요합니다.

1. 애플리케이션 소스 번들을 생성합니다.

   ```
   ~/eb-preconf-example$ zip myapp.zip -r *
   ```

1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 콘솔을 엽니다. [console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. **플랫폼**에 대해, **미리 구성된 – Docker**에서 **Glassfish**를 선택합니다.

1. [**Application code**]에서 [**Upload your code**]를 선택한 다음 [**Upload**]를 선택합니다.

1. **로컬 파일**을 선택하고 **Browse(찾아보기)**를 선택한 후 방금 생성한 애플리케이션 소스 번들을 엽니다.

1. **업로드**를 선택합니다.

1. **검토 및 시작**을 선택합니다.

1. 사용 가능한 설정을 검토한 후 **앱 생성**을 선택합니다.

1. 환경이 생성되면 배포된 애플리케이션을 볼 수 있습니다. 콘솔 대시보드 상단에 표시되는 환경 URL을 선택하십시오.

## 도커 플랫폼에 GlassFish 애플리케이션 배포: Amazon Linux 2023에 대한 마이그레이션 경로
<a name="docker-glassfish-tutorial"></a>

이 자습서의 목표는 미리 구성된 Docker GlassFish 플랫폼(Amazon Linux AMI 기반)을 사용하는 고객에게 Amazon Linux 2023에 대한 마이그레이션 경로를 제공하는 것입니다. GlassFish 및 애플리케이션 코드를 Amazon Linux 2023 도커 이미지에 배포하여 GlassFish 애플리케이션을 Amazon Linux 2023으로 마이그레이션할 수 있습니다.

이 자습서에서는 AWS Elastic Beanstalk Docker 플랫폼을 사용하여 [Java EE GlassFish 애플리케이션 서버를](https://www.oracle.com/middleware/technologies/glassfish-server.html) 기반으로 애플리케이션을 Elastic Beanstalk 환경에 배포하는 방법을 안내합니다.

도커 이미지를 작성하는 두 가지 방법을 보여줍니다:
+ **단순** – GlassFish 애플리케이션 소스 코드를 제공하고 Elastic Beanstalk가 사용자 환경을 프로비저닝하는 과정에서 도커 이미지를 빌드 및 실행하도록 합니다. 인스턴스 프로비저닝 시간이 늘어나면 쉽게 설정할 수 있습니다.
+ **고급** – 애플리케이션 코드와 종속성이 포함된 사용자 지정 도커 이미지를 빌드하고 사용자 환경에서 사용할 수 있도록 Elastic Beanstalk에 제공합니다. 해당 접근 방식은 관련성이 더 높으며 사용자 환경에서 인스턴스의 프로비저닝 시간을 단축합니다.

### 사전 조건
<a name="docker-glassfish-tutorial.prereqs"></a>

이 튜토리얼에서는 사용자가 기본 Elastic Beanstalk 작업, Elastic Beanstalk 명령줄 인터페이스(EB CLI), 그리고 도커에 대해 어느 정도 알고 있다고 가정합니다. 아직 그렇지 않은 경우 [Elastic Beanstalk를 시작하는 방법 알아보기](GettingStarted.md)의 지침에 따라 첫 Elastic Beanstalk 환경을 시작합니다. 이 튜토리얼에서는 [EB CLI](eb-cli3.md)를 사용하지만 Elastic Beanstalk 콘솔을 사용하여 환경을 생성하고 애플리케이션을 업로드할 수도 있습니다.

이 튜토리얼을 따르려면 다음 도커 구성 요소도 필요합니다:
+ 도커가 로컬에 유효하게 설치되어야 합니다. 자세한 정보는 도커 설명서 웹 사이트에서 [도커 가져오기](https://docs.docker.com/install/)를 참조하세요.
+ 도커 허브에 액세스합니다. 도커 허브에 액세스하려면 도커 ID를 생성해야 합니다. 자세한 내용은 도커 설명서 웹 사이트에서 [애플리케이션 공유](https://docs.docker.com/get-started/04_sharing_app/)를 참조하세요.

Elastic Beanstalk 플랫폼에서 Docker 환경을 구성하는 방법에 대한 자세한 내용은 해당 같은 챕터에서 [Elastic Beanstalk에 배포하도록 Docker 이미지 준비](single-container-docker-configuration.md)을(를) 참조하세요.

### 단순 예제: 애플리케이션 코드 제공
<a name="docker-glassfish-tutorial.simple"></a>

GlassFish 애플리케이션을 배포하는 손쉬운 방법입니다. 이 자습서에 포함된 `Dockerfile`과 함께 애플리케이션 소스 코드를 제공합니다. Elastic Beanstalk는 애플리케이션 및 GlassFish 소프트웨어 스택을 포함하는 도커 이미지를 빌드합니다. 그런 다음 Elastic Beanstalk가 사용자 환경 인스턴스에서 이미지를 실행합니다.

이 접근 방식의 문제점은 Elastic Beanstalk가 사용자 환경에 대한 인스턴스를 생성할 때마다 도커 이미지를 로컬로 빌드하는 것입니다. 이미지를 빌드하면 인스턴스 프로비저닝 시간이 늘어납니다. 이러한 영향은 초기 환경 생성에만 국한되지 않고 스케일 아웃 작업 중에도 발생합니다.

**예제 GlassFish 애플리케이션을 사용하여 환경을 시작하려면**

1. 예제 `docker-glassfish-al2-v1.zip`을 다운로드한 다음 개발 환경의 디렉터리로 `.zip` 파일을 확장합니다.

   ```
   ~$ curl https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/docker-glassfish-al2-v1.zip --output docker-glassfish-al2-v1.zip
   ~$ mkdir glassfish-example
   ~$ cd glassfish-example
   ~/glassfish-example$ unzip ../docker-glassfish-al2-v1.zip
   ```

   디렉터리 구조는 다음과 같아야 합니다.

   ```
   ~/glassfish-example
   |-- Dockerfile
   |-- Dockerrun.aws.json
   |-- glassfish-start.sh
   |-- index.jsp
   |-- META-INF
   |   |-- LICENSE.txt
   |   |-- MANIFEST.MF
   |   `-- NOTICE.txt
   |-- robots.txt
   `-- WEB-INF
       `-- web.xml
   ```

   다음 파일은 사용자 환경에서 Docker 컨테이너를 빌드하고 실행하는 데 중요합니다.
   + `Dockerfile` – Docker가 애플리케이션 및 필수 종속성을 사용하여 이미지를 빌드하는 데 사용하는 지침을 제공합니다.
   + `glassfish-start.sh` – 도커 이미지가 애플리케이션을 시작하기 위해 실행되는 쉘 스크립트입니다.
   + `Dockerrun.aws.json` – GlassFish 애플리케이션 서버 로그를 [로그 파일 요청](using-features.logging.md)에 포함하기 위해 로깅 키를 제공합니다. GlassFish 로그에 관심이 없으면 이 파일을 생략할 수 있습니다.

1. Elastic Beanstalk에 배포할 로컬 디렉터리를 구성합니다.

   ```
   ~/glassfish-example$ eb init -p docker glassfish-example
   ```

1. (선택 사항) **eb local run** 명령을 사용하여 컨테이너를 로컬로 빌드 및 실행합니다.

   ```
   ~/glassfish-example$ eb local run --port 8080
   ```
**참고**  
**eb local** 명령에 대한 자세한 내용은 [**eb local**](eb3-local.md) 단원을 참조하십시오. 이 명령은 Windows에서 지원되지 않습니다. 또는 **docker build** 및 **docker run** 명령으로 컨테이너를 빌드 및 실행할 수도 있습니다. 자세한 내용은 [도커 설명서](https://docs.docker.com/)를 참조하십시오.

1. (선택 사항) 컨테이너 실행 중에는 **eb local open** 명령을 사용하여 웹 브라우저에서 애플리케이션을 봅니다. 또는 웹 브라우저에서 [http://localhost:8080/](http://localhost:8080/)을(를) 엽니다.

   ```
   ~/glassfish-example$ eb local open
   ```

1. **eb create** 명령을 사용하여 환경을 생성하고 애플리케이션을 배포합니다.

   ```
   ~/glassfish-example$ eb create glassfish-example-env
   ```

1. 사용자 환경이 시작된 후 **eb open** 명령을 사용하여 웹 브라우저에서 봅니다.

   ```
   ~/glassfish-example$ eb open
   ```

예제 작업이 완료되면 환경을 종료하고 관련 리소스를 삭제합니다.

```
~/glassfish-example$ eb terminate --all
```

### 고급 예제: 미리 빌드된 도커 이미지 제공
<a name="docker-glassfish-tutorial.advanced"></a>

GlassFish 애플리케이션을 배포하는 고급 방법입니다. 첫 번째 예제를 기반으로 애플리케이션 코드와 GlassFish 소프트웨어 스택이 포함된 도커 이미지를 생성하고 Docker Hub로 푸시합니다. 이 일회성 단계가 완료된 후 사용자 지정 이미지를 기반으로 Elastic Beanstalk 환경을 시작할 수 있습니다.

사용자 환경을 시작하고 도커 이미지를 제공하면 사용자 환경의 인스턴스가 이 이미지를 직접 다운로드하여 사용하므로 도커 이미지를 빌드할 필요가 없습니다. 따라서 인스턴스 프로비저닝 시간이 단축됩니다.

**참고**  
다음 단계를 따라 공개 사용이 가능한 도커 이미지를 생성합니다.
도커 허브 자격 증명과 함께 로컬 도커 설치에서 도커 명령을 사용합니다. 자세한 내용은 이 주제의 이전 *사전 조건* 섹션을 참조하세요.

**미리 빌드된 GlassFish 애플리케이션 도커 이미지가 있는 환경을 시작하려면**

1. 앞의 [단순 예제](#docker-glassfish-tutorial.simple)와 같이 예제 `docker-glassfish-al2-v1.zip`을 다운로드하고 확장합니다. 이 예제를 완료한 경우 이미 가지고 있는 디렉터리를 사용할 수 있습니다.

1. 도커 이미지를 빌드하고 Docker Hub로 푸시합니다. Docker Hub에 로그인하려면 *docker-id*에 Docker ID를 입력하세요.

   ```
   ~/glassfish-example$ docker build -t docker-id/beanstalk-glassfish-example:latest .
   ~/glassfish-example$ docker push docker-id/beanstalk-glassfish-example:latest
   ```
**참고**  
이미지 푸시 전에 **docker login**을 실행해야 할 수 있습니다. 파라미터없이 명령을 실행하면 Docker Hub 자격 증명을 묻는 메시지가 표시됩니다.

1. 추가 디렉터리를 생성합니다.

   ```
   ~$ mkdir glassfish-prebuilt
   ~$ cd glassfish-prebuilt
   ```

1. 다음 예제를 `Dockerrun.aws.json`이라는 파일에 복사합니다.  
**Example `~/glassfish-prebuilt/Dockerrun.aws.json`**  

   ```
   {
     "AWSEBDockerrunVersion": "1",
     "Image": {
       "Name": "docker-username/beanstalk-glassfish-example"
     },
     "Ports": [
       {
         "ContainerPort": 8080,
         "HostPort": 8080
       }
     ],
     "Logging": "/usr/local/glassfish5/glassfish/domains/domain1/logs"
   }
   ```

1. Elastic Beanstalk에 배포할 로컬 디렉터리를 구성합니다.

   ```
   ~/glassfish-prebuilt$ eb init -p docker glassfish-prebuilt$
   ```

1. (선택 사항) **eb local run** 명령을 사용하여 컨테이너를 로컬로 실행합니다.

   ```
   ~/glassfish-prebuilt$ eb local run --port 8080
   ```

1. (선택 사항) 컨테이너 실행 중에는 **eb local open** 명령을 사용하여 웹 브라우저에서 애플리케이션을 봅니다. 또는 웹 브라우저에서 [http://localhost:8080/](http://localhost:8080/)을(를) 엽니다.

   ```
   ~/glassfish-prebuilt$ eb local open
   ```

1. **eb create** 명령을 사용하여 환경을 생성하고 도커 이미지를 배포합니다.

   ```
   ~/glassfish-prebuilt$ eb create glassfish-prebuilt-env
   ```

1. 사용자 환경이 시작된 후 **eb open** 명령을 사용하여 웹 브라우저에서 봅니다.

   ```
   ~/glassfish-prebuilt$ eb open
   ```

예제 작업이 완료되면 환경을 종료하고 관련 리소스를 삭제합니다.

```
~/glassfish-prebuilt$ eb terminate --all
```