

# Ejecución de las imágenes oficiales de Amazon ECR Public o Docker para la AWS CLI
<a name="getting-started-docker"></a>

En este tema se describe cómo ejecutar, controlar la versión y configurar la AWS CLI versión 2 en Docker mediante la imagen oficial de Amazon Elastic Container Registry Public (Amazon ECR Public) o Docker Hub. Para obtener más información sobre cómo usar Docker, consulte la [documentación de Docker](https://docs.docker.com/).

Las imágenes oficiales proporcionan aislamiento, portabilidad y seguridad que AWS respalda y mantiene directamente. Esto le permite utilizar la versión 2 de la AWS CLI en un entorno basado en contenedores sin tener que administrar la instalación usted mismo. 

**Topics**
+ [Requisitos previos](#cliv2-docker-prereq)
+ [Decisión entre Amazon ECR Public y Docker Hub](#cliv2-docker-versus)
+ [Ejecución de las imágenes oficiales de AWS CLI versión 2](#cliv2-docker-install)
+ [Notas sobre interfaces y compatibilidad con versiones anteriores de las imágenes oficiales](#cliv2-docker-install-notes)
+ [Uso de versiones y etiquetas específicas](#cliv2-docker-upgrade)
+ [Actualización a la imagen oficial más reciente](#cliv2-docker-update)
+ [Comparta llos archivos anfitrión, credenciales, variables del entorno y configuración](#cliv2-docker-share-files)
+ [Acortamiento del comando docker run](#cliv2-docker-aliases)

## Requisitos previos
<a name="cliv2-docker-prereq"></a>

Debe tener instalado Docker. Para obtener instrucciones de instalación, consulte el [sitio web de Docker](https://docs.docker.com/install/). 

Para verificar la instalación de Docker, ejecute el siguiente comando y confirme que hay un resultado.

```
$ docker --version
Docker version 19.03.1
```

## Decisión entre Amazon ECR Public y Docker Hub
<a name="cliv2-docker-versus"></a>

Recomendamos utilizar Amazon ECR Public en lugar de Docker Hub para las imágenes de la AWS CLI. Docker Hub tiene una limitación de velocidad más estricta para los consumidores públicos, lo que puede causar problemas de limitación. Además, Amazon ECR Public replica imágenes en más de una región para proporcionar una disponibilidad sólida y controlar los problemas de interrupción de las regiones. 

Para obtener más información sobre la limitación de velocidad de Docker Hub consulte [Understanding Docker Hub Rate Limiting](https://www.docker.com/increase-rate-limits/) (Descripción de la limitación de velocidad de Docker Hub) en el sitio web de *Docker*.

## Ejecución de las imágenes oficiales de AWS CLI versión 2
<a name="cliv2-docker-install"></a>

 La primera vez que utilice el comando `docker run`, se descargará la última imagen en su equipo. Cada uso posterior del comando `docker run` se ejecuta desde la copia local. 

Para ejecutar las imágenes Docker de la AWS CLI versión 2, utilice el comando `docker run`.

------
#### [ Amazon ECR Public ]

La imagen de Amazon ECR Public oficial de la AWS CLI versión 2 está alojada en Amazon ECR Public en el [repositorio de `aws-cli/aws-cli`](https://gallery.ecr.aws/aws-cli/aws-cli).

```
$ docker run --rm -it public.ecr.aws/aws-cli/aws-cli command
```

------
#### [ Docker Hub ]

La imagen de Docker oficial de la AWS CLI versión 2 está alojada en Docker Hub en el repositorio de `amazon/aws-cli`.

```
$ docker run --rm -it amazon/aws-cli command
```

------

El comando funciona de la siguiente manera:
+ `docker run --rm -it repository/name`: el equivalente de la `aws` ejecutable. Cada vez que ejecuta este comando, Docker hace girar un contenedor de la imagen descargada y ejecuta el comando `aws`. De forma predeterminada, la imagen utiliza la versión más reciente de la AWS CLI versión 2.

  Por ejemplo, para llamar al comando `aws --version` en Docker, ejecute lo siguiente.

------
#### [ Amazon ECR Public ]

  ```
  $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli --version
  aws-cli/2.27.41 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  ```

------
#### [ Docker Hub ]

  ```
  $ docker run --rm -it amazon/aws-cli --version
  aws-cli/2.27.41 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  ```

------
+ `--rm`: especifica que se limpie el contenedor después de que el comando salga.
+ `-it` – especifica que se abra un pseudoTTY con `stdin`. Esto le permite proporcionar datos a la versión 2 de la AWS CLI mientras se está ejecutando en un contenedor, por ejemplo, mediante el uso de los comandos `aws configure` y `aws help`. Al elegir si se debe omitir `-it`, tenga en cuenta lo siguiente:
  + Si está ejecutando scripts, `-it` no es necesario. 
  + Si experimenta errores con los scripts, omitir `-it` de la llamada Docker puede resolver el problema.
  + Si está intentando canalizar la salida, `-it` puede provocar errores y la omisión `-it` de la llamada Docker puede resolver este problema. Si desea conservar la marca `-it`, pero aún así quisiera canalizar la salida, desactivar la [Paginación del lado del cliente](cli-usage-pagination.md#cli-usage-pagination-clientside) que AWS CLI usa de forma predeterminada debería resolver el problema.

Para obtener más información sobre el comando `docker run`, consulte la [guía de referencia de Docker](https://docs.docker.com/engine/reference/run/).

## Notas sobre interfaces y compatibilidad con versiones anteriores de las imágenes oficiales
<a name="cliv2-docker-install-notes"></a>
+ La única herramienta admitida en la imagen es AWS CLI. Solo el ejecutable `aws` se debe ejecutar directamente. Por ejemplo, aunque `less` y `groff` están instalados explícitamente en la imagen, no se deben ejecutar directamente fuera de un comando AWS CLI.
+ El directorio de trabajo de `/aws` está controlado por el usuario. La imagen no se escribirá en este directorio, a menos que el usuario le indique que ejecute un comando de AWS CLI.
+ No hay garantías de compatibilidad con versiones anteriores para confiar en la última etiqueta. Para garantizar la compatibilidad con versiones anteriores, debe anclar una etiqueta `<major.minor.patch>` específica, ya que esas etiquetas son inmutables; solo se enviarán una vez.

## Uso de versiones y etiquetas específicas
<a name="cliv2-docker-upgrade"></a>

La imagen oficial de la AWS CLI versión 2 tiene varias versiones que puede usar, comenzando con la versión `2.0.6`. Para ejecutar una versión específica de la versión 2 de la AWS CLI, agregue la etiqueta adecuada al comando `docker run`. La primera vez que utiliza el comando `docker run` con una etiqueta, la imagen más reciente para esa etiqueta se descarga en el equipo. Cada uso posterior del comando `docker run` con esa etiqueta se ejecuta desde la copia local. 

Puede utilizar dos tipos de etiquetas: 
+ `latest`: define la última versión de la de la AWS CLI versión 2 para la imagen. Le recomendamos que utilice la etiqueta `latest` cuando desee la versión más reciente de la versión 2 de la AWS CLI. Sin embargo, no hay garantías de compatibilidad con versiones anteriores al usar esta etiqueta. La etiqueta `latest` se utiliza de forma predeterminada en el comando `docker run`. Para utilizar explícitamente la etiqueta `latest`, agregue la etiqueta al nombre de la imagen del contenedor.

------
#### [ Amazon ECR Public ]

  ```
  $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:latest command
  ```

------
#### [ Docker Hub ]

  ```
  $ docker run --rm -it amazon/aws-cli:latest command
  ```

------
+ `<major.minor.patch>`: define una versión específica de la AWS CLI versión 2 para la imagen Docker. Si piensa utilizar una imagen oficial en producción, le recomendamos que use una versión específica de la AWS CLI versión 2 para garantizar la compatibilidad con versiones anteriores. Por ejemplo, para ejecutar la versión `2.0.6`, agregue la versión al nombre de la imagen del contenedor.

------
#### [ Amazon ECR Public ]

  ```
  $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:2.0.6 command
  ```

------
#### [ Docker Hub ]

  ```
  $ docker run --rm -it amazon/aws-cli:2.0.6 command
  ```

------

## Actualización a la imagen oficial más reciente
<a name="cliv2-docker-update"></a>

Dado que la imagen más reciente se descarga en el equipo solo la primera vez que utiliza el comando `docker run`, debe extraer manualmente una imagen actualizada. Para actualizar manualmente a la versión más reciente, le recomendamos que extraiga la imagen etiquetada `latest`. Al extraer la imagen, se descarga la versión más reciente en el equipo.

------
#### [ Amazon ECR Public ]

```
$ docker pull public.ecr.aws/aws-cli/aws-cli:latest
```

------
#### [ Docker Hub ]

```
$ docker pull amazon/aws-cli:latest
```

------

## Comparta llos archivos anfitrión, credenciales, variables del entorno y configuración
<a name="cliv2-docker-share-files"></a>

Dado que la versión 2 de la AWS CLI se ejecuta en un contenedor, la CLI no puede acceder de forma predeterminada al sistema de archivos anfitrión, que incluye la configuración y las credenciales. Para compartir el sistema de archivos anfitrión, las credenciales y la configuración en el contenedor, monte el directorio `~/.aws` del sistema host en el contenedor en `/root/.aws` con la etiqueta `-v` del comando `docker run`. Esto permite que la versión 2 de la AWS CLI, que se está ejecutando en el contenedor, localice la información del archivo anfitrión.

------
#### [ Amazon ECR Public ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws  public.ecr.aws/aws-cli/aws-cli command
```

------
#### [ Docker Hub ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli command
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli command
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws  amazon/aws-cli command
```

------

Para obtener más información acerca la etiqueta `-v` y el montaje, consulte la [guía de referencia de Docker](https://docs.docker.com/storage/volumes/). 

**nota**  
Para obtener información sobre los archivos de `config` y `credentials`, consulte [Opciones de los archivos de configuración y credenciales en la AWS CLI](cli-configure-files.md).

### Ejemplo 1: proporcionar credenciales y configuración
<a name="cliv2-docker-share-files-config"></a>

En este ejemplo, proporcionamos las credenciales de anfitrión y la configuración al ejecutar el comando `s3 ls` para mostrar los buckets en Amazon Simple Storage Service (Amazon S3). Los siguientes ejemplos utilizan la ubicación predeterminada para los archivos de credenciales y de configuración de la AWS CLI, para utilizar una ubicación diferente, cambie la ruta del archivo.

------
#### [ Amazon ECR Public ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls
```

------
#### [ Docker Hub ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli s3 ls
```

------

Puede llamar a variables de entorno específicas del sistema utilizando el marcador `-e`. Para utilizar una variable de entorno, llámelo por su nombre. 

------
#### [ Amazon ECR Public ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls
```

------
#### [ Docker Hub ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls
```

------

### Ejemplo 2: Descarga de un archivo Amazon S3 en el sistema de anfitrión
<a name="cliv2-docker-share-files-s3"></a>

Para algunos comandos de la AWS CLI versión 2, puede leer archivos del sistema de host en el contenedor o escribir archivos desde el contenedor en el sistema de host. 

En este ejemplo, descargamos el objeto `S3` `s3://aws-cli-docker-demo/hello` a su sistema de archivos local montando el directorio de trabajo actual en el directorio `/aws` del contenedor. Al descargar el objeto `hello` en el directorio `/aws` del contenedor, el archivo también se guarda en el directorio de trabajo actual del sistema de host.

------
#### [ Amazon ECR Public ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
download: s3://aws-cli-docker-demo/hello to ./hello
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
download: s3://aws-cli-docker-demo/hello to ./hello
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
```

------
#### [ Docker Hub ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
download: s3://aws-cli-docker-demo/hello to ./hello
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
download: s3://aws-cli-docker-demo/hello to ./hello
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
```

------

Para confirmar que el archivo descargado existe en el sistema de archivos local, ejecute lo siguiente.

**Linux y macOS**

```
$ cat hello
Hello from Docker!
```

**Windows PowerShell**

```
$ type hello
Hello from Docker!
```

### Ejemplo 3: uso de la variable de entorno AWS\$1PROFILE
<a name="cliv2-docker-share-files-envvars"></a>

Puede llamar a variables de entorno específicas del sistema utilizando el marcador `-e`. Llame a cada variable de entorno que desee utilizar. En este ejemplo, proporcionamos las credenciales de anfitrión, la configuración y la variable de entorno *AWS\$1PROFILE* cuando se ejecuta el comando `s3 ls` para mostrar los buckets en Amazon Simple Storage Service (Amazon S3).

------
#### [ Amazon ECR Public ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls
```

------
#### [ Docker Hub ]

**Linux y macOS**

```
$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Símbolo del sistema de Windows**

```
$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo
```

**Windows PowerShell**

```
C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls
```

------

## Acortamiento del comando docker run
<a name="cliv2-docker-aliases"></a>

Para acortar el comando `docker run`, le sugerimos que utilice la capacidad del sistema operativo para crear un [https://www.linux.com/topic/desktop/understanding-linux-links/](https://www.linux.com/topic/desktop/understanding-linux-links/) (enlace simbólico) o [https://www.linux.com/topic/desktop/aliases-diy-shell-commands/](https://www.linux.com/topic/desktop/aliases-diy-shell-commands/) en Linux y macOS o [https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey) en Windows. Para establecer el alias de `aws`, puede ejecutar uno de los siguientes comandos:
+ Para obtener acceso básico a los comandos de `aws`, ejecute lo siguiente.

------
#### [ Amazon ECR Public ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it public.ecr.aws/aws-cli/aws-cli'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it public.ecr.aws/aws-cli/aws-cli $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it public.ecr.aws/aws-cli/aws-cli $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------
#### [ Docker Hub ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it amazon/aws-cli'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it amazon/aws-cli $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it amazon/aws-cli $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------
+ Para acceder al sistema de archivos anfitrión y a las opciones de configuración cuando se utilizan comandos de `aws`, ejecute lo siguiente.

------
#### [ Amazon ECR Public ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------
#### [ Docker Hub ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------
+ Para asignar una versión específica para usarla en su alias de `aws`, agregue la etiqueta de versión.

------
#### [ Amazon ECR Public ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli:2.0.6'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------
#### [ Docker Hub ]

  **Linux y macOS**

  ```
  $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6'
  ```

  **Símbolo del sistema de Windows**

  ```
  C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli:2.0.6 $*
  ```

  **Windows PowerShell**

  ```
  C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli:2.0.6 $args}
  Set-Alias -Name aws -Value AWSCLI
  ```

------

Después de configurar el alias, puede ejecutar la AWS CLI versión 2 desde un contenedor como si estuviera instalado en su sistema host. 

```
$ aws --version
aws-cli/2.27.41 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
```