初次使用Docker的体验笔记总结_docker

一、前言

Docker容器已经发布许久,但作为一名程序员如今才开始接触,实在是罪过……

在此之前,我还没有对Docker进行过深入的了解,对它的认识仍停留在:这是一种新型的虚拟机。这样的层面。今天就我的初次体验进行记录。声明一点:以下内容大部分是主观片面的,另有来自百度的(嗯,就是百度)。要是有什么说的不对,或者是理解有问题的地方,还请大家告诉我,先谢谢大家了。

二、环境

我的基础运行环境是运行在Win10专业版HyperV虚拟机中的CentOS7-Minimal版本。新装的虚拟机,保证运行环境不受奇奇怪怪的东西影响。

CentOS安装Docker简洁明快:sudo yum install docker -y。等着就行……安装内容如下:

三、启动Docker服务

与安装一样简洁明快:sudo systemctl start docker。如果没有报错,那就是启动完成了。(我喜欢用systemctl,反正只要能启动服务,你想咋启动就咋启动。)命令没有回显,我就不截图了。

、获取容器镜像

Docker提供镜像搜索命令(search),方便你快速找到自己想要的镜像。当然,镜像的源你可以自己配置,默认是docker.io。我只打算找一个CentOS的镜像,所以默认的源就行。搜索命令如下:

可以看到,搜索到好多镜像。最后两列字面意思我没理解,但是应该是标记官方镜像和开发者上传的镜像。我选择第一个,标记着“官方的”,应该没有装任何其他的东西。

嗯,接下来就是下载(pull)镜像了。命令如下(渣渣网速):

可以看到,默认下载的是最新的(latest)。当然,你可以下载其他非最新的版本,具体操作请查询pull命令的相关参数。我只要最新的(傲娇脸)。这个镜像大小也是6 。这么小,估计真的是什么都没装吧(还是压缩了?)……

上面是下载完成后显示的信息。

五、创建容器

接下来就是从刚下载的镜像创建一个容器了。新的容器的所有内容都会从镜像里拷贝(那个改是拷贝吧)。

声明:由于输入sudo太麻烦,所以下面的演示都用root用户执行。

创建容器(run)命令就比较复杂了,参数较多:

如上,我来一个一个解释:

  • -itd:这是 -i -t -d 的简写。-i 表示保持打开标准输入流(stdin),无论是否连接到此容器。-t 为容器分配一个虚拟的tty。-d 表示后台模式运行容器,即容器启动后将断开与当前终端的连接。(之后会演示怎么再连回来)。
  • --name:这是为容器起一个名字,之后与容器的交互需要用到,当然用容器的Id也是可以的(就是run命令后那个巨长的回显)。当然,不写的话也会有默认的名字。
  • -v:表示挂载宿主机(这个称呼对吗?)目录到容器的目录(宿主机目录路径:容器目录路径)。当然可以设置读写属性,这个就不说了,可以自行探索。
  • -p:表示映射(端口转发?)主机端口至容器端口(主机端口:容器端口)。这个参数可以重复出现,映射多个端口。这个参数也有许多情况,也请自行探索。
  • centos:这个是本地镜像名称(centos),必须是已经下载(pull)到本地的镜像。当然,若是本地没有,Docker会执行search并询问你是不是要下载。
  • /bin/bash:这个是本次启动的镜像要执行的任务。这个门道比较多,我在后面会说一下。
  • 此处省略了-a参数。-a参数可以指定连接准输入流(STDIN)、标准输出流(STDOUT)和标准错误流(STDERR),默认好像是都连接。可以显式使用,以连接指定的流。

以上就是命令的相关解释,是我自己配合百度理解的,要是有不对的,请大家留言哦。

六、查看容器

使用docker ps -a 命令可以查看当前存在的所有容器:

如上,我只运行了一个容器。命令显示了容器的ID、使用的镜像、运行的命令、创建时间、运行时间、端口映射、名称。

七、连接容器

连接容器有多种办法。在宿主机中使用Docker的attach命令,即可连接到容器:

如上,就已经连接到容器了。可以看到命令行信息的变化。

我使用了ps命令查看了容器中的进程。可以看到一个ID为1的进程,这个进程就是run命令最后的那个参数。Run命令所指定的任务进程Id一定是1 。我们使用attach命令连接的也是这个命令的标准输入输出流(错误流我不知道连接了没)。由于run指定的命令是bash,所以attach也是连接到了bash,这样就能随意操作容器了。

关闭连接很容易想到,就是退出bash:exit。

但是、但是、但是,这样退出会导致一个问题,那时就是:容器因为1号进程的退出(就是attach命令连接的bash),会认为任务已完成,容器就停止了。

如上,容器已经停止了(Exited)。

所以,我建议使用exec命令对容器进行操作。我们重启容器:

可以看到,start 加容器名称就能启动。

使用exec命令,可以让容器直接执行命令(docker exec 容器名称 命令):

如上,是我用exec对nethost执行ps命令查看进程,执行ls命令列出根目录。

也可以用exec执行bash并挂载输入输出流:

如上,是我用exec命令启动bash并挂载输入输出流。-it参数的意义和run命令相同,不同的是没有使用-d命令,这样(前台模式)可以使命令执行后直接连接输入输出流。我执行了ls命令和ps命令。

从ps命令的显示可以看出,exec命令启动了一个新的bash,PID为24(当然,PID应该是随机赋值的)。区别于PID为1的bash,我们当前连接的就是这个PID为24的bash,一样可以执行命令,随意操作。并且退出之后,也不会影响PID为1的bash,这样就可以使容器继续运行。

上图可见,我退出了容器的bash后,容器依然在运行。我在宿主机中使用exec执行ps命令后,nethost这个容器中1号进程仍然在运行。

