如何交互式地创建一个Docker容器

如何交互式地创建一个Docker容器

大家好,今天我们来学习如何使用一个docker镜像交互式地创建一个Docker容器。当我们从镜像中启动一个Docker进程,Docker就会获取该镜像及其父镜像,并重复这个过程,直到到达基础镜像。然后联合文件系统(UFS)会在其顶层添加一个读写层。读写层被称之为容器,它包含了一些关于父镜像信息及一些其他的信息,如唯一ID,网络配置和资源限制等。容器是有状态的,其状态可以从 运行态 切换到 退出态。一个处于 运行态的容器包含了在CPU上面运行的进程树,于其它在该主机上运行的进程相隔离,而退出态是指文件系统的状态,并保留了其退出值。你可以使用它来启动,停止和重启一个容器。

Docker技术为IT界带来了巨大的改变,它使得云服务可以用来共享应用和工作流程自动化,使得应用可以用组件快速组合,消除了开发、品质保证、产品环境间的摩擦。在这篇文章中,我们将会建立CentOS环境,然后用Apache网络服务器提供一个网站服务。

这是一个快速且容易的教程,讨论我们怎样使用交互的shell,以交互的方式来创建一个容器。

1. 运行一个Docker实例

Docker首先会尝试从本地取得并运行所需的镜像,如果在本地主机上没有发现,它就会从Docker公共注册中心拉取。这里,我们将会拉取镜像并在 Docker 容器中创建一个fedora实例,并连接到它的 tty 上的bash shell。


  1. # docker run -i -t fedora bash

Downloading Fedora Base Image

2.安装Apache网络服务器

现在,在我们的Fedora基本镜像实例准备好后,我们将会开始交互式地安装Apache网络服务器,而不是为它创建Dockerfile。为了做到这点,我们需要在终端或者shell运行以下命令。


  1. # yum update

Installing httpd


  1. # yum install httpd

Installing httpd

退出容器的 tty。


  1. # exit

3.保存镜像

现在,我们要去保存在Fedora实例里做的修改。要做到这个,我们首先需要知道实例的容器ID。而为了得到ID,我们又需要运行以下命令(LCTT 译注:在容器外执行该命令)。


  1. # docker ps -a

Docker Running Container

然后,我们会保存这些改变为一个新的镜像,请运行以下命令。


  1. # docker commit c16378f943fe fedora-httpd

committing fedora httpd

这里,修改已经通过使用容器ID保存起来了,镜像名字叫fedora-httpd。为了确认新的镜像是否在运行,我们将运行以下命令。


  1. # docker images

view docker images

4. 添加内容到新的镜像

我们自己新的Fedora Apache镜像正成功的运行,现在我们想添加一些我们网站的网页内容到Apache网络服务器,使得网站能够开箱即用。为做到这点,我们需要创建一个新的Dockerfile,它会处理从复制网页内容到启用80端口的所有操作。要达到这样的目的,我们需要使用我们最喜欢的文本编辑器创建Dockerfile文件,像下面演示的一样。


  1. # nano Dockerfile

