这是之前的文章: docker︱在nvidia-docker中使用tensorflow-gpu/jupyter
docker run
有非常多的启动参数,可参考:Docker run 命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
其中有几个笔者非常容易混淆的:
–rm
–rm 运行之后删除这个container
默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另外一方面,你也可以保存容器所产生的数据。
但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。
这个时候你就需要--rm
这个参数了。 注意:--rm
和 -d
不能共用!
-d
如果在docker run后面追加-d=true
或者-d
,那么容器将会运行在后台模式。
此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的回话中。
需要注意的是,容器运行在后台模式下,是不能使用--rm
选项的。
**-it **
-it 是 -i -t 的缩写 -i 接受用户输入 -t 模拟终端模式
bash
bash以命令行形式启动
一般会看到:
sudo docker run -it -p 7100:7100 -p -v /home:/mnt $container --restart=always --name mstar -ti image_name bash
docker exec -i -t mynginx /bin/bash
mynginx 可以是docker的名称也可以是containID
docker attach containID
如何在docker之中,程序自动启动 来看一下多个.sh文件同时启动:
docker run -idt ***/*** /bin/bash cs1.sh; cs2.sh; cs3.sh
但是,如何写好这个.sh
需要蛮多
报错一:
exec user process caused "exec format error"
解决:
https://blog.csdn.net/qq_24452475/article/details/83242610
Script脚本 开头必须加 #!/bin/bash
,不然就会报错
报错二:
starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown
解决:
需要给予.sh文件chmod权限
chmod 777 ./test.sh
报错三:
exec user process caused "no such file or directory"
解决:
确定你的.sh文件确保存在,因为docker之中和你的宿主机不同
报错四:
“/bin/bash^M: bad interpreter: No such file or directory”
解决:
文件格式问题
dos2unix filename
步骤一:基本格式配置
.sh
基本格式,譬如:
#!/bin/bash
pip3 install --pre numpy==1.17.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install --pre xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install --pre sanic_cors -i https://pypi.tuna.tsinghua.edu.cn/simple
cd /mnt/drug
python3 recommendation.py
链式代码“&&”把多行指令结合成一行
步骤二:格式+权限调整
chmod 777 filename.sh
dos2unix filename.sh
chmod
给权限,dos2unix
调整格式
sudo docker run -it -p 7100:7100 -p 7101:7101 -v /etc/localtime:/etc/localtime:ro -v /home:/mnt $container --restart=always --name mstar -ti tensorflow:lasted /mnt/test.sh
--restart=always
,开机总启动
加了-d
之后,就代表在后台运行。不过,如果是接口类的,加入并不好,因为你可能还是需要可以看到一些记录
$ docker export my_centos > /data/app/meifen/my_centos-export-0428.tar
$ docker import /data/app/meifen/my_centos-export-0428.tar
使用 docker images 查看本机已有的镜像(也可以使用 docker commit 命令把一个正在运行的容器保存为镜像)
docker 保存save
格式:docker save IMAGE(镜像)
$ docker save 9610cfc68e8d > /data/app/meifen/my_centos-export-0428.tar
docker load < /home/my_centos-export-0428.tar
加载 load 有点慢,稍微等待一下,没有任何warn信息就表示保存OK。9610cfc68e8d 是镜像ID
下面是精简Docker镜像尺寸的好处:
$ yum clean headers
$ yum clean packages
$ yum clean all
命令查看磁盘使用情况
$ du -hs /var/lib/docker/
用于查看Docker的磁盘使用情况
docker system df
清理磁盘
$ docker system prune
可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
$ docker system prune -a
迁移 /var/lib/docker 目录
Dockerfile中文名叫镜像描述文件,是一个包含用于组合镜像目录的文本文档,也可以叫“脚本”。他通过读取Dockerfile中的指令安装步骤自动生成镜像。
补充:文件名称必须是:Dockerfile
有些github开源项目之中,就会有,那么可以照着下面的使用方法:
docker build -t 机构/镜像名称<:tags> Dockerfile目录
比如如下,最后一个.代表当前目录,因为我的Dockerfile文件就在这,也可以用绝对路径
docker build -t chentongwei.com/mywebapp:1.0.0 .
docker images
然后执行docker images 进行查看会发现有我们刚才构建的镜像
此时就在安装dockerfile,之后该docker会被命名为:chentongwei.com/mywebapp:1.0.0