简记docker用法
《简记docker用法》
2019年,第一次使用 docker 做算法的服务端部署工作,整体感觉很流畅,很方便,可以很快的进行多节点部署,不用担心环境问题。时间真快,转眼2021年了。工作再次涉及到 docker,这里简单记录一下 docker 的用法。整理笔记是个对自己和他人都有益的事情,我会一直坚持。时光是一指流沙,苍老是一段年华。时间抓不住,也留不下。记忆只是脑海中的片段,再怎么拼凑也不及一篇当时精心整理的博文,从此刻开始留下你的足迹吧,希望看到此文的小伙伴也能开始写博客,赠人玫瑰手有余香。
Key Words:docker简单理解、docker常用命令、docker部署算法应用
Beijing, 2021.01
作者:RaySue
Agile Pioneer
文章目录
- docker 简介
- docker 常用命令
- docker 拉取镜像
- docker 查看镜像&容器
- docker 运行镜像
- docker 删除镜像
- docker 查看&终止 运行进程
- docker copy 文件
- docker 保存 容器 到新的 镜像 中
- docker 镜像打包重复使用
- 本地调用 docker 容器内的服务
- docker 使用私有云
- Pycharm 配置Docker环境 Interpreter
- 参考
docker 简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
镜像(Image)、容器(Container) 与 仓库(Repository),这三个是docker中最基本也是最核心的概念.
- Image(镜像,只读层的集合)
镜像是一堆只读层的统一视角,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层。
- Container(容器,一层读写层+多层只读层)
Docker的镜像是用于生成容器的模板,镜像分层的,镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象,对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」 + 隔离的进程空间和其中的进程构成的。
镜像与容器的关系:
- 仓库(Repository)
我们使用两种方式构建镜像,构建完成之后,可以在本地运行镜像,生成容器,但如果在更多的服务器运行镜像呢?很明显,我们需要一个可以让我们集中存储和分发镜像的服务,就像Github可以让我们自己存储和分发代码一样。
docker 常用命令
ubuntu 重启docker
sudo systemctl restart docker
docker 拉取镜像
以拉取centos系统镜像为例,我们也可以拉取python镜像,也是直接带基础的系统镜像的
docker pull centos:7
docker 配置国内镜像源,加速拉取镜像
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
docker 查看镜像&容器
查看所有 镜像
docker images
查看所有 容器
docker container ls
docker 运行镜像
简单交互式执行镜像
docker run -it image:tag /bin/bash
指定资源及 GPU devices 运行镜像
指定 --name=surui 运行镜像,否则每次运行一个镜像都会给随机指派一个名字;如果没有正确退出,比如断网,且不及时docker rm(移除运行中的容器)就会占用系统资源;而退出后未运行的容器也会占用磁盘空间(未运行的容器除磁盘空间外不占用任何系统资源);如果我们每次指定好名字运行,那么已经使用过的名字就需要我们 docker rm 才可以再次运行,避免了上述的情况
sudo docker run -e NVIDIA_DRIVER_CAPABILITIES=compute,utility --env NVIDIA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 --shm-size 128G --name=surui -it xxx:xxx /bin/bash
docker 同一个容器启动多个终端
# 两个终端完全同步 docker attach ${container_id} # 两个终端不同步 docker exec -it ${container_id} /bin/bash
- 注意:上述两种方法,在任意一个容器中执行 exit 就都退出了
docker 删除镜像
删除镜像
# 普通删除 docker rmi image_id(or image_name)# 强制删除 docker rmi -f image_id(or image_name)
docker 查看&终止 运行进程
查看运行信息: docker ps
启动镜像后,可以通过 docker ps 命令会得到下面的信息:
- CONTAINER ID: 容器 ID,一个独立运行环境的ID
- IMAGE:镜像 ID,
- CREATED:容器开始运行时间
- STATUS:状态
- PORTS:向外映射的端口
.
终止运行的容器:
docker kill ${CONTAINER ID}
docker copy 文件
上述 ps 结果中 ${CONTAINER ID} 是我们 copy 文件(or 文件夹)的时候所需要的
从本地磁盘向docker里copy文件命令
docker cp /local/dir {CONTAINER ID}:/docker/path
从docker向本地磁盘copy文件命令
docker cp {CONTAINER ID}:/docker/path /local/dir
docker 保存 容器 到新的 镜像 中
- 把启动的 container commit 到新的 docker 路径,然后再 push
- docker tag 某个镜像,然后再 push
- 如果你想把你的镜像存到指定的位置,比如从 xxx/yyy/zzz:v0 到 zzz/yyy/xxx:v0,你需要先用 docker tag xxx/yyy/zzz:v0 zzz/yyy/xxx:v0,然后再 docker push zzz/yyy/xxx:v0
当你 run 一个镜像的时候,你就开启了一个容器。你在容器中进行了各种搭建环境,甚至开发程序,然后 exit 之后就立马回到了解放前,所以如果你想要保存当前所修改的内容,就需要对当前的 容器ID 存储为新的 镜像即可
上传地址域名/项目/image:tag
# -a: 修改者信息 -m: 注释、说明 紧跟着当前操作的容器id 最后是要生成的新的镜像名称docker commit -a "surui" -m "commit info" ${CONTAINER ID} dockerhub.xx.com/project/zzz:v1
如果你的 tag 是已经存在的,那么就会把之前的 tag 变为 <none>
执行之后,查看当前的镜像(images)就会发现多了一条 dockerhub.xx.com/project/zzz:v1
,这个新的镜像就是你在运行之后的内容保存的结果,否则,当你重启你当前的 ${CONTAINER ID} 后所有的修改就全还原了。
docker 镜像打包重复使用
这个功能是非常方便的,把你需要的各种环境都存到 tar 包里面,存在硬盘里面,要用的时候直接下载一个docker load 你的环境就 OK
在你的所有镜像中,找到你要迁移的镜像存成 tar 包,对应的镜像信息如下:
REPOSITORY TAG IMAGE ID CREATED SIZE centos 7 8652b9f0cb4c 8 weeks ago 204MB docker save centos:7 -o /centos7.tar
然后把这个 tar 包转到你要安装的机器中,执行如下命令即可:
docker load < centos7.tar
本地调用 docker 容器内的服务
必须要指定 ip、端口 及 container端口
-p ip:hostPort:containerPort (映射指定地址的指定端口)
docker run -it -p 127.0.0.1:8000:8000 dockerhub.xxx.com/cow_steps/co_est_det:v1
这样在容器内启动的 localhost:8000 的服务,在本地就可以调用了
docker 使用私有云
vi /etc/docker/daemon.json
- 配置 insecure-registries 添加如下信息
{"insecure-registries": ["dockerhub.xx.com", "xxxxxx.com"]
}
- 配置登录域名及信息 docker login
Pycharm 配置Docker环境 Interpreter
这里简单记录一下,配置流程,详细看参考的帖子。
Preferences -> Project: xxx -> Project Interpreter -> (右上角图标齿轮)-> Add…
-> Docker -> New… (等待 连接成功)-> Ok
参考
docker官方网址
docker教程
docker 镜像 save 后部署到其他地方
镜像和容器
Pycharm 使用 Docker 环境
10分钟掌握docker基础知识
简记docker用法相关推荐
- Docker 用法总结之:管理工具 shipyard 的具体使用指南
Docker 的命令行就已经非常好用了,假设非要加上基于 Web 的管理界面的话也有一些选择,如 DockerUI (Angular.js), Dockland (Ruby), Shipyard (P ...
- Docker用法整理
Docker教程推荐 两个不错的参考资料: https://yeasy.gitbooks.io/docker_practice/content/introduction/ https://www.cn ...
- Docker入门级学习简记
Docker入门级学习简记 Docker简记 Docker是用来安装应用的容器,是开源,支持跨平台的 Docker思想:集装箱,标准化(运输方式,存储方式,API接口),隔离 Docker解决的问题: ...
- 自动化集成:Pipeline整合Docker容器
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成Docker用法. 一.背景描述 微服务架构 ...
- docker发布一个springboot项目真香
docker用法 1.先配置一个mysql环境 直接run一个mysql容器,命令如下 docker run -p 3306:3306 --network my-bridge --name db -v ...
- 基于 Docker 搭建 Hadoop 平台
基于 Docker 搭建完全分布式 Hadoop 平台 前言 环境 遇到的坑 折腾实录 一.构建镜像 1. 准备JDK和Hadoop 2. 构建centos-hadoop镜像 二.启动容器 三.集群搭 ...
- 使用tensorflow-serving部署tensorflow模型
使用docker部署模型的好处在于,避免了与繁琐的环境配置打交道.使用docker,不需要手动安装Python,更不需要安装numpy.tensorflow各种包,直接一个docker就包含了全部.d ...
- jumpserver堡垒机 (资源)
23.5 jumpserver介绍 • 官网www.jumpserver.org • 跳板机概述: 跳板机就是一台服务器,开发戒运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标 设备迚 ...
- spleeter分离伴奏和人声
文章目录 什么是源分离? 使用手册 使用2stems模型 使用4stems模型 使用5stems模型 批量处理 训练模型 评估模型 使用Docker映像 建立影像 运行容器 windows下配置spl ...
最新文章
- window7共享xp或者2003的文件设置
- android studio导出apk步骤
- DeepHSV:号称可以商用的计算机笔迹鉴别算法
- 大班如果我有机器人教案_幼儿园大班教案《小猴投彩球》
- Angular 个人深究(四)【生命周期钩子】
- iPod Touch也将支持运行Android系统
- python----运行机制
- 怎么用python语法1234_python 基本语法1
- Colmap中depth_map部分的源码
- 台电x80h安装linux,Teclast 台电 X80h吃上win10,附实际使用体验
- 解决win7资源监视器不能开启
- 群晖NAS系统DSM入门
- 我在Facebook工作的十大经验分享
- Java实习面试一般问什么?选大公司还是小公司?
- Android使用FFmpeg 解码H264并播放(一)
- mac上彻底删除 搜狗输入法 鼠须管输入法
- 论文解读(PairNorm)《PairNorm: Tackling Oversmoothing in GNNs》
- 《Boost程序完全开发指南》
- resolution will not be reattempted until the update interval of XXX has elapsed or updates are force
- 百度地图InfoWindow信息窗口的自定义和样式修改
热门文章
- 编程实现strcpy函数_C编程中的strcpy()
- jQuery选择文本事件函数– select()方法
- win10安装应用商店版word(ump版word)
- web前端:技术提升必学的HTML用法
- [译]理解Node.js事件驱动机制
- 南阳OJ 16 矩形嵌套
- LeetCode 110. Balanced Binary Tree
- 剑指offer——面试题9:求斐波那切数列的四种方法
- tensorflow 函数查找
- android4.4之后的HttpUrlConnection的实现是基于okhttp