现在,我们需要添加以下的命令行到文件中。


  1. FROM fedora-httpd
  2. ADD mysite.tar /tmp/
  3. RUN mv /tmp/mysite/* /var/www/html
  4. EXPOSE 80
  5. ENTRYPOINT [ "/usr/sbin/httpd" ]
  6. CMD [ "-D", "FOREGROUND" ]

configuring Dockerfile

这里,上述的Dockerfile中,放在mysite.tar里的网页内容会自动解压到/tmp/文件夹里。然后,整个站点会被移动到Apache的网页根目录/var/www/html/,命令expose 80会打开80端口,这样网站就能正常访问了。其次,入口点放在了/usr/sbin/https里面,保证Apache服务器能够执行。

5. 构建并运行一个容器 

现在,我们要用刚刚创建的Dockerfile创建我们的容器,以便将我们的网站添加到上面。为做到这,我们需要运行以下命令。


  1. # docker build -rm -t mysite .

Building mysite Image

建立好我们的新容器后,我们需要要用下面的命令来运行容器。


  1. # docker run -d -P mysite

Running mysite Container

总结

最后,我们已经成功的以交互式的方式建立了一个Docker容器。在本节方法中,我们是直接通过交互的shell命令建立我们的容器和镜像。在建立与配置镜像与容器时,这种方法十分简单且快速。如果你有任何问题,建议和反馈,请在下方的评论框里写下来,以便我们可以提升或者更新我们的文章。谢谢!祝生活快乐

原文发布时间:2015-05-21

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-17 21:20:10

如何交互式地创建一个Docker容器的相关文章

docker学习(5) 在mac中创建mysql docker容器

github上有一个专门的docker-libary项目,里面有各种各样常用的docker镜像,可以做为学习的示例,今天研究下其中mysql镜像的用法,国内镜像daocloud.io也能找到mysql的镜像,但根据其参考文档在mac上尝试了数次,将mysql数据库文件存储在mac本机时,启动总是报错,大意是docker容器运行时,容器的当前用户mysql,由于权限不足无法mac本机上创建文件,stackoverflow上有人解决了这个问题,参考其解决方法,重新整理了下Dockerfile文件,内

创建尽可能小的 Docker 容器

当我们在使用 Docker 的时候,你会很快注意到你正在下载很多 MB 作为你的预先配置的容器.一个简单的 Ubuntu 容器很容易超过 200 MB,并且随着在上面安装软件,尺寸在逐渐增大.在某些情况下,你不需要任何事情都使用 Ubuntu .例如,如果你只是简单的想运行一个 web 服务,使用 GO 编写的,没有必要围绕它使用任何工具. 我一直在寻找尽可能小的容器入手,并且发现了一个: docker pull scratch scratch 镜像是完美的,真正的完美!它简洁,小巧以及快速.它

Docker 容器概念

不玩虚的, 当然更畅快 docker 与虚拟机(vm)对比: lark_01_vm_vs_docker 虚拟机运行在虚拟硬件上, 应用运行在虚拟机内核上.而 docker daemon 是宿主机上的一个进程, 应用只是 docker daemon 的一个子进程, 换句话说, 应用直接运行在宿主机内核上. 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上.docker 没有硬件虚拟化, 因而可以运行在物理机.虚拟机, 甚至 docker 容器内(嵌套运行). 因为没有硬件虚拟化及多运行一

Docker容器的IO基准

本文讲的是Docker容器的IO基准,[编者的话]本文主要介绍Docker容器IO基准的创建与测试. 本周我需要一个快速而且简单的IO基准工具,因此决定创建一个Docker 容器来实现我的目标.Docker 容器它本身是比较简单的,在你闲暇的时候就可以使用.Docker 容器基于Ubuntu的最新版本,安装FIO包,并从我的网站抓取一个简单的测试文件来生成负载和基准测试结果. Dockerfile 1 # FIO benchmark on Ubuntu:latest 2  3 FROM ubun

Docker容器网络下UDP协议的一个问题

最近在工作中遇到一个 docker 容器下 UDP 协议网络不通的问题,困扰了很久,也比较有意思,所以想写下来和大家分享. 我们有个应用是 UDP 协议的,部署上去发现无法工作,但是换成 TCP 协议是可以的(应用同时支持 UDP.TCP 协议,切换成 TCP 模式发现一切正常).虽然换成 TCP 能解决问题,但是我们还是想知道到底 UDP 协议在网络模式下为什么会出现这个问题,以防止后面其他 UDP 应用会有异常. 这个问题抽象出来是这样的:如果有 UDP 服务运行在主机上(或者运行在网络模型

Docker 容器初体验

Docker 容器初体验 在本文中,我们将迈出使用Docker的第一步,学习第一个Docker容器.本章还会介绍如何与Docker进行交互的基本知识. 1 确保Docker已经就绪 首先,我们会查看Docker是否能正常工作,然后学习基本的Docker的工作流:创建并管理容器.我们将浏览容器的典型生命周期:从创建.管理到停止,直到最终删除. 第一步,查看docker程序是否存在,功能是否正常,如代码清单3-1所示. 代码清单3-1 查看docker程序是否正常工作 $ sudo docker i

如何在Ubuntu14.04的Docker容器中运行OpenVPN?

本文讲的是如何在Ubuntu14.04的Docker容器中运行OpenVPN?,[编者的话]本文来自DigitalOcean,DigitalOcean是美国的虚拟专用服务器提供商,本文主要介绍了如何在Ubuntu14.04上创建使用OpenVPN Docker容器. 介绍 本教程将介绍如何使用Docker来设置和运行OpenVPN容器. OpenVPN提供了一种方法来创建TLS加密(SSL的演进)的虚拟专用网络(VPN).它可以防止网络流量被窃取和中间人(MITM)攻击.专用网络可以用来安全地连

通过Docker容器运行持续集成/持续部署

本文讲的是通过Docker容器运行持续集成/持续部署,[编者的话] 对于Docker主流的应用场景:持续集成和持续部署(CI/CD)大家也许并不陌生.这篇文章从独特的视角阐述了如何利用各种云平台构建属于自己的CI/CD容器,笔者还自己扩展了Gitlab CI引擎,对CI感兴趣的同学对这个文章应该很感兴趣. 我曾经使用Docker了一段时间,在过去的一年里伴随着众多的Docker容器涌入,帮助用户们更容易的部署Docker容器到生产环境中.一些工具是第三方公司提供,当然也包括Docker公司自己的

初识docker—容器连接

连接容器 在使用 Docker 部分, 我们谈到了如何通过网络端口来访问运行在 Docker 容器内的服务.这是与docker容器内运行应用程序交互的一种方法.在本节中,我们打算通过端口连接到一个docker容器,并向您介绍容器连接概念. 网络端口映射 在使用docker部分,我们创建了一个python应用的容器. $ sudo docker run -d -P training/webapp python app.py 注:容器有一个内部网络和IP地址(在使用Docker部分我们使用docke