Bash 将容器从GitLab部署到EC2的正确方法

Bash 将容器从GitLab部署到EC2的正确方法,bash,docker,amazon-ec2,gitlab,Bash,Docker,Amazon Ec2,Gitlab,我尝试将我的容器从gitlab registry部署到EC2实例,我到达目的地是部署我的容器,但是当我更改了一些内容,并且想要再次部署时,需要删除旧容器和旧映像并再次部署,为此,我创建了这个脚本来删除所有内容并再次部署 ... deploy-job: stage: deploy only: - master script: - mkdir -p ~/.ssh - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa

我尝试将我的容器从gitlab registry部署到EC2实例,我到达目的地是部署我的容器,但是当我更改了一些内容,并且想要再次部署时,需要删除旧容器和旧映像并再次部署,为此,我创建了这个脚本来删除所有内容并再次部署

...
deploy-job:
  stage: deploy
  only:
    - master

  script:
    - mkdir -p ~/.ssh
    - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh -i ~/.ssh/id_rsa ec2-user@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com &&
     docker stop $(docker ps -a -q) &&
     docker rm $(docker ps -a -q) &&
     docker pull registry.gitlab.com/doesntmatter/demo:latest &&
     docker image tag registry.gitlab.com/doesntmatter/demo:latest doesntmatter/demo &&
     docker run -d -p 80:8080 doesntmatter/demo"
当我尝试此脚本时,出现以下错误:

 "docker stop" requires at least 1 argument.    <<-------------------- error
 See 'docker stop --help'.
 Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]
 Stop one or more running containers
Running after script
00:01
Uploading artifacts for failed job
00:01
 ERROR: Job failed: exit code 1

“docker stop”至少需要一个参数 执行作业时,可能没有容器在运行

为了避免这种行为,您可以将命令更改为:

docker ps -a -q | xargs -r sudo docker stop
docker ps -a -q | xargs -r sudo docker rm
如果没有容器在运行,这些将不会产生错误


之后,确实有其他方法可以在AWS上部署容器,其中有处理容器的服务,比如,或。还可以考虑使用IaC原则部署您的基础设施(即使对于您的ec2实例也是如此)。

干得好,这项工作做得很好,谢谢您的建议,我也会按照您在回答中提到的内容进行操作:)当我获得足够的声誉时,返回您的回答。如承诺的那样;D