如何利用镜像创建容器
上一节我们拉取了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学习社”
