【Docker】--6.外部调用docker指令,shell脚本

这是一个练手的小项目,已知docker容器名字为my_ubuntu,且已经开机.
通过外部运行API方式让本地1.txt 2.in 3.in传入docker的/app/exec路径下作为输入文件,执行可执行程序deal,最终获得1.ou 2.ou 3.ou再传入docker外,即本地.

1. docker的exec命令

对docker exec命令要有更深的认识,如下

sudo docker exec my_ubuntu /bin/bash

的意思是,在my_ubuntu的容器下执行/bin/bash命令,那么问题就方便多了,比如

sudo docker exec my_ubuntu /bin/bash -c "ls"

就是列举当下docker文件夹下文件

2.再联合docker cp命令

  1. 逐句执行
sudo docker cp 1.txt my_ubuntu:app/exec
sudo docker cp 2.in my_ubuntu:app/exec
sudo docker cp 3.in my_ubuntu:app/exec 
  1. 打开docker并且执行可执行文件
sudo docker exec my_ubuntu /bin/bash -c "cd /app/exec && chmod 777 . && ./deal"
  1. 将可执行文件传出,前边是镜像,后边是本地
sudo docker cp my_ubuntu:app/exec/1.ou . && sudo docker cp my_ubuntu:app/exec/2.ou . && sudo docker cp my_ubuntu:app/exec/3.ou .

3. 总结为一句命令行

这里为什么一个文件一个文件复制,因为docker cp 一次只支持一个文件, 我也别无他法,有更好的建议评论区告诉我,感谢

sudo docker cp 1.txt my_ubuntu:app/exec && sudo docker cp 2.in my_ubuntu:app/exec && sudo docker cp 3.in my_ubuntu:app/exec && sudo docker exec my_ubuntu /bin/bash -c "cd /app/exec && chmod 777 . && ./deal" && sudo docker cp my_ubuntu:app/exec/1.ou . && sudo docker cp my_ubuntu:app/exec/2.ou . && sudo docker cp my_ubuntu:app/exec/3.ou .

4. shell封装

写一个sh脚本,考虑到不是每个用户的容器都叫做my_ubuntu,所以加了read读取用户id,用户输入即可. 输入的变量存入CONTATINER中,$CONTATINER可直接获取,在shell里是可以换行就代表一句,可以不加&&,个人习惯

#!/bin/bash
#@autor: 312
#@time: 2022 -10 -18 16:45
echo 'pleast type the name of container'
read -p "请输入您的容器名称(请确保容器已经开机)" CONTATINER
echo "您的容器名为"$CONTATINER

sudo docker cp 1.txt $CONTATINER:app/exec && sudo docker cp 2.in $CONTATINER:app/exec && sudo docker cp 3.in $CONTATINER:app/exec
echo "传入文件成功,开始执行"
sudo docker exec $CONTATINER /bin/bash -c "cd /app/exec && chmod 777 . && ./deal"
echo "执行成功,开始获取"
sudo docker cp $CONTATINER:app/exec/1.ou . && sudo docker cp $CONTATINER:app/exec/2.ou . && sudo docker cp $CONTATINER:app/exec/3.ou .
echo "生成文件已经拉取到本地"
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用docker-compose.yml文件和shell脚本可以实现一键部署应用的思路如下: 首先,我们需要编写docker-compose.yml文件。这个文件是用来定义应用的服务的配置和依赖关系的。我们可以在该文件中指定要运行的容器,每个容器的配置以及它们之间的网络和依赖关系。比如,我们可以定义一个web服务容器,一个数据库容器和一个缓存容器等等。在每个服务的配置中,我们可以指定容器镜像、端口映射、环境变量等。 接下来,我们可以编写一个shell脚本来自动化部署过程。脚本可以先检查是否已安装dockerdocker-compose工具,如果没有安装则自动安装它们。然后,脚本可以调用docker-compose命令来启动、停止或重启我们在docker-compose.yml文件中定义的服务。我们还可以在脚本中添加一些其他的命令,如清理旧的容器或镜像、查看容器状态等。 最后,我们可以将docker-compose.yml文件和shell脚本打包成一个压缩文件,方便在其他环境中使用。当我们想要在另一台机器或另一个环境中部署应用时,只需将该压缩文件传输到目标机器,并解压缩。然后,在目标机器上运行shell脚本,它将自动安装dockerdocker-compose,并根据docker-compose.yml文件中的配置启动应用的容器。 使用docker-compose.yml文件和shell脚本可以大大简化应用的部署过程。它们提供了一种可重复、可扩展的方式来部署应用,减少了手动操作的错误和时间。同时,它们也提供了一种标准化的部署方式,方便团队协作和维护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值