Docker 新手入门:容器的使用

上一篇文章我给大家介绍了 Docker 以及如何安装,这篇文章我们就正式开始使用 Docker,先从容器的基本使用方法开始。

上一篇文章已经大致介绍过容器了,容器是由 Docker 镜像创建的,镜像是由 Dockerfile 文件生成的,Dockerfile 包含了这个镜像的信息、依赖项以及需要执行的操作,如果我们需要自定义镜像,可以自己编写 Dockerfile 文件,鉴于我们这是新手入门的教程,Dockerfile 文件的编写不在本教程范围里。

Docker 创建一个容器后,这个容器便是一个独立于其他容器和宿主系统的存在,容器内的所有正常操作,均不会影响到其他容器和宿主系统。不过由于和宿主系统共享 Linux 内核,所以在一些极端情况下,容器可能会影响到宿主系统。

容器的数据是保存在容器里面的,如果容器被删除,里面所有的数据也会消失,如何让容器的数据持久化,这个在以后的文章会讲到。

Docker 的强大之处在于它的生态环境,你几乎可以在 Docker 镜像仓库里找到任何你需要的镜像。比如想搭建个博客,没问题,你只需要创建一个基于 WordPress 或其他博客系统的镜像的容器就可以了,这个镜像会自动处理运行环境的依赖和配置,只需要一行命令,就可以做到开箱即用。

说了这么多,接下来教大家一些 Docker 容器的使用方法以及一些基础命令。

Docker 容器的使用

Docker 镜像

首先要知道如何找到需要的镜像,也很简单啦,只需要前往 Docker 镜像仓库 https://hub.docker.com 搜索就可以了,如果你的网络不是很好,无法访问,那。。。你可以加群问小山啊。

比如我想要一个 alpine 系统的镜像,这是一个非常精简的 Linux 发行版,下面的操作我会以这个镜像作为演示。

首先在镜像仓库搜索这个镜像,这类镜像都有官方提供的版本,会标注 Docker Official Images 的字样。

Docker Hub

你可以在镜像页面的右侧看到镜像的拉取命令,docker pull命令可以将镜像拉取到本地,当然,你也可以直接使用镜像创建容器,如果镜像不存在,Docker 会自动拉取。

直接运行拉取镜像命令会拉取默认的镜像,但是镜像一般会提供多个版本或历史版本,你可以点击拉取命令的下方的View Available Tags来查看该镜像的所有可用标签。

比如我想拉取 alpine 的 3.8 版本,只需要在镜像名称后面加上冒号和标签即可,例如:docker pull alpine:3.8

拉取后的镜像不会自动更新,如果你想更新镜像只需要重新拉取即可,重新拉取后,需要重新创建容器才能使用新的镜像,并且旧镜像不会删除。

要查看本地所有镜像,使用命令sudo docker images

结果会输出镜像的名称、标签、ID、创建时间以及大小

如果需要删除镜像,使用命令sudo docker rmi <name>:<tag>,如果镜像是默认的 tag,就不需要加 <tag>。

Docker 容器

说完如何管理镜像,下面我们来说说如何创建以及管理容器。

如果我们想创建并运行一个容器,很简单,只需要使用命令sudo docker run <name>:<tag>

默认创建的容器会随机生成一个名称,如果要制定容器的名称,可以使用–name参数,例如:sudo docker run --name mivm <name>:<tag>,创建一个名为 mivm 的容器。

如果你使用以上的命令来创建刚刚拉取的 alpine 镜像,会发现没有任何动静,我们好像并不能使用 alpine 系统。那是因为这个镜像默认没有任何操作,创建即结束,根本不能用。

如果我们想要使用系统镜像有两种方法

第一种方法是让容器执行命令,例如:sudo docker run --name mivm --rm alpine ls /usr/bin,这个命令的意思是创建一个名为 mivm 基于 alpine 镜像的容器,并且让容器执行命令ls /usr/bin--rm参数可以让容器在结束后立即删除

运行完上述命令可以看到ls /usr/bin的执行结果,也就是列出/usr/bin目录下的文件,但它列出的是容器里的文件,而不是宿主系统下的,也就是 alpine 镜像的文件。

第二种方法是使用交互式 Shell,例如:sudo docker run -i -t --name mivm --rm alpine /bin/sh,这个命令加了两个参数,-i用来打开交互式 Shell,-t尝试分配伪 TTY,而命令/bin/sh就是我们要使用的 Shell

运行完上述命令就可以进入到容器内部的 Shell,你可以执行任何命令,甚至是添加软件包,如果需要退出容器,输入exit即可。

上面说的运行容器的方法都是及时的,如果想让容器保留在后台,并且可以随时的进入容器操控,怎么做呢?

很简单,只需要更改一下命令,再加上几个新的命令,例如:sudo docker run -itd --name mivm --restart always alpine /bin/sh,这个命令删除了--rm参数,这样运行结束后就不会被删除,新增了-d参数表示这个容器在后台运行,--restart always可以让容器在宿主系统重启后自动重新运行,否则容器不会自动重新运行

运行完上述命令后只会返回一个容器 ID,容器会在后台运行。

使用命令sudo docker ps -a查看容器运行状态,-a参数代表列出已结束的容器。

如果想使用容器执行命令,使用命令sudo docker exec <name> <command>,例如:sudo docker exec mivm ls /usr/bin,表示在名为 mivm 的容器里执行ls /usr/bin命令,如果想打开交互式 Shell,只需要把命令改成:sudo docker exec -it mivm /bin/sh

如果想查看容器里输出的日志,使用命令sudo docker logs <name>

容器使用完可能要删除,删除容器的操作也很简单。

首先停止容器,使用命令sudo docker stop <name>,然后删除容器,使用命令sudo docker rm <name>,例如:sudo docker stop mivm && sudo docker rm mivm,使用docker stop停止容器后,可以使用sudo docker start <name>重新启动容器。

如果你不知道一个镜像该使用那些参数运行容器,一般在镜像页面都会有相对应的说明。


好了,这篇文章给大家讲了 Docker 容器的一些基本使用方法和命令,下一篇文章我会教大家如何实现 Docker 容器数据持久化。

有任何不懂的地方,欢迎加入 QQ 群与小山进行讨论。

微信公众号二维码

微信扫描二维码关注我们

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据