每日一图

FileName: Docker.md

Auther: alvinszhang

Email: alvinszhang@outlook.com

CreateDate: 2021-10-20


Docker 学习实战路线

学习Docker的原因:这样一个场景,你打算学习 Machine LearningDeep Learning 等等,但是不想把电脑本地的环境变量搞乱,或许可以通过Anaconda去创建虚拟的Python环境,但是这样依然是在本地电脑创建的Python环境,治标不治本,而且也可能有卸载不干净的问题φ(* ̄0 ̄)。

现在我们来看一下Docker,我们可以用它创建不同版本Python的镜像(Image),基于镜像还可以创建互相隔离的容器(Container),然后在容器中进行编程环境的配置。

关键词:Docker、镜像Image、容器Container、Dockerfile、Python、Centos、Linux

01 Docker安装

安装比较简单,大家按照自己的操作系统,在Docker官网下载对应的版本就行了,在官网先注册账号登陆进去,然后会自动跳转到Docker Hub,然后在这里下载安装Docker。

安装好之后,可以在终端输入 docker 查看是否安装成功。

02 Docker常用指令

docker的指令有很多,我这里就介绍一下常用的指令,其他的指令你可以查看文档去学。

docker pull {image:tag}  #拉取镜像
docker images  #查看镜像
docker ps -a  #查看容器
docker rm -f {CONTAINER ID}  #删除容器
docker rmi {IMAGE ID}  #删除镜像
docker run -dit {IMAGE ID}  #镜像创建容器
docker exec -it {CONTAINER ID} /bin/bash  #进入容器
Ctrl+P+Q  #退出容器

下面我们就会简单上手。

03 Docker简单尝试

在Docker Hub查看各种各样的镜像(Image),然后选择你喜欢的镜像,使用指令 docker pull {image:tag} 获取。这里我们以ubuntu镜像为例。

找到ubuntu镜像,建议选择特定版本的Tag,例如 ubuntu:21.04

然后在终端运行 docker pull ubuntu:21.04

依次在终端执行以下命令:

docker pull ubuntu:21.04  #获取镜像
docker images   #查看镜像的{IMAGE ID}
docker run -dit {IMAGE ID}  #镜像创建容器
docker ps -a  #查看容器的{CONTAINER ID}
docker exec -it {CONTAINER ID} /bin/bash  #进入容器
# {随意操作一下试试,例如pwd、cd等等}
exit   #退出容器

可以发现这是一个极简的ubuntu系统,其中没有python环境,甚至没有vim工具,我们是无法在如此“干净”的系统中进行开发的,那我们需要手动一步步的去安装我发所需要的工具,那这样岂不是很麻烦,有没有什么办法是可以直接创建一个已经符合自己开发环境的镜像呢?这样的话,我直接用这个镜像创建出来的容器就直接可以用于开发了,不需要在容器中一步步的配置开发环境。Dockerfile,它就可以解决我们这个疑问!

04 Dockerfile

大家可以先简单浏览一下教程,Dockerfile 菜鸟教程,然后我这里以centos7镜像为基础镜像,构建一个带有python3.8.12的环境的简单镜像。下面附上dockerfile内容与实践。

此链接为dockerfile,点击可以查看,简单理解一下里面的语法,把它下载下来。

这里需要一些终端的操作知识,首先将dockerfile放到本地文件夹里,然后 cd {dockerfile_path} ,然后在此目录下终端输入 docker build -t centos7:1.0.0 -f ./centos7.dockerfile . ,这个文件目录要注意一下,可以看下我下面放的截图参考一下,然后等待它build完成。

然后在上一部分那样,简单尝试一下,先列出镜像、再创建容器、最后进入容器,在终端输入vim,发现这个镜像创建的容器按照我们的dockerfile创建得很成功!

也有python3环境,dockerfile里也安装了python3的pandas、numpy等库。

05 上传镜像到Docker Hub

我们使用dockerfile打造了个性化的镜像,那么如果想把这个镜像分享给别人呢?别人也得按照dockerfile创建一遍,这样显得有些麻烦。这个时候我们就可以把创建好的镜像上传到Docker Hub,然后别人仅仅需要执行一句 docker pull {image:tag} 就可以直接克隆下来你的镜像,这样就很方便。

首先得在Docker Hub创建一个仓库,用来存储自己制作的镜像。

在终端执行以下命令

docker login -u   #登陆自己的账号,需要输入密码
docker tag {image:tag} {username/image:tag}
docker push {username/image:tag}

报错了timeout,是因为docker地址为国外仓库上传、下载速度较慢。解决办法,在docker客户端直接修改 Preferences - Docker Engine ,把里面原有的几行删掉,替换成如下的内容,这是换上了国内的阿里源。

{"registry-mirrors": ["https://registry.docker-cn.com"]
}

再重新push一遍。

Push上传成功,然后在Docker Hub官网看一下自己的镜像,官网已经同步上来了。

06 Pull自己的镜像

我先把自己电脑本地的centos7镜像删掉,以免影响从Docker Hub拉取下来的镜像,顺便在这里介绍一下如何删除镜像和容器,删除镜像的前提是保证没有基于此镜像创建的容器,所以大部分时候,要首先删除对应的容器,然后在删除镜像。

docker rm -f {CONTAINER ID}  #删除容器
docker rmi {IMAGE ID}  #删除镜像

测试下 docker pull alvinszhang/centos7:1.0.0 ,成功!

结语:基本的docker全流程已经学习的差不多了,入门docker!


对了,这个是我的docker客户端原本 Preferences - Docker Engine 的内容,在这里记录一下,这个内容应该是没什么用的。

{"experimental": false,"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"features": {"buildkit": true}
}

Docker 学习实战路线相关推荐

  1. Docker学习:容器间数据挂载与共享 | 远程共享挂载数据卷 | sshfs挂载远程volume | 容器内部通过sshfs访问远程主机 | -v |--volumes-from(实战篇)

    前言 本讲是从Docker系列讲解课程,单独抽离出来的一个小节,主要介绍宿主.容器间数据共享,它的好处自然不言而喻,Tomcat集群就是这么玩儿的(多个tomcat服务,对应一套web应用). 核心原 ...

  2. C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版)

    C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版) 前言: 小编之前有跟大家分享过一篇架构师体系知识点总结的文章,今天在原来的基础上有所改变更新(2021版). ...

  3. C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2022架构师篇完整版)

    C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版) 前言: 小编之前有跟大家分享过一篇架构师体系知识点总结的文章,今天在原来的基础上有所改变更新(2021版). ...

  4. IDEA的Docker插件实战(Dockerfile篇)

    IDEA的Docker插件实战(Dockerfile篇) IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像.运行在指定的远程机器上,是学习和开发阶段的好帮手,本文 ...

  5. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  6. Docker 学习资源整理

    Docker 是近年来非常火的容器技术,而且啊 Docke r不仅仅是红帽和Canonical等Linux巨头眼里的宠儿,微软等专有软件公司也在热烈拥抱 Docker,所以就知道 Docker 为啥这 ...

  7. Docker容器实战思维

    Docker成功的基础 Docker的实现用到的基础技术(cgroups, namespace,分层文件系统)在Docker之前已经存在很多年,并且 Linux Containers(LXC)也在很多 ...

  8. 1.docker学习

    Docker -- 从入门到实践 http://udn.yyuap.com/doc/docker_practice/introduction/index.html 非常详细的Docker学习教程 ht ...

  9. Docker学习之路02:阿里云镜像加速器

    阿里云镜像加速器 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Docker的常用命令 Docker ...

最新文章

  1. 视频 + PPT | 用户中台建设实践解析
  2. HTTP通信协议的组成
  3. 桥接模式源码解析(jdk)
  4. IntelliJ IDEA 2017.3-2018.1 全系列汉化包
  5. html基础技术笔记
  6. CentOS笔记-系统概述
  7. 最流行6种微服务RPC技术,你一定要知道
  8. R语言数据可视化---交互式图表recharts包
  9. 用CSS绘制实体三角形并说明原理
  10. springboot基于javaweb的课堂考勤系统设计与实现毕业设计源码142335
  11. php_curl-5.4.3-VC9-x64下php_curl.dll加载出错
  12. 安卓逆向之某瓜数据app签名sign破解
  13. 百度搜索开户竞价推广如何写出优质创意?
  14. getc()、gets()、getchar()、scanf()的区别
  15. emv交易流程介绍,简易波动指标EMV基础知识介绍:EMV的计算公式_EMV应用法则
  16. 离职、辞职、辞退、劳动纠纷应该怎么办?(附劳动法)
  17. html依次显示选中的值,html 快速布局 - osc_pw143nru的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 证件照修改尺寸像素大小和存储大小
  19. automated creative optimization for e-commerce advertising
  20. (一)走进Linux世界(安装Centos8,初始化生产环境,GNU bash)

热门文章

  1. 高通 Msm835平台充电功能的开发与调试
  2. WorkFlow .Net 流程介绍
  3. Keil MDK生成LIB库以及使用LIB库
  4. linux中Iscpi命令详解(四)
  5. C语言switch 语句
  6. 织梦DedeCms网站信息统计代码
  7. 如何提交一份高质量的缺陷报告
  8. Xilinx PCIE CORE学习
  9. 从单块应用到微服务,血泪总结
  10. Android Java层和Native层通信入门指南开篇