docker desktop ubuntu镜像_原创 | Docker入门,看了不理解,假一赔命

写在前面

  • 这篇博客适合谁?

    • 对于Docker并不了解,只是有一点模糊的感觉,觉得Docker可以当成虚拟机用之类的

    • 只是下载了Docker软件,对于怎么配置,怎么玩,第一步干什么,完全一无所知

    • 其二,我从对Docker只有及其模糊(真的是模糊,我除了知道Docker是跟虚拟系统有关其他啥都不知道),到现在起码一问一不知(对应一问三不知)的状态,大概花了8个小时。

      这期间全靠我从网络上搜索到的资料。

      现在用我的话写出来,我觉得对于跟我相同开始情况的小白用户,能省不少时间,所以我要写。

    • 其次,确实,现在Docker相关的文章真的太多了,那我为什么还要写呢?

这篇文章主要是哪方面的Docker文章,纯入门?

  • 你做了哪些工作?

  • 首先,我一直都很好奇Docker这个东西,但从来没有机会去使用它。

    但是,这学期OS课的lab,纯Linux系统编程,虽然使用双系统或者虚拟机都是纯小学生的难易程度了,也不麻烦,但我想,为什么不用Docker呢?

    用双系统或者虚拟机也太过小儿科!

    所以,我就这样接触了Docker

  • 那么我使用Docker实现了什么?

    在lab中,我们需要用到的是纯终端下的gcc工具链还有vim等,那么这就是我需要的全部软件了!

    于是我在Docker中实现了「gcc+gdb+vim」环境,并push到了hub中。

  • 首先对于Docker的概念作出我的解释,尽量通俗易懂

  • 接着针对我用Docker的目的,从最开始的软件下载,到最后push一个自己的镜像到hub,整个过程以白话的形式描述出来,降低入门门槛,节省你的学习时间

  • 很高兴你问了我这个问题。

    本文主要:

入门Docker,你要下载什么?注册什么?

