写在前面

  • 这篇博客适合谁?

    • 对于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,找到这个按钮:

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就超级好理解了

实际操作下

查看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命令图

官网流传一次配置到处使用,这个就相当于我们做系统,首先我们下载一个正版系统然后在里面安装上我们需要的程序,然后再把它刻录成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进行部署。

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

  1. docker desktop ubuntu镜像_「Docker」 - 镜像仓库

    一.镜像仓库 将Docker镜像和Git进行对比,镜像仓库类似GitHub.GitLab等托管平台,Docker的镜像仓库托管的不是代码项目,而是镜像. Docker镜像仓库最大的作用是实现了Dock ...

  2. docker desktop ubuntu镜像_资深专家都知道的顶级 Docker 命令!

    开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化.Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法. 目前, ...

  3. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  4. 使用docker安装ubuntu镜像

    使用docker安装ubuntu镜像 查找Ubuntu镜像 docker search ubuntu 安装Ubuntu镜像 docker pull ubuntu 查看docker镜像 docker i ...

  5. Docker Desktop 如何运行第一个 Docker 项目

    Docker Desktop 安装后的界面是这样的. 你可能会有点困惑,如何运行第一个 Docker 项目. 其实上面的界面中已经告诉你运行的命令行工具了: docker run -d -p 80:8 ...

  6. docker使用ubuntu镜像图形化界面

    不想用vnc安装图形化界面,直接找了一个有图形化界面的ubuntu镜像 镜像地址: https://hub.docker.com/r/kasmweb/desktop/tags pull完镜像后生成容器 ...

  7. CentOS7服务器Docker构建ubuntu镜像出错invalid argument

    为什么80%的码农都做不了架构师?>>>    #1 发现问题 拿到某云主机时,选择了最新的CentOS 7.2的公共镜像,一些工作过后,开始布暑应用.因为没有使用docker仓库, ...

  8. 8s 使用本地打包镜像_在Docker环境构建、打包和运行Spring Boot应用

    为何考虑采用Docker? Docker是提供用户构建镜像的一种容器化技术,所构建的镜像包含了主要的应用程序和运行应用所需的所有依赖项.该镜像可在任何虚拟机或物理机器上的Docker容器上运行.它的强 ...

  9. docker安装ubuntu镜像

    在docker中安装Ubuntu. 1. 查找ubuntu镜像 docker search ubuntu 2. 安装 docker pull ubuntu 3. 查看镜像 docker images ...

最新文章

  1. GeoHash核心原理解析
  2. 所有你要知道的 BERT 模型压缩方法,都在这里!
  3. 网络推广外包——还记得网络推广外包中的site收录吗?
  4. 面试官:什么是HTTP连接池?你怎么回答?Feign性能调优之HTTP连接池
  5. 2021年度总结——做好事不留名·CSDN中的【雷锋】
  6. 标准化条件变量 -- condition_variable
  7. alibaba实习生代码大赛
  8. 增效工具_【危中寻机】降本增效生存之道 运用IE基础工具提升制造效率
  9. DNS(域名系统) 是什么
  10. if vue 跳出_vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
  11. mybatis的拦截器及分页机制
  12. 如何在 JavaScript 面试中过五关斩六将?
  13. Ubuntu系统---C++之Eclipse IDE 编译器安装
  14. PHPSTORM 中文版/汉化 即常用快捷键和配置
  15. mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解
  16. [Android]如何修改android模拟器的IMEI号
  17. 互联网日报 | 2月8日 星期一 | 乐视回应App图标“欠122亿”;中国联通成立联通数科;高德地图上线13万个旅游厕所信息...
  18. Spark独到见解--Action算子总结
  19. access如何求平均单价_数据库 – MS Access:单个查询中的平均值和总计算量
  20. 怎样用计算机xp命令修复软件,系统之家xp系统修复控制台命令使用方法

热门文章

  1. SpringMvc 注解 @InitBinder 表单多对象精准绑定接收
  2. Duplicate entry ‘XXX‘ for key
  3. [WARNING] The POM for XXX-system:jar:1.9.0-SNAPSHOT is missing, no dependency information available
  4. 修改Sql server中列的属性脚本
  5. kettle变量(param命名参数)
  6. python -m xxx.py和python xxx.py的区别
  7. 常用的方法论-NPS
  8. checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)
  9. ubuntu入门知识
  10. 关于angularjs input上传图片前获取图片的Size 浅析