Docker 入门及安装[Docker 系列-1]


镜像就像是一个安装程序,而容器则是程序运行时的一个状态。

查看容器

查看容器

启动 docker 后,使用 docker ps 命令可以查看当前正在运行的容器:

查看所有容器

上面这条命令是查看当前正在运行的容器,如果需要查看所有容器,则可以通过 docker ps-a 命令查看:

在查看容器时,涉及到几个查看参数,含义分别如下:

  • CONTAINER ID:CONTAINER ID是指容器的id,是一个唯一标识符,这是一个64位的十六进制整数,在不会混淆的情况下可以只采用id的前几位进行标识一个容器。

  • IMAGE:IMAGE表示创建容器时使用的镜像。

  • COMMAND:COMMAND表示容器最后运行的命令。

  • CREATED:创建容器的时间。

  • STATUS:容器的状态,这里可能显示一个容器启动时间,也能显示容器关闭时间。具体显示哪个要看容器当前的状态。

  • PORTS:容器对外开放的端口。

  • NAMES:容器的名字,如果不设置,会有一个默认的名字。

查看最新创建的容器

使用 docker ps-l 可以查看最近创建的容器,如下:

查看最新创建的n个容器

可以使用 docker ps-n=XXX 来查看最新创建的n个容器,如下:

创建容器

创建容器整体上来说有两种不同的方式,可以先创建,再启动,也可以连创建带启动一步到位,无论是那种方式,流程都是相似的,当执行一个创建命令之后,docker 首先会去本地路径下查找是否有相应的镜像,如果没有,就去 docker hub 上搜索,如果搜索到了,则下载下来,然后利用该镜像创建一个容器并启动。容器的文件系统是在只读的镜像文件上添加一层可读写的文件层,这样可以使在不改变镜像的情况下,只记录改变的数据。下面对这两种方式分别予以介绍。

容器创建

开发者可以首先使用 docker create 命令创建一个容器,这个时候创建出来的容器是处于停止状态,没有运行,例如要创建一个 nginx 容器,创建命令如下:

  1. docker create nginx

创建成功后,可以查看容器是否创建成功:

此时创建的容器并未运行,处于停止状态,容器的 name 是随机生成的,开发者也可以在创建容器时指定 name ,如下:

  1. docker create --name=nginx nginx

运行结果如下:

此时的 name 属性就不是随机生成的,而是用户指定的 name。

这种方式只是单纯的创建了一个用户,并未启动。

容器创建+启动

如果开发者需要既创建又启动容器,则可以使用 docker run 命令。 docker run 命令又可以启动两种不同模式的容器:后台型容器和交互型容器,顾名思义,后台型容器就是一个在后台运行的容器,默默的在后台执行计算就行了,不需要和开发者进行交互,而交互型容器则需要接收开发者的输入进行处理给出反馈。对于开发者而言,大部分情况下创建的都是后台型容器,不过在很多时候,即使是后台型容器也不可避免的需要进行交互,下面分别来看。

后台型容器

后台型容器以 nginx 为例,一般 nginx 在后台运行即可:

  1. docker run --name nginx1 -d -p 8080:80 nginx

--name 含义和上文一样,表示创建的容器的名字,-d 表示容器在后台运行,-p 表示将容器的 80 端口映射到宿主机的 8080 端口,创建过程如下图:

首先依然会去本地检查,本地没有相应的容器,则会去 Docker Hub 上查找,查找到了下载并运行,并且生成了一个容器 id。运行成功后,在浏览器中输入 http://localhost:8080 就能看到 Nginx 的默认页面了,如下:

这是一个后台型容器的基本创建方式。

交互型容器

也可以创建交互型容器,例如创建一个 ubuntu 容器,开发者可能需要在 ubuntu 上面输入命令执行相关操作,交互型容器创建方式如下:

  1. docker run --name ubuntu -it ubuntu /bin/bash

参数含义都和上文一致,除了 -it,-it 参数,i 表示开发容器的标准输入(STDIN),t 则表示告诉 docker,为容器创建一个命令行终端。执行结果如下:

该命令执行完后,会打开一个输入终端,读者就可以在这个终端里愉快的操作 ubuntu 了。

想要退出该终端,只需要输入 exit 命令即可。

容器启动

启动

如果开发者使用了 docker run 命令创建了容器,则创建完成后容器就已经启动了,如果使用了 docker create 命令创建了容器,则需要再执行 docker start 命令来启动容器,使用 docker start 命令结合容器 id 或者容器 name 可以启动一个容器,如下:

docker start 启动的是一个已经存在的容器,要使用该命令启动一个容器,必须要先知道容器的 id 或者 name ,开发者可以通过这两个属性启动一个容器(案例中,nginx 是通过 name 启动,而 ubuntu 则是通过 id 启动)。一般来说,第一次可以使用 docker run 启动一个容器,以后直接使用 docker start 即可。

重启

容器在运行过程中,会不可避免的出问题,出了问题时,需要能够自动重启,在容器启动时使用 --restart 参数可以实现这一需求。根据 docker 官网的解释,docker 的重启策略可以分为 4 种,如下:

四种的含义分别如下:

  1. no表示不自动重启容器,默认即此。

  2. on:failure:[max-retries]表示在退出状态为非0时才会重启(非正常退出),有一个可选择参数:最大重启次数,可以设置最大重启次数,重启次数达到上限后就会放弃重启。

  3. always表示始终重启容器,当docker守护进程启动时,也会无论容器当时的状态为何,都会尝试重启容器。

  4. ubless-stopped表示始终重启容器,但是当docker守护进程启动时,如果容器已经停止运行,则不会去重启它。

