Docker的基本操作

本文将介绍CentOS 7下Docker的基本操作,关于Docker的安装请参见CentOS 7安装Docker

Docker的基本概念

Docker包含了三个基本的概念将在本文中出现:镜像、容器、仓库。

  • 镜像(Images)
  • 容器(Containers)
  • 仓库(Repositories)

镜像

只读的模板,包含可以创建容器的指令,类比于面向对象中的类。镜像采用分层设计的方式,如下图所示,
在这里插入图片描述
上层的镜像依赖于下层的镜像,并且包含相关的配置。例如,图中为一个ubuntu15.04的镜像,你可以基于此镜像安装Apache Web服务,并进行相关配置,从而形成新的镜像。使用docker images命令可以列出本地的所有镜像。

容器

容器是镜像的一个运行实例,类比于面向对象中类的实例对象,如上图中最上层。你可以创建、运行、停止、移动和删除容器。容器的读写并不会写到镜像之中,并且Docker可以很好的隔离多个运行的容器。使用docker ps -a命令可以列出本地所有的容器,包括非活跃的容器。

仓库

仓库是镜像集中存放的地方。你可以把镜像存放与本地,但若想要共享镜像,需要一种镜像分发服务,比如Docker Registry。比较有名的公共Registry服务如Docker官方的Docker Hub,本文后续将使用到。

Docker基本操作

Docker的命令使用

注意:Docker的操作需要用户获得root权限。

Docker命令的基本格式:

docker [选项] [命令] [参数]

查看docker所有的命令,键入:

docker

得到类似如下图所示的命令说明(图片不完全覆盖所有命令):
在这里插入图片描述
特定命令的使用帮助:

docker 特定命令 --help

查看当前系统docker的相关信息:

docker info

输出为(图片不完全覆盖所有信息):
在这里插入图片描述
可见当前并未安装任何镜像(Images),运行任何容器(Containers)。

加载Docker镜像

Docker镜像是容器运行的基础,默认情况下,将从Docker Hub拉取镜像。首先使用search命令查询Docker Hub中的可用镜像,这里以查询可用的CentOS镜像为例:

docker search centos

命令从Docker Hub拉取centos镜像的相关信息,并返回可用镜像的列表,输出结果类似于:
在这里插入图片描述
接下来拉取官方版本(OFFICIAL)的镜像:

docker pull centos

一旦镜像下载完成,可以基于该镜像运行容器,使用run命令:

docker run centos

查看一下当前系统中存在的镜像:

docker images

输出结果类似于:
在这里插入图片描述

运行Docker容器

以上述的CentOS镜像为例运行其容器,使用-it参数进入交互shell模式:

docker run -it centos

进行container内部shell,如下图所示:
在这里插入图片描述
其中00123e32a83c是容器的ID,后续要用到。你可以在此shell运行任何命令,比如安装Apache Web服务器:

yum install httpd

现在此容器已经安装了Apache Web服务器。注意:所有对于容器的更改只保存在当前运行的容器中,并未写入镜像。

创建新的镜像

在前序操作的基础上,本小节将创建新的镜像,即提交更改到新的镜像。首先从容器的交互shell退出并保存状态,使用exit命令

exit

我们首先使用如下命令查看本地中的容器:

docker ps -a

参数-a表示列出所有容器,包含活跃的和不活跃的。输出类似下图:
在这里插入图片描述
可以发现刚才运行的ID为00123e32a83c的容器也在列表之中。
现在使用commit命令来提交更改到新的镜像中,即创建新的镜像。命令格式

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例如:

docker commit -m “install apache server” -a “ll” 00123e32a83c centos:apache_web

这种提交类似于git协议的提交,同样这里提交的镜像只保存在本地。后续可以提交到远程镜像仓库,比如Docker Hub。
再次使用镜像查看命令:

docker images

可以看到新生成的镜像:
在这里插入图片描述
可以看到刚才创建的新镜像“centos:apache_web”,并且从大小(SIZE)来看(346MB),区别于我们原始从Docker Hub拉取的CentOS的官方镜像(202MB)。
接下来要为新建的镜像打上标签(Tag),否则后续推送镜像到Docker Hub的时候将出现“ denied: requested access to the resource is denied”的错误。关于这个错误的解答详见stackoverflow
Tag命令的语法:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

进一步细化到推送至Docker Hub的镜像,使用如下格式:

docker tag SOURCE_IMAGE[:TAG] docker-hub-username/REPOSITORY[:TAG]

其中hub-username是Docker Hub的用户账户,这里采用如下命令:

docker tag 3e46de335eeb docker-hub-username/centos:apache_web

docker-hub-username替换为Docker Hub的实际用户名。这里使用镜像ID来指代想要打标签的镜像。完成之后,同样查看已存在的镜像:

docker images

在这里插入图片描述

推送镜像到远程镜像仓库

可以把本地镜像推送到远程镜像仓库,最为著名的就是Docker官方的Docker Hub。当然比如阿里也提供容器仓库,同时也可以自己构建镜像仓库。这里以Docker Hub为例介绍如何实现镜像推送。首先要到Docker Hub上进行注册,然后这里我们使用shell登录:

docker login -u docker-hub-username

输入密码。用户名和密码都正确,随后会显示登录成功。
使用如下命令推送新创建的镜像:

docker push docker-hub-username/docker-image-name

对于本例为:

docker push docker-hub-username/centos:apache_web

docker-hub-username替换为实际的用户名,镜像名这里使用REPOSITORY:TAG的组合。这将花费一定的时间,完成之后登陆Docker Hub,查看Repository,可以看到新上传的镜像。

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值