上一篇文章我给大家介绍了 Docker 以及如何安装,这篇文章我们就正式开始使用 Docker,先从容器的基本使用方法开始。
上一篇文章已经大致介绍过容器了,容器是由 Docker 镜像创建的,镜像是由 Dockerfile 文件生成的,Dockerfile 包含了这个镜像的信息、依赖项以及需要执行的操作,如果我们需要自定义镜像,可以自己编写 Dockerfile 文件,鉴于我们这是新手入门的教程,Dockerfile 文件的编写不在本教程范围里。
Docker 创建一个容器后,这个容器便是一个独立于其他容器和宿主系统的存在,容器内的所有正常操作,均不会影响到其他容器和宿主系统。不过由于和宿主系统共享 Linux 内核,所以在一些极端情况下,容器可能会影响到宿主系统。
容器的数据是保存在容器里面的,如果容器被删除,里面所有的数据也会消失,如何让容器的数据持久化,这个在以后的文章会讲到。
Docker 的强大之处在于它的生态环境,你几乎可以在 Docker 镜像仓库里找到任何你需要的镜像。比如想搭建个博客,没问题,你只需要创建一个基于 WordPress 或其他博客系统的镜像的容器就可以了,这个镜像会自动处理运行环境的依赖和配置,只需要一行命令,就可以做到开箱即用。
说了这么多,接下来教大家一些 Docker 容器的使用方法以及一些基础命令。
Docker 镜像
首先要知道如何找到需要的镜像,也很简单啦,只需要前往 Docker 镜像仓库 https://hub.docker.com 搜索就可以了,如果你的网络不是很好,无法访问,那。。。你可以加群问小山啊。
比如我想要一个 alpine 系统的镜像,这是一个非常精简的 Linux 发行版,下面的操作我会以这个镜像作为演示。
首先在镜像仓库搜索这个镜像,这类镜像都有官方提供的版本,会标注 Docker Official Images 的字样。
你可以在镜像页面的右侧看到镜像的拉取命令,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 容器数据持久化。
微信扫描二维码关注我们
如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。
文章评论