docker︱docker run的解读与一键部署
这是之前的文章:
docker︱在nvidia-docker中使用tensorflow-gpu/jupyter
文章目录
- 1 docker run的解读
- 1.1 docker run
- 1.2 几种进入容器的方式
- 2 docker .sh形式启动
- 2.1 常规报错
- 2.2 常规写法步骤
- 2.3 几个实践case
- 3 docker打包成.rar一键部署
- 3.1 docker 容器导出和导入(export / import )
- 3.2 docker 镜像的加载与导入(save / load)
- 3.3 容器与镜像导入/导出的差异
- 4 精简Docker镜像大小的必要性
- 4.1 docker大小精简的方式
- 4.2 清理Docker占用的磁盘空间的方式
- 5 Dockerfile
1 docker run的解读
1.1 docker run
docker run
有非常多的启动参数,可参考:Docker run 命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- –rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=“nginx-lb”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=“ritchie”: 设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]: 开放一个端口或一组端口;
- –volume , -v: 绑定一个卷
其中有几个笔者非常容易混淆的:
–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
1.2 几种进入容器的方式
docker exec -i -t mynginx /bin/bash
mynginx 可以是docker的名称也可以是containID
docker attach containID
2 docker .sh形式启动
如何在docker之中,程序自动启动
来看一下多个.sh文件同时启动:
docker run -idt ***/*** /bin/bash cs1.sh; cs2.sh; cs3.sh
但是,如何写好这个.sh
需要蛮多
2.1 常规报错
报错一:
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
2.2 常规写法步骤
步骤一:基本格式配置
.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
调整格式
2.3 几个实践case
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
之后,就代表在后台运行。不过,如果是接口类的,加入并不好,因为你可能还是需要可以看到一些记录
3 docker打包成.rar一键部署
Docker 脚本化一键部署
3.1 docker 容器导出和导入(export / import )
$ docker export my_centos > /data/app/meifen/my_centos-export-0428.tar
$ docker import /data/app/meifen/my_centos-export-0428.tar
3.2 docker 镜像的加载与导入(save / load)
使用 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
3.3 容器与镜像导入/导出的差异
容器导入(export / import )
- 是将当前容器变成一个新的镜像 2
- export 只导出当前的信息
- export导出的镜像文件大小 小于 save保存的镜像
- export是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag )
镜像导入 (save / load)
- 是复制镜像的过程
- save 保存镜像所有的信息-包含历史 2
- save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)(查看方式:docker images --tree)
4 精简Docker镜像大小的必要性
Docker 脚本化一键部署
4.1 docker大小精简的方式
下面是精简Docker镜像尺寸的好处:
减少构建时间
减少磁盘使用量
减少下载时间
因为包含文件少,攻击面减小,提高了安全性
提高部署速度
清除 yum 缓存
$ yum clean headers
$ yum clean packages
$ yum clean all
- 清除无用的tar.gz安装包
- 选择更小的基础镜像
4.2 清理Docker占用的磁盘空间的方式
命令查看磁盘使用情况
$ du -hs /var/lib/docker/
用于查看Docker的磁盘使用情况
docker system df
清理磁盘
$ docker system prune
可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
$ docker system prune -a
迁移 /var/lib/docker 目录
5 Dockerfile
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
docker︱docker run的解读与一键部署相关推荐
- IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证
IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证 Docker开启远程访问 修改该Docker服务文件 加载配置与重启 验证是否开启成功 IDEA配置docker 编写 ...
- Docker 部署 SpringBoot 的两种方法,后一种一键部署超好用!
点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达! 来源:cnblogs.com/npeng/p/14267007.html 1.手工方式 1.1.准备Springboot jar项目 1.2 ...
- docker学习总结第六篇:Kubernetes一键部署利器-kubeadm
通过前面几篇文章的内容,我其实阐述了这样一个思想:要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用. 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位 ...
- daemon.json无法启动docker_devops一键部署|详解如何搭建git+maven+jenkins+docker
流程及原理 流程梳理: 微服务一键部署实现后只需要将测试好的代码提交至版本管理工具(如:git.SVN),程序会自动实现更新代码并打包发布等后面的流程,省心省力. 实现过程 前置环境: 默认已经装好J ...
- docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像
一.前言 1.本文主要内容 将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~ Docker部署SpringBoot 项目 ...
- Docker部署SpringBoot的两种方法,后一种一键部署超好用!
作者 | LemonSquash 来源 | cnblogs.com/npeng/p/14267007.html 1.手工方式 1.1.准备Springboot jar项目 将项目打包成jar 1.2. ...
- IDEA配置Docker一键部署SpringBoot项目(企业级做法)
Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...
- .netcore mvc docker环境jenkins一键部署(DevOps)
[前言] DevOps方面的文章很早之前就想分享了,挤出一点时间把前段时间搭建的一些提高开发效率的东西给大家分享一下吧. 本文介绍了一个.netcore mvc web项目,从项目push到githu ...
- 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...
最新文章
- 猫猫学IOS(四十)UI之核心动画_抖动效果_CAKeyframeAnimation
- centos光盘修复引导_CentOS系统启动/boot/initramfs修复(实验)
- linux系统安装yum环境
- wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构
- 线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例
- spark 性能优化
- 如何在Android上创建透明活动?
- 固定定位(HTML、CSS)
- 【转】SpringMVC整合websocket实现消息推送及触发
- java初级程序员必备的算法和数据结构入门只是,编程界的敲门砖,算法合集,简单详细
- 怎么彻底删除users下的文件夹_c盘中的users文件夹删除了怎么办?
- 详解xlwings包,用Python代替Excel VBA
- searchableSelect下拉框插件增加按拼音及首拼搜索
- 新编计算机英语第2版,新编计算机英语-电子教案2.ppt
- SEO从业者打造个人品牌的八个建议
- 华工《计算机应用基础 简答题》,华工《计算机应用基础》随堂练习
- CSS中强大的EM 单位
- 计算机一级中的进制,计算机一级课程中介绍的不同进制数转换方法之数学原理.doc...
- go mod 设置代理下载依赖包,溜溜的
- java实现 蓝桥杯 算法训练 安慰奶牛
热门文章
- 1026 逃跑的拉尔夫
- 作业五之系统设计时所实现的质量属性战术
- Could not open Hibernate Session for transaction, 数据库连接超时解决方法
- Travel(HDU 4284状压dp)
- xshell 5连接NAT模式的虚拟机
- 可视化管理一目了然 锐捷RG-UAC承载荔湾教育局“御网”之道
- 《jQuery Mobile入门经典》—— 2.2 展现CSS样式
- jquery cookie 本地不能工作的原因
- netbeans的python配置
- 返回高于平均分的人数,并将高于平均分的分数存放到另外一个数组中