import os
import docker
import time
import sys
import yaml
from draw_tool import visualize_under_folder
def copy_to_docker(from_path, to_path):
cmd = f"docker cp {from_path} {container.name}:{to_path}"
os.system(cmd)
def copy_from_docker(from_path, to_path):
cmd = f"docker cp {container.name}:{from_path} {to_path}"
os.system(cmd)
if __name__ == "__main__":
config_file = os.path.join(os.getcwd(), 'config.yaml')
print(config_file)
with open(config_file, 'r') as file:
config = yaml.safe_load(file)
# ------------------------------------------------------------------------------
# 自动化流程
# ------------------------------------------------------------------------------
client = docker.from_env()
# 启动容器
container = client.containers.run(config['docker_image_id'], name=config['cur_name'], detach=True)
print("create container", container.name)
# 删除
container.exec_run("rm -rf /home/xx")
# 拷贝数据文件到容器根目录
copy_to_docker(config['to_path'], "/")
# 删除某个文件某的一行
container.exec_run("sed -i '14d' start.sh")
# 重启容器
print("restart container", container.name)
container.restart()
# 启动roscore
container.exec_run("/bin/bash -c 'roscore'", stream=True)
time.sleep(2.0)
# exit(0)
# 运行仿真程序,监控结束信号
task_list = [
"source /opt/ros/noetic/setup.bash",
"roslaunch xx xx.launch"
]
cmd = "/bin/bash -c '{}'".format(";".join(task_list))
exec_log = container.exec_run(cmd, stream=True)
for line in exec_log[1]:
text = line.decode("utf-8")
if "[simulator_manager]: simulation finish" in text:
print("get finish flag in docker")
break
print(text, end='\n')
# 把录好的包拷贝出来
save_dir = os.path.join(config['bag_save_path'], config['cur_name'])
copy_from_docker("/data/recorder", save_dir)
# 容器停止和删除
container.stop()
container.remove()
# ------------------------------------------------------------------------------
# 结果可视化
# ------------------------------------------------------------------------------
visualize_under_folder(save_dir)
docker python api
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 安装模块 运行一个容器,并执行容器中的一个命令 端口映射 {'3306/tcp': 3300} 将容器的 TCP ...
- 安全研究人员发现了一个新的网络威胁,目标是公开暴露的Docker引擎API实例。 在这个活动中,攻击者利用错误配置...
- 8.1DockerAPI docker生态有3种RESTful风格的API: RegisterAPI:提供了与来存...
- 背景: 公司为了实现灰度发布,先需要开发一套系统,其中一部分就是平台实现操作docker镜像! 功能: 1、去do...
- 在自动化部署的过程中,我们如果一直人为的输入docker命令效率不高而且不好管理。那么,我们可以使用docker提...