通过docker将aws-cli集成到linux命令行

通过docker将aws-cli集成到linux命令行

为了避免有太多的本地安装,我决定将 aws 和 kubectl cli 封装到 docker 容器中,并通过此脚本进行集成,该脚本可在以下路径上访问:

#!/bin/bash
set -e
VERSION=0.9
AWS_DIR=~/.aws
KUBE_DIR=~/.kube

if [[ "$1" == "build" ]]; then
    CONTAINER=awsclibuild
   docker run -v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro --name=${CONTAINER} -itd -e http_proxy -e https_proxy -e no_proxy --net=host ubuntu:jammy sleep infinity

   #Install aws cli
   docker exec -it $CONTAINER bash -c "apt-get update && apt-get install -y curl unzip less"
   docker exec -it $CONTAINER bash -c "curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip"
   docker exec -it $CONTAINER bash -c "unzip awscliv2.zip"
   docker exec -it $CONTAINER bash -c "./aws/install"

    #install kubectl cli
    docker exec -it $CONTAINER bash -c 'curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"'
    docker exec -it $CONTAINER bash -c "install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl"


   docker stop $CONTAINER
   docker commit $CONTAINER awskubectl:$VERSION
   docker rm -f $CONTAINER
   exit 0
fi


docker run -it --rm \
    -e http_proxy -e https_proxy -e no_proxy -e AWS_PROFILE \
    --net=host \
    -v /mnt/c:/mnt/c \
    -v ~/.aws:/root/.aws \
    -v ~/.kube:/root/.kube \
    -v "$(pwd)":/userworkdir \
    -w /userworkdir \
    awskubectl:$VERSION bash -c "$*"

这在大多数情况下都有效,但不起作用的是,例如将输出通过管道传输到 grep。

例如如果我这样做:

 aws iam list-roles

它完美地打开了较少的内容,我可以浏览。

但如果我这样做:

 aws iam list-roles | grep "something"

它最终什么都没显示,但当我按“q”时又返回了。所以我猜想管道没有传播到docker容器。当然,这只会使用默认的“less”。

你知道我如何才能更好地将其集成到命令行吗

相关内容