八、停止和删除容器

上面提到了启动容器(start)命令,停止容器当然是停止命令(stop)了。

stop命令执行效果如上。

删除容器更容易,使用rm命令:

如上,我删除了名为nethost的容器,因为只有一个容器,所以删除之后九没有容器了。要注意的是:rm命令只能删除已经停止的容器。并且rm命令不像linux的rm命令那样会有删除确认,docker的rm命令会直接删除容器,所以用的时候要小心。

十、其他

其他的内容,如:备份、迁移、上传镜像等,我还没有试过,暂时不进行记录。

时间: 2024-09-16 00:12:25

初次使用Docker的体验笔记总结_docker的相关文章

《TERA》魔法师试玩体验笔记与空中巨型生物

本网(编译/东方异国)在下面视频中将看到可爱地袍袍利法师在非PK的高级别区域"比亚 奥雷文"的40级初期野外"被遗忘的巨人之城"进行试玩体验. 强烈的火焰将一群怪物直接丧命,在视频中可以发现被光环法术击中后生还接近玩家的怪 玩家用结冰大地(对全方位 敌人造成伤害并减少70%移动速度)和 后退技能可以再拉远距离. [论坛原帖]TERA魔法师试玩体验笔记与空中巨型生物 魔法师体验笔记与 任务界面 ▲详细的任务日志界面 让任务更轻松的完成. TERA的大部分任务进行是通过

Hexo 升级与 Docker 初体验

背景 之前我一直使用 Hexo 2.8 来编译我的博客.几个星期前的一天,我突发奇想要给 Hexo 来个升级,于是接下来的折腾就开始了. 执行了 npm install hexo-cli -g 之后,一切都还好,当我试着执行hexo server 启动服务器的时候,悲剧发生了,没法启动.一番 Google 之后发现从 2.8 升级到 3.0 似乎没那么平滑,于是我决定降回 2.8,然后另选时间升级. 降级之路也不平坦,即使我显式给出了降级之后各个组件的版本,整个依赖树也回不到从前了.可能这个也是

什么是docker Docker入门教程第一篇_docker

Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Docker的特点.特性.原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生态和Dockerfile,并使用Dockerfile构建一个nginx环境. 缘起 在几个月前听说Docker,但是一直没有时间去研究,前一段时间趁着azure免费试用,赶紧实验一下,但是卡在了ubuntu基础镜像的下载上(由于国内网络的特殊原因),所以也就搁浅了,这里把经验和体会分享一下. Doc

DockerCon2017前瞻 - Docker企业版体验

DockerCon 2017将于四月17号在美国Austin召开.在去年DockerCon上,Docker公司一系列的发布吹响了进军企业市场的号角.今天,容器技术已经愈发成熟,被越来越多的企业所关注和应用.不出意外的话,今年DockerCon的重头戏还是会在企业市场,今年将会有越来越多的传统企业采用容器技术和越来越多的核心应用运行在容器中. 今年3月份,Docker公司宣布Docker企业版(Enterprise Edition, EE),并将开源版本重命名为Docker社区版(Communit

3分钟用Docker搭建一个Minecraft服务器_docker

1 写在前面的话 作为一名资深游戏玩家,初次接触Minecraft(我的世界)时我是拒绝的,但玩了一段时间之后便欲罢不能.Minecraft(以下简称MC)作为一款沙盒类游戏,具有极高的自由度,想玩什么完全取决于你.你可以进行传统的荒野求生,打怪升级,可以建造各种风格的建筑,可以成为红石达人,实现各种自动化等等.这是一款最典型的"别人的游戏",有大神在游戏里造了一个32位的计算机你能信?别人的世界,哦不,是我的世界就先介绍到这里. 言归正传,前段时间用网易蜂巢的容器搭了一个Minecr

OVM虚拟化开启公测,支持Docker全新体验!

摘要: 正逢暑夏,OVM虚拟化管理平台再次给您带来了一次全新的超感体验. 此次,针对公测版OVM, 团队成员对此进行了全面升级,即隆重推出公测版OVM-1.1.1.160718_RC版本,欢迎大家一起体验Iaas"新国货"OVM公测版! OVM免费虚拟化管理平台,作为完全免费.公益的一款产品,不仅拥有商业软件同样的稳定性.易用性.高性能,而且还拥有开源软件一样的开放性.可扩展性.是介于商业版和开源版软件之间的第三种选择,刷新了国内Iaas领域没有免费产品的空白. 从内测推出开始至今,仅

Linux下Docker安装和使用教程_docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器. 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack集群和其他的基础应用平台. Docker的源代码全部是用Go语言写的. 一.基础环境 1.角色.ip.版本.内核 serverA 10.1.10.236 3.16.0-4-amd64 8.1 docket docket 1.6.2 二.安装docter 1.添加源 echo "d

简单谈谈Docker镜像的使用方法_docker

在上篇文章(在Docker中搭建Nginx服务器)中,我们已经介绍了如何快速地搭建一个实用的Nginx服务器.这次我们将围绕Docker镜像(Docker Image),介绍其使用方法.包括三部分: 从Docker Hub或者其他镜像源安装Docker镜像 从Image file安装Docker镜像 从Docker file制作Docker镜像 查找Docker镜像 安装Docker镜像的第一步,是查找你需要的Docker镜像列表,键入: docker search mysql 如果出现权限问题

Docker安装和基础用法 Docker入门教程第二篇_docker

本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. 安装 1.1 在 Ubuntu 14.04 上安装 Docker 前提要求: 内核版本必须是3.10或者以上 依次执行下面的步骤: sudo apt-get update sudo apt