容器停止

通过 docker stop 命令可以终止一个容器,如下:

可以通过 name 或者 id 终止一个容器。

容器删除

单个删除

容器停止后还依然存在,如果需要,还可以通过 docker start 命令再次重启一个容器,如果不需要一个容器,则可以通过 docker rm 命令删除一个容器。删除容器时,只能删除已经停止运行的容器,不能删除正在运行的容器。如下:

可以通过 name 或者 id 删除一个容器。如果非要删除一个正在运行的容器,可以通过 -f 参数实现,如下:

批量删除

容器也可以批量删除,命令如下:

  1. docker rm $(docker ps -a -q)

docker ps-a-q 会列出所有容器的 id ,供 rm 命令删除。

如下命令也支持删除已退出的孤立的容器:

  1. docker container prune

总结

本文主要向大家介绍了 Docker 容器的基本操作,更多高级操作我们将在下篇文章中介绍。

参考资料:

[1] 曾金龙,肖新华,刘清.Docker开发实践[M].北京:人民邮电出版社,

Java 极客技术公众号,是由一群热爱 Java 开发的技术人组建成立,专注分享原创、高质量的 Java 文章。如果您觉得我们的文章还不错,请帮忙赞赏、在看、转发支持,鼓励我们分享出更好的文章。

关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料。

Docker 容器基本操作[Docker 系列-2]的更多相关文章

  1. docker探索-docker容器基本操作(五)

    1.创建一个容器并启动 1.1.docker hello word Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world ...

  2. 进入正在运行的 docker 容器(docker container)

    在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ➜ compose docker exec --help Usage: ...

  3. Docker容器技术-Docker架构

    一.Docker系统架构 1.Docker基础架构 1)Docker守护进程 负责容器的创建.运行和监控,以及镜像的构建和存储. docker daemon 2)Docker客户端 通过HTTP与Do ...

  4. docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用

    一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...

  5. Docker容器管理——Docker容器常用命令

    1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...

  6. Docker 容器高级操作[Docker 系列-3]

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...

  7. 菜鸟系列docker——docker容器(7)

    docker 容器 1. docker 守护进程daemon Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作,Doc ...

  8. Docker这么火爆。章节一:带你详尽了解Docker容器的介绍及使用

    前言 很多小伙伴可能在工作中都听说过Docker,但是实际工作中却没有使用过,听得多了,也对Docker内心有一种很深切的想了解,但是因为各种原因而不知道如何去了解而发愁,不要急,这篇文章带你认识Do ...

  9. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

随机推荐

  1. vue.js实现单选框、复选框和下拉框

    Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下边以单选框.复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式. 一.单选框   在传统的HTM ...

  2. .NET Core IdentityServer4实战 第Ⅳ章-集成密码登陆模式

    回顾下ClientCredentials模式,在ReSourceApi中定义了我们公开服务,第三方网站想要去访问ReSourceApi则需要在身份验证服务中获取toekn,根据token的内容,硬编码 ...

  3. Sqoop 的基本使用

    目录 一.Sqoop 基本命令 1. 查看所有命令 2. 查看某条命令的具体使用方法 二.Sqoop 与 MySQL 1. 查询MySQL所有数据库 2. 查询指定数据库中所有数据表 三.Sqoop ...

  4. mysql远程连接设置

    mysql远程连接设置只需要把mysql数据库的user表中的localhost改成%就可以远程连接了. 值得提醒的是:开发阶段可以打开,生产的时候尽量关闭,因为本人就遇到别人通过这个把我数据库给删的 ...

  5. Qt实现炫酷启动图-动态进度条

    目录 一.简述 二.动效进度条 1.光效进度条 2.延迟到达进度条 3.接口说明 三.启动图 1.实现思路 2.背景图切换 四.测试 1.构造启动图 2.背景图 3.其他信息 4.事件循环 五.源码 ...

  6. Xilinx ISE如何调用Modelsim进行联合仿真

    图: 在对设计的芯片进行测试时,经常要用到FPGA,可是里面的仿真工具却不如Modelsim那么好用,且在规模比较大时,ISE在仿真时,软件经常会报告内存限制的问题,此时一般会切换到Modelsim软 ...

  7. 关于Keepalive的那些事

    服务端很多同学包括自己对keepalive理解不清晰,经常搞不清楚,TCP也有keepalive,HTTP也有keepalive,高可用也叫keepalive,经常混淆这几个概念.做下这几个概念的简述 ...

  8. 【Aizu - 0121】Seven Puzzle (反向bfs)

    -->Seven Puzzle 原文是日语 这里就直接写中文了  Descriptions: 7拼图由8个正方形的卡和这些卡片完全收纳的框构成.每张卡都编号为0, 1, 2, …, 7,以便相互 ...

  9. ASP.NET Core Web Api之JWT(一)

    前言 最近沉寂了一段,主要是上半年相当于休息和调整了一段时间,接下来我将开始陆续学习一些新的技术,比如Docker.Jenkins等,都会以生活实例从零开始讲解起,到时一并和大家分享和交流.接下来几节 ...

  10. C# 使用Quartz简单实例以及备忘

    一.导入NuGet  二.创建一个类并实现接口Ijob,并实现该接口中的方法. using Buday.Gold.Cusumer.Lib; using Quartz; using System; us ...