如何利用镜像创建容器

上一节我们拉取了nginx镜像,但是是以前台进程的方式启动的,这意味着我们始终要保持终端运行状态,一旦关闭控制台,容器就会停止运行。如果我们需要容器在后台一直运行,那么需要修改一下启动参数才行。这一节我们就来讲一讲启动容器时的常用参数。

detach

detach单词的意思是“分离”,利用它就可以将容器的默认进程从前台分离,转为后台运行。

docker run -d nginx

-d参数是--detach的缩写,容器创建成功后会在后台运行并且控制台会打印出容器id。

name

如果你执行了上一条命令创建容器后,会发现返回的容器id是12位16进制的字符串。虽然它可以唯一标识一个容器,但是辨识度太低,多个容器在一起区分起来相当困难!

所以我们需要使用--name参数给它一个特定的有意义的名字。譬如:

docker run --name web -d nginx

这里需要注意的是:

  • 参数之间没有先后限制,但是必须放在镜像之前。

  • 名称必须唯一,不允许重复。

  • 如果我们没有使用--name参数那么容器在被创建的额时候Docker进程会自动分配一个随机名称。

  • 参数名参数值既可以用空格隔开也可以用等号,--name web--name=web是等效的。

publish

在第一节已经提到,容器的环境是独立的,与主机(容器所运行的机器)隔离。但是很多应用,比如web进程、数据库都是需要与其它进程进行通信的,所以我们需要对这些容器的网络进行配置,使得它们能与其它容器、主机通信。

按照nginx镜像的配置文件,容器启动时默认监听了80端口。我们现在尝试把80端口暴露出来,把它映射到主机上的81端口。

docker run --name web2 -d --publish 81:80 nginx

如果你主机上的81端口没有被其它进程占用的话(如果被占用了请把81端口替换成其它未占用的端口),那么在浏览器中输入localhost:81应该可以看到类似Welcome to nginx!的提示信息。

--publish参数的作用就是将主机的端口与容器端口进行映射(注意第一个是主机端口,同一个主机端口不能与多个容器建立映射,第二个是容器端口),缩写形式是-p

当然这个参数只在特定的网络模式下才有效,关于容器的网络这一部分十分重要,后面的小节将会专门讲解。

如果要映射多个端口可以多次输入这个参数。-p 81:80 -p 83:84。当然还有个“简单”的方式,使用“--publish-all”(缩写为“-P”,这里的“P”是大写)参数来让所有容器中的端口与主机端口映射。不过!比较坑的是映射到主机上的端口是随机的,所以实际使用起来并不如直接指定方便。

volume

虽然已经能通过端口访问它,不过要把它当作WEB服务器来使用,还必须把我们的文件放入对应的目录才行(要不然永远都是显示“Welcome to nginx!”)。

一种可行的方式就是让容器直接读取主机上的文件,但是在第一节已经提到,容器的环境是独立的,与主机(容器所运行的机器)隔离。我们需要参数来让主机与容器之间共享目录,它就是--volume,缩写形式为-v

docker run --name web3 -d --publish 8081:80 -v C:web:/usr/share/nginx/html nginx

这条命令会让主机C盘的web文件夹与容器的/usr/share/nginx/html文件夹实现共享,无论主机还是容器操作这个目录下的文件都会生效。

需要注意的是:创建容器的时候会主机上的文件会优先覆盖容器中的文件。以上面执行的命令为例,无论容器中/usr/share/nginx/html目录中有多少文件,容器创建时都会被C:web目录覆盖。

设置了这个参数之后,我们可以把网站所需的文件放入C:web目录下,在浏览器中国年访问容器的时就会显示相应的内容了。

这一节我们讲了启动容器命令最重要最常用的几个参数,下一节我们继续讲解其它次常用的参数和对容器的操作~

本书地址:https://yalishizhude.gitbooks.io/docker-book

更多web技术内容请关注公众号“web学习社”

results matching ""

    No results matching ""