如何交互式地创建一个Docker镜像

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

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命令建立我们的容器和镜像。在建立与配置镜像与容器时,这种方法十分简单且快速。如果你有任何问题,建议和反馈,请在下方的评论框里写下来,以便我们可以提升或者更新我们的文章。谢谢!祝生活快乐 :-)

时间: 2024-10-13 11:42:43

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

创建一个基本镜像

创建一个基本镜像 ================== 你想创建你自己的基础镜像?很好! 具体的过程会严重依赖于你想打包的Linux发行版.我们有下面一些例子供你参考. 同时,我们鼓励你通过提交推送请求来贡献你的新镜像. 使用 tar 来创建一个完整的镜像 通常,你要先运行一个可工作的发行版的机器,来打包一个基础镜像.虽然有一些 工具不是必需的,比如 Debian 的 Deboostrap,但是你还是可以用它来生成 Ubuntu 镜像. 下面的例子尽可能简单地创建一个 Ubuntu 基础镜像:

Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这三种方式的大致说明请参考yeasy/docker_practice的创建镜像. 最近学习了Dockerfile文件的相关配置,这里做一下简单的总结,并对之前一直感到有些迷惑的CMD和ENTRYPOINT指令做个差异对比. 2.Dockerfile文件总结 Dockerfile 由一行行命令语句组成,

打包一个Docker镜像,让你的好友加载开启一个容器,并且每隔一秒输出hello,world到指定的文件中

一.两个脚本代码 Dockerfile 1 FROM bash 2 COPY . /usr/herui/ 3 WORKDIR /usr/herui/ 4 CMD [ "sh", "hello_world.sh" ] hello_world.sh 1 #!/bin/bash 2 while true 3 do 4 echo 'hello world!' >> /usr/herui/hello_world.log 5 sleep 1 6 done 二.打包成

vs2019,制作一个docker镜像文件

docker build -t dockerdemo03 . 这个命令的后边,一定要有一个圆点 原文地址:https://www.cnblogs.com/xichji/p/11386775.html

docker 实战---安装一个基础镜像 (一)

泡了几天官网,对docker有了一点了解.准备着手搭建一个公司的开发测试环境,包括java.python. 环境介绍 首先说明一下我的环境 2台物理服务器(后面简称主机) 主机A的配置如下: [[email protected] ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:p

Docker02 Docker初识:第一个Docker容器和Docker镜像

目录 [TOC] 一.第一个Docker容器 使用docker run 命令时,如果在本地没有改镜像,那么会直接重Docker Hub(一个官方的镜像库)中拉取镜像. docker run --rm hello-world # 运行结果展示 Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pulling fs layer docker:

Docker 镜像创建、私有仓库搭建和数据管理

Docker 镜像的创建方法 Docker 镜像除了是 Docker 的核心技术之外也是应用发布的标准格式.一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行,在 Docker 的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像. 创建镜像的三种方法 : 基于已有的镜像创建 基于本地模板创建 基于 Dockerfile 创建 (推荐) 基于已有的镜像创建

Docker 镜像创建方法

Docker 镜像创建方法 Docker镜像创建方法 创建镜像的方法有三种,分别是基于已有的镜像创建.基于本地模板创建.基于Dockerfile 创建,下面着重介绍这三种创建镜像的方法. 一.基于已有镜像创建 首先将镜像加载到容器,将容器里面运行的程序及运行环境打包起来生成新的镜像,需要记住该容器的ID号.命令格式: docker commit [选项] 容器ID/名称 仓库名称:[标签] 常用选项: -m:说明信息 ?-a:作者信息 ?-p:生成过程中停止容器的运行 例子: docker cr

Docker镜像文件(images)的存储结构

原文作者: Troy Howard(http://blog.thoward37.me/)原文地址:http://blog.thoward37.me/articles/where-are-docker-images-stored/ 翻译:刘斌(http://liubin.org/)本文地址:http://liubin.org/2014/03/10/about-docker-images-storage/ ? 关于本文的任何指正,请在新浪微博联系我或者在Twitter上. 如果你是刚开始接触 Doc