Docker for mac,这个你肯定要下载:点我下载Docker for mac and Windows的社区免费版本(https://www.docker.com/products/docker-desktop)

注册Docker官方账号,你需要它,像github一样你可以使用git把项目上传到上面!

注册一个Docker的官方账号,有利而无害,相信我!点我注册Docker Cloud官方账号

Docker安装好,账号也注册后,点击桌面顶栏的Docker图标,点击sign in,登陆你的Docker账号。

注册DaoCloud账号,获取加速服务!

不可否认,有时直接从Docker官方往本地pull镜像会十分缓慢。。。这时我们可以通过国内的Docker服务提供商免费获取加速pull镜像服务,阿里网易好像都有这种服务,我选择的是DaoCloud:点我注册DaoCloud账号

注册后登陆DaoCloud,找到这个按钮:

5586e28fff1d1e11166c966b675bac35.png

Docker加服务记得自行注册!

Docker的理解:

Docker,可以说是一个终端命令行的虚拟机,但更准确的说法,其实应该是一个虚拟环境。比如,你想要在PC上无缝使用Linux么?那么虚拟机并不是你唯一的出路,你还有Docker!我更愿意称Docker为一个容器,当然这只是Docker的一个狭义解释,Docker不止是一个容器,Docker包含3个重要概念:

  • 镜像(Image)

    镜像是静态的、可以被用户互相分享的文件。

    我们玩过双系统和虚拟机的人都知道,首先你需要一个.iso镜像,才能安装系统。

    Docker中的镜像也是这个东西,镜像是静态的,你不能对他操作,只能pull别人的镜像或者push自己的镜像。

  • 容器(Container)

    前面说过,镜像是静态不可操作的,只能被分享和下载,那什么是能被操作的呢?

    就是容器里!

    容器可以理解为镜像的动态状态,也就是我们虚拟机中系统装好后的状态,其实这么说是不对的,容器最符合的描述应该是Linux的iso文件的Live CD模式,比如我们玩双系统时都进入过Live CD模式,不安装系统而直接进入系统,很神奇是吧,Docker的容器就是这个概念,只不过更加轻量更加迅速便捷。

    但是Live CD的害处就是你关机后作出的修改安装的软件全部gg,容器也是一样,一旦被直接推出,之前安装的gcc啊vim啊啥的就会全部gg掉。

    如果要保存修改,就需要将当前容器封装成一个新的镜像,这样下次启动这个新的镜像后之前作出的修改还都在。

  • 仓库(Repository)

    各位在前面看到我写的pull和push什么的,有没有晕?

    不知道各位对于git熟悉不熟悉,Docker中的仓库很像git的代码仓库,你可以pull自己之前push到自己仓库的镜像到本地,也可以pull别人push到公共仓库的镜像到自己本地。

    说白了就是百度云盘,你可以上传(push)自己做好环境的Docker上去,也可以下载(pull)自己云端的镜像到本地。

    同时,我们知道百度云最大的特点就是分享(你懂的嘿嘿嘿),类比Docker,如果你得到百度云分享链接(别人的镜像名字、标签和别人的用户名),你还可以下载(pull)别人分享的镜像到自己的本地,别人也可以下载(pull)你的镜像,因为Docker仓库都是公共的。

    当然,每个免费用户有一个名额把自己的一个镜像设为私有。

这些概念如果你,使用Github就超级好理解了

b2b3346e1cf86c14546365c6e11a053a.png

实际操作下

查看Docker版本信息

终端输入:
docker version

显示的我的版本信息

 ~$ docker versionClient: Version:      17.06.2-ce API version:  1.30 Go version:   go1.8.3 Git commit:   cec0b72 Built:        Tue Sep  5 20:12:06 2017 OS/Arch:      darwin/amd64

当然如果你需要简单的信息可以使用docker -v

如何Pull你的第一个镜像?

Docker安装好后是不会自带镜像的,你需要从仓库自己pull一个镜像下来,自己制作自己的镜像也是一个道理,你可以通过在已有的镜像基础上生成自己的镜像或者:随便百度的如何创建自己Docker镜像得到的教程

Docker镜像官方好像只提供Linux

搜索ubuntu的Docker镜像docker search ubuntu,或者你想要的任何一个版本号的linux:

~$ docker search ubuntuNAME                               DESCRIPTION                                     STARS   OFFICIAL   AUTOMATEDubuntu                             Ubuntu is a Debian-based Linux operating s...   6636                [OK]dorowu/ubuntu-desktop-lxde-vnc     Ubuntu with openssh-server and NoVNC            131                 [OK]rastasheep/ubuntu-sshd             Dockerized SSH service, built on top of of...   105                 [OK]ansible/ubuntu14.04-ansible        Ubuntu 14.04 LTS with ansible                   86                  [OK]ubuntu-upstart                     Upstart is an event-based replacement for ...   80                  [OK]neurodebian                        NeuroDebian provides neuroscience research...   40                  [OK]ubuntu-debootstrap                 debootstrap --variant=minbase --components...   31                  [OK]

拉取官方最新版的ubuntu镜像:docker pull ubuntu:latest,其中的latest是一个标签(tag),表示是当前最新版本。你应该得到的信息,类似这样的

~$ docker pull ubuntu:latestTrying to pull repository docker.io/library/ubuntu ...latest: Pulling from docker.io/library/ubuntuaed158d74952: Pull complete773ae8273d14: Pull completed1d487w88782: Pull completecd3d6cd6c0cf: Pull complete8d73bu79120c: Pull completeDigest: sha256:35bc48a1ca97c3f74rhf378hj92hd82j29i4hf4hf84nf0dhnsid232de8d8Status: Downloaded newer image for docker.io/ubuntu:latest

你输入的命令实际上相当于

docker pull registry.hub.docker.com/ubuntu:latest

命令,即从注册服务器registry.hub.docker.com中的名为ubuntu的仓库中下载标签为latest的镜像。

由于我的lab统一要求,ubuntu需要14.04版本,所以我在hub里面搜了搜,找到了一个用户分享的14.04 64位纯净镜像(base image),下面将他的镜像扒下来

~$ docker pull chug/ubuntu14.04x64
这个用户还有很多其他版本的ubuntu系统,12 13 14的32位64位都有,全是纯净镜像。

查看你本地的镜像仓库!

把初始镜像拉下来后,就可以启动它了,不过,可以先使用docker images命令查看你自己的本地镜像,我随便找了个例子,你的也应该是类似这样的:

~$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.io/ubuntu    16.04               e4415b714b62        11 days ago         128.1 MBdocker.io/ubuntu    latest              e4415b714b62        11 days ago         128.1 MBdocker.io/ubuntu    12.04               aefa163f7a7e        11 days ago         103.5 MBdocker.io/centos    latest              0584b3d2cf6d        3 weeks ago         196.5 MB

在列出信息中,可以看到几个字段信息:

  • 来自于哪个仓库,比如 ubuntu

  • 镜像的标记,比如 16.04

  • 它的 ID 号(唯一),比如e4415b714b62

  • 创建时间

  • 镜像大小

其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:16.04 和 ubuntu:latest具有相同的镜像 ID ,说明它们实际上是同一镜像。TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如10.04 、 12.04 、 12.10 、 13.04 、 14.04 等。例如可以使用docker run -t -i ubuntu:16.04 /bin/bash命令指定使用镜像ubuntu:16.04来启动一个容器。如果不指定具体的标记,则默认使用latest标记信息。

启动镜像并且安装软件

比如:

现在你已经有一个初始的镜像了,注意这个里面是什么都没有的,连vim都没装,是精简到不能再精简的镜像了。

1.首先启动它:

~$ docker run -it chug/ubuntu14.04x64 /bin/bashroot@aa97ba3292ce:/#

-it 表示运行在交互模式,是-i -t的缩写,也可以两个连在一起写-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)一般这个模式就是可以启动bash,然后和容器有命令行的交互

可以看到我们终端的字头变成root@aa97ba3292ce:/#了,这就意味着我们的镜像已经创建了一个容器实例。现在我们可以对这个“ubuntu系统”进行操作了

比如安装vim:

root@aa97ba3292ce:/# apt-get install vimReading package lists... DoneBuilding dependency tree... DoneThe following extra packages will be installed:  file libexpat1 libffi6 libgpm2 libmagic1 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support vim-common vim-runtimeSuggested packages:  gpm ctags vim-doc vim-scriptsThe following NEW packages will be installed:  file libexpat1 libffi6 libgpm2 libmagic1 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support vim vim-common vim-runtime0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.Need to get 10.7 MB of archives.After this operation, 50.7 MB of additional disk space will be used.Do you want to continue? [Y/n]

看到我没有用sudo,是因为本来就已经是超级用户(root)状态了,可以看#代表超级用户$代表普通用户这个是Linux的基础知识不要忘了。

同理也可以更具自己的需求安装更多的软件。

想退出容器?很简单!

如果使用exit,命令退出,则容器的状态处于Exit,而不是后台运行。

如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p或者 ctrl+q 退出。此时容器的状态为Up。

查看当前正在运行的容器:

~$ docker psCONTAINER ID     IMAGE        COMMAND      CREATED       STATUS       PORTS        NAMESaa97ba3292ce  chug/ubuntu14.04x64   "/bin/bash"    7 minutes ago  Up 7 minutes   relaxed_hoover

这里我们可以看到当前有一个ID为aa97ba3292ce的容器

那麽如何控制它呢?

启动、停止、重启容器aa97ba3292ce的命令分别是:

~$ docker start aa97ba3292ce~$ docker stop aa97ba3292ce~$ docker restart aa97ba3292ce

后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

~$ docker attach aa97ba3292ce

软件装完,想保存环境?commit帮你!你这会是不是想起了git?commit -m“”?没错类似。

将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看

root@aa97ba3292ce:/#exit //先退出容器~$ docker commit -m "ubuntu with vim" -a "sgy" aa97ba3292ce sgy/ubuntu:vim~$ docker imagesREPOSITORY                    TAG    IMAGE ID         CREATED             SIZEsgy/ubuntu                    vim    52166e4475ed     5 seconds ago       358.1 MBchug/ubuntu14.04x64           latest 0584b3d2cf6d     9 days ago

其中,-m指定说明信息;-a指定用户信息;aa97ba3292ce代表容器的id;sgy/ubuntu:vim指定目标镜像的用户名、仓库名和 tag 信息。我这里都是为了瞎编的用户名,我自己的用户名也不是sgy。

你运行命令的时候使用自己注册Docker时的用户名。

此时Docker中就有了我们新建的镜像sgy/ubuntu:vim,此镜像和原有的ubuntu镜像区别在于多了个vim工具。此时我们利用新镜像创建的容器,本身就自带vim了。

启动新创建的镜像,可以看到vim已经自带了。

~$ docker run -it sgy/ubuntu:vim /bin/bashroot@520afc596c51:/# vim --versionVIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr  4 2017 18:14:54)

利用exit退出容器。此时Docker引擎中就有了两个容器,可使用docker ps -a查看。

如果你想要删除镜像?

如果想删除容器或者镜像,可以使用rm命令。

注意:删除镜像前必须先删除以此镜像为基础的容器(哪怕是已经停止的容器),否则无法删除该镜像,会报错Failed to remove image (e4415b714b62): Error response from daemon: conflict: unable to delete e4415b714b62 (cannot be forced) - image has dependent child images类似这种。

~$ docker rm container_id~$ docker rmi image_id

你要选择删除镜像的ID

有的时候尽管删除了全部容器,镜像还是无法删除,这时点击mac顶栏中的docker logo,选择restart,然后再试一次rmi,应该就没问题了。

docker命令图

9523c37271b88d2154716fb6de2580f8.png官网流传一次配置到处使用,这个就相当于我们做系统,首先我们下载一个正版系统然后在里面安装上我们需要的程序,然后再把它刻录成iso文件放在u盘上面,等电脑坏了再插上u盘做系统。

如何到处使用呢?“那我们把镜像放在U盘(docker库)上面”,那就push到hub上吧!

因为之前已经在Docker.app中登陆了Docker账号,所以现在直接

~$ docker push sgy/ubuntu:vim

就可以了!

下次到了机房,在ubuntu系统中安装Docker,配置好加速器,启动Docker,docker login登陆自己的账号,然后直接~$ docker pull sgy/ubuntu:vim就可以把你push到hub的已经配置好的环境的镜像给扒下来。做完实验,再push上去就ok了!

方便大家记忆我这里举个例子docker就相当于给电脑做系统

下载系统-》装应用软件-》做成镜像文件-》上传到U盘-》需要的话随时下载重装系统                                  

最后

Docker目前来说是一个软件工程师必备的基础技术,现在参加一些编程大赛都是要求参赛选手把自己的配置打包成一个docker文件与作品一起提交,保证作品的可运行,那麽在企业开发过程中我们也尝试用docker k8s进行企业项目的部署应用,作为扩展内容的话还是希望大家了解完docker再了解下docker k8s,因为我所在的不论是电网,易车等上市公司世界20强企业都是使用docker k8s进行部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python基础入门系列】第08天:Python List

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 LIST 列表 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates [liuwang, xuezhang, al…

【Python基础入门系列】第09天:Python tuple

Python 中的数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字、字符、甚至可以是其他数据结构 在 Python 中,最基本的数据结构是序列(在前面文章我们也说过序列),序列中的每个元素都有一个序…

elementui table某一列是否显示_Vue项目引进ElementUI组件的方法

环境要求NodejsNodejs官网下载地址:http://nodejs.cn/download/具体安装参考其他资料打开cmd命令行,输入npm -v,如果出现如下图的显示,说明已经安装正确。如果安装版本比较老,想升级新版本npm install npm -g安装 webp…

集成电路版图与工艺课程设计之用CMOS实现Y=AB+C电路与版图

1 绪论 1.1 设计背景 集成电路设计(Integrated circuit design, IC design),亦可称之为超大规模集成电路设计(VLSI design),是指以集成电路、超大规模集成电路为目标的设计流程。集成电路设计涉及对电子器…

硬盘显示容量和实际容量不符合_买移动固态硬盘纠结大半天?花2分钟看完这篇,购买时不再被坑...

如今移动硬盘已成为很多办公用户标配的物品,纵观整个移动硬盘市场,主要有移动机械硬盘和移动固态硬盘两种类型,前者容量大,价格较亲民;而后者具备了轻薄、读写速度快、耐振动不怕摔等优点。不少追求高效率的用户&#…

【Python基础入门系列】第10天:Python 类与对象

首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解。 由于你可能没有编程经验, 所以无法从学过的编程…

数字电子技术课程设计之基于触发器的三位二进制同步减法计数器无效态000/110

基于触发器的三位二进制同步减法计数器无效态000/110 1 课程设计的目的与作用 掌握用multisim 的电路仿真程序 熟悉同步计数器工作原理和逻辑功能 熟悉计数器电路的分析和设计方法 掌握161 芯片集联成任意进制同步加法计数器 2 设计任务 三位二进制减法计数器(无…

【Python的黑魔法】实例方法、静态方法和类方法

class Bird:# classmethod修饰的方法是类方法classmethoddef fly (cls):print(类方法fly: ,cls)# staticmethod修饰的方法是静态方法# staticmethoddef info (p):print(静态方法info: , p)if __name__ __main__:# 调用类方法,Bird类会自动绑定到第一个参数Bird.fl…

基于dreamweaver软件设计和开发一网站_基于 abp vNext 和 .NET Core 开发博客项目 Blazor 实战系列(一)...

系列文章使用 abp cli 搭建项目给项目瘦身,让它跑起来完善与美化,Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API,包装返回模型再说Swagger,分组、描述、小绿锁接入GitHub,用JWT保护你的API异常处理和…

LINUX 内存使用情况

# free 显示结果如下: Mem:表示物理内存统计 total 内存总数 8057964KBused 已使用的内存 7852484KBfree 空闲的内存数 205480KBshared 当前已经废弃不用,总是0buffers Buffer 缓存内存数: 290432KBcached Page 缓存内存数:5735024KB(存在关…

vagrant系列教程(四):vagrant搭建redis与redis的监控程序redis-stat(转)

阅读目录 下载redis解压redis编译安装redis配置redisredis开机自启动系统参数的调整上一篇php7环境的搭建 真是火爆,仅仅两天时间,就破了我之前swagger系列的一片文章,看来,大家对搭建环境真是情有独钟。 为了访问量,我…

【技术分享】Ubuntu下使用微信教程

做后端开发的同学用的Linux(ubuntu),肯定会因为没有适配微信版本会感觉不太舒服,很多时候因为缺少一些办公通讯软件而感到不便。现在已经有很方便的Wine WeChat方案,但是微信在Wine上配置还有许多bug,今天在github上看…

python join函数_Python join()函数

原博文 2016-08-12 10:16 − 今天写python 100例时,有个题目是大致是这样的:已知输入形式是1321,要求输出形式为1123 一开始思路是将输入的字符串用split()函数划分成数组,在对数组进行排序,再用for循环输出 代码附上&…

CSS中的盒子

盒子 盒子模型解释元素在页面中显示成一个方块,类似一个盒子,CSS盒子模型就是使用现实中盒子来做比喻,帮助我们设置元素对应的样式。盒子模型示意图如下: 把元素叫做盒子,设置对应的样式分别为:盒子的边框…

Djang重新整理migrations,解决:Django Table xxx already exist

在开发过程中,由于需求变更或者自我重构,需要清理migrations,以保持代码整洁和后续的可维护性。 场景一 不考虑数据库数据表,可以完全清空数据库里面的表的数据。 步骤: 删除所有migrations find . -path "/migr…

安全随笔2:对称加密应用场景

MD5或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法。 首先,简单介绍下这两类算法。图9-1是对称算法的示意图: 图9-1 对称算法 在对称算法中,首先需要发送方和接收方协定一个密钥…

python安装多久_python安装与使用

1、进入官网下载python软件 python-3.4.4.amd64.msi http://www.python.org/download/ 这个软件包含三个环境,如下图:2、双击安装软件 3、设置环境变量path";C:\Python34"; 4、验证是否安装成功 进入cmd中,输入python,如果出现如下…

CSS中的块元素,内联元素,内联块元素

块元素,内联元素,内联块元素 元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。 块元素块元素,也可以称为行元素,布局中常用的标签如&…

django 与 vue 的完美结合

最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vue。看了vue的一些文档,还有一些项目,先说一下django…

东芝确定半导体重组计划:保留闪存其他全卖

会计丑闻给日本东芝公司的业绩带来严重影响,为了提高盈利,东芝正在对旗下的半导体、个人电脑、白色家电等业务进行一次重大重组。据日经新闻1月23日报道,东芝已经正式制定了芯片业务重组的详细计划,除了占据优势的闪存芯片之外&am…