docker学习2|在容器中部署nginx并保存、运行容器

原创 2017年12月13日 00:00:00

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

▎作者简介

作者朱磊是开源软件爱好者,致力于web应用部署、运维领域解决方案的研究。将web应用部署在Docker上能够极大的简化部署、方便维护,文章将以初学者的角度从输出hello world开始,一步步的揭开使用Docker部署web应用的神秘面纱。


上文:docker学习1|使用docker输出hello world

在上一节,我们学到如何使用centos容器输出hello world,本节我们将学习如何在镜像中安装nginx并保存更改,运行自己的容器,并学习如何进行端口映射与后台运行容器。


1 共享本地存储

  1. #-v共享本地存储

  2. docker run -it -v /opt:/opt centos /bin/bash

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。

此时,可以查看容器的/opt目录是否已经共享本地存储

  1. [root@2b4accd4cb25 /]# ll /opt

当需要使用本机文件的时候可以复制到本机/opt目录,这样容器就可以共享了。


2 使用yum安装nginx并启动

  1. yum -y install nginx

不修改配置文件,直接启动nginx,并访问80端口

  1. #启动nginx

  2. nginx

  3. #访问nginx网站80端口

  4. curl localhost:80

这样我们即在容器内启动了nginx默认页面在80端口上,通过curl可以查看其页面代码。


3 保存对容器的更改

首先,查看当前运行中的容器

  1. #在宿主机中执行

  2. docker ps

  3. #记录结果CONTAINER ID

  4. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

  5. 2b4accd4cb25        centos              "/bin/bash"         About an hour ago   Up About an hour                        mad_wozniak

保存该容器

  1. docker commit 2b4a mycentos

  2. #2b4a为CONTAINER ID的前四位

  3. #mycentos是自己更改镜像后的别名

查看本地已有容器

  1. docker images

  2. #结果如下:

  3. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

  4. mycentos            latest              19604df31369        9 seconds ago       375.4 MB

  5. docker.io/centos    latest              3fa822599e10        8 days ago          203.5 MB

可以看到,mycentos已经作为一个新的容器保存。


4 运行mycentos容器   

  1. docker run -it -v /opt:/opt mycentos /bin/bash

  2. #进入mycentos后直接运行nginx,验证nginx是否已经安装

  3. [root@16f46f4e363d /]# nginx

  4. [root@16f46f4e363d /]# ps aux |grep nginx

  5. root         14  0.0  0.1 122912  2108 ?        Ss   01:35   0:00 nginx: master process nginx

  6. nginx        15  0.0  0.1 123296  3128 ?        S    01:35   0:00 nginx: worker process

  7. root         17  0.0  0.0   9

  8. #可以验证,容器已经正确保存修改并重新运行。

5 端口映射与后台运行

5.1 端口映射

我们在容器mycentos中启动了nginx服务并开启了80端口,对于更一般的情况来说,我们需要在容器外,也就是宿主机开启对应的映射端口,这样才能对外提供网站服务。我们可以通过如下命令开启映射:

  1. docker run -it -p 80:80 mycentos /bin/bash

  2. [root@8e2455671b01 /]# nginx

  3. #开启Nginx进程后,在宿主机浏览器使用localhost:80即可访问nginx默认页面

  4. # -p 参数 host_port:port ,host_port指定了宿主机的端口,后面是容器的端口

  5. #-p 还可以开启多端口映射 -p host_port1:port1 -p host_port2:port2

5.2 开启nginx并后台运行容器

对于一般的网站部署来说,我们并不需要开启bash窗口,我们需要容器开启nginx后一直在后台运行就可以了,我们可以输入如下命令开启容器后台运行:

  1. #前台开启

  2. docker run -it -p 80:80 mycentos /bin/bash

  3. [root@8e2455671b01 /]# nginx

  4. #按住 Ctrl + P + Q 退出容器,进入后台运行

  5. #此时使用 docker ps

  6. docker ps

  7. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES

  8. 8c2299567a7d        mycentos            "/bin/bash"         30 seconds ago      Up 27 seconds       0.0.0.0:80->80/tcp   boring_goldberg

可以看到容器已经保持在后台运行,我们可以对这个在后台的容器进行一定的操作

  1. #进入刚刚进入后台运行的容器

  2. docker attach 8c2299567a7d

  3. #验证Nginx进程

  4. [root@8c2299567a7d /]# ps aux | grep nginx

  5. #按住 Ctrl + P + Q 退出容器,进入后台运行

  6. #后台开启容器mycentos,但不进入容器

  7. docker run -dit -p 80:80 mycentos /bin/bash

  8. #后台执行nginx,不进入容器

  9. docker exec -it 8c2299567a7d nginx

  10. #退出后台运行

  11. docker stop 8c2299567a7d

参考资料

  1. 详解Docker挂载本地目录及实现文件共享,http://blog.csdn.net/magerguo/article/details/72514813

  2. 在linux命令下如何访问一个url?,http://blog.csdn.net/zhuying_linux/article/details/6881728

  3. 保存对容器的修改,http://www.docker.org.cn/book/docker/docer-save-changes-10.html

  4. Docker学习笔记-Docker端口映射,http://blog.csdn.net/qq_29994609/article/details/51730640

  5. Docker学习笔记(四)之容器查看启动终止删除,http://blog.csdn.net/u013246898/article/details/52945884

  6. 保持后台运行 Docker 容器,https://www.douban.com/note/602752252/

  7. docker 后台运行和进入后台运行的容器,https://www.cnblogs.com/hanxing/p/7832178.html

640?wx_fmt=jpeg

版权声明:本文为博主原创文章,未经博主允许不得转载。

docker - 从安装到部署一个web应用(go、java)

说明: 1.权限是root,不是则先提升权限一:安装docker1.https://docs.docker.com/engine/installation/binaries/ 下载docker最新...
  • jinzhencs
  • jinzhencs
  • 2016年05月11日 13:39
  • 19646

使用docker容器定制镜像(image)并部署简单 web应用

概念简述 镜像 一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。 Docker镜像是一个只读的模板。比如一个镜像可以包含U...
  • zhaokx3
  • zhaokx3
  • 2017年05月25日 20:55
  • 6460

实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

动手制作一个镜像,实现web应用在线部署
  • boling_cavalry
  • boling_cavalry
  • 2017年04月15日 15:06
  • 6799

docker部署web应用

1.安装mysql容器    docker run --name mysqlname -v /home/ubuntu/*/data0:/var/lib/mysql -p 3302:3306 -e MY...
  • gongdaxuesheng
  • gongdaxuesheng
  • 2017年04月01日 15:04
  • 1193

Docker部署JavaWeb项目实战

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka          摘要:本文主要讲了如何在Ubuntu14.04 64位系统下来创建...
  • AlbenXie
  • AlbenXie
  • 2017年07月04日 16:38
  • 1551

在Docker容器中部署Web应用

本文直接讲解如何在Docker容器中实战部署一个Web应用程序,关于Docker相关的概念和如何安装Docker请参考相关资料完成。   第一步:工具准备 演示如何在Docker容器中部署一个Java...
  • nuccch
  • nuccch
  • 2015年02月02日 23:20
  • 19223

Docker Tomcat容器部署web应用(war)

创建tomcat容器docker run tomcat --name mytomcat -p 8080:8080 -d进入容器内部交互式的进入tomcat容器。“docker exec”命令表示在运行...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2017年11月12日 19:49
  • 984

docker - 从安装到部署一个web应用(go、java)

说明:  1.权限是root,不是则先提升权限 一:安装docker 1.https://docs.docker.com/engine/installation/binaries/ ...
  • cts529269539
  • cts529269539
  • 2017年12月11日 11:05
  • 45

自己学Docker:16.Docker使用实战--部署带Web管理工具的RabbitMQ

RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。 因为RabbitMQ由Erlang实现,本机部署的话还要安装Erlang的开发环境,成本难免高些。然而,借助Docker的话,环...
  • Mungo
  • Mungo
  • 2017年11月29日 13:47
  • 344

容器部署解决方案Docker详解

1.Docker简介 1.1虚拟化 1.1.1什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予...
  • wfhjhffg
  • wfhjhffg
  • 2017年11月27日 20:17
  • 680
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:docker学习2|在容器中部署nginx并保存、运行容器
举报原因:
原因补充:

(最多只允许输入30个字)