这是一个练手的小项目的升级版,已知docker容器名字为my_ubuntu,且已经开机.
通过外部运行API方式让本地1.txt 2.txt传入docker的/app/prj路径下作为输入文件,执行可执行程序deal,最终获得1.ou 2.ou 3.ou再传入docker外,即本地.
且本地与ubuntu是脱离的,在windows系统上
sudo gedit /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd-current
改为ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
2. 重启docker 服务
```bash
systemctl daemon-reload
systemctl restart docker
此时远端已经可以访问我们IP:2375端口来访问本机docker
根据官网,使用docker-curl命令下载一个镜像(内网不同主机此处192.112.0.122改为自己的IP)
curl -XPOST "http://192.112.0.122:2375/v1.41/images/create?fromImage=ubuntu&tag=latest"
创建我们的容器
curl -H "Content-Type: application/json" http://192.112.0.122:2375/containers/create?name=my_ubuntu -d '{
"Image": "ubuntu:latest",
"HostConfig": {
"NetworkMode": "host",
"Binds": [
"/tmp:/tmp"
]
},
"Cmd": [
"tail","-f","/dev/null"
]
}'
启动容器
curl -XPOST http://192.112.0.122:2375/containers/my_ubuntu/start
在docker官网上我只找到了一种上传方法,就是上传文件的压缩包(tar)格式,传送到容器中会自动解压到容器路径,
tar czvf input.tar 1.txt 2.txt 3.txt
,此时压缩包input.tar下就这三个文件curl -T input.tar -PUT "http://192.112.0.122:2375/v1.41/containers/ubuntu_bolang/archive?path=/app/prj"
执行命令分为两步,实例化命令,和执行实例化
创建命令实例后会拿到一个id
curl -H "Content-Type: application/json" http://192.112.0.122:2375/containers/ubuntu_bolang/exec -d '{ "AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"DetachKeys": "ctrl-p,ctrl-q",
"Tty": false,
"Cmd": [
"sh","-c","cd test && sh ./push.sh"
],
"Env": [
"FOO=bar",
"BAZ=quux"
]
}'
{"Id":"b873b67f17a024aea12bb1a2d50fbc2917a13abc61e82b62f4be050aa7c5c70d"}
id的字符序列
即可curl -XPOST -H "Content-Type: application/json" http://192.112.0.122:2375/exec/id的字符序列/start -d '{
"Detach": false,
"Tty": false
}'
仍然和下载的一样,必须以.tar方式保存到本地,解压后才不会乱码(自动压缩)
某种意义上讲,也就是只能用-o而不是-O了,因为-O 直接以原文件名储存到本地,不带任何参数都可以
curl -GET "http://192.112.0.122:2375/v1.41/containers/ubuntu_bolang/archive?path=/app/prj/output/1.ou" -o out.tar
已知output下只有1.ou 2.ou 3.ou文件
curl -GET "http://192.112.0.122:2375/v1.41/containers/ubuntu_bolang/archive?path=/app/prj/output/" -o out.zip
此时已经完成了基本需求,但是甲方要求必须指定文件格式与数量上传,没办法,只能上apache2或者nginx文件服务器喽,下节再见,我选择apache2,在这里nginx也是可以的.