详解Docker 容器基础系统镜像打包

下面是详解Docker 容器基础系统镜像打包的完整攻略,包含两条示例说明。

1. Docker 容器基础系统镜像打包攻略

1.1. 确定镜像名称和版本

首先,我们需要确定要打包的镜像名称和版本。

我们可以在 Docker Hub 上找到名为 ubuntu 的官方镜像,命令为:

docker pull ubuntu

这里,我们将以 ubuntu 镜像为例,创建自己的基础系统镜像,并命名为 myubuntu,版本为 1.0。

1.2. 建立 Dockerfile

接下来,我们需要新建一个名为 Dockerfile 的文件,并编写相关配置。

我们首先使用 FROM 关键字指定我们将基于哪个镜像进行构建,这里我们使用上面已经 pull 下来的 ubuntu 镜像:

FROM ubuntu

接着,我们可以使用 LABEL 关键字来为镜像打标签、添加描述等,这是非常好的做法:

LABEL maintainer="me@example.com"
LABEL version="1.0"
LABEL description="My customized Ubuntu image."

我们还有自定义配置需要添加,例如更新系统软件源等操作,这些都可以在 Dockerfile 中添加。比如下面这个例子将 Ubuntu 的软件源切换至 aliyun,并且安装了 curl 工具:

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
COPY sources.list /etc/apt/
RUN apt-get update
RUN apt-get install -y curl

1.3. 构建镜像

在完成 Dockerfile 文件编写后,我们可以执行如下命令来构建我们的镜像:

docker build -t myubuntu:1.0 .

这里,我们使用 -t 参数来指定镜像名称和版本,注意名称和版本之间需要以冒号 : 分隔,并且末尾的 . 代表当前目录,也就是 Dockerfile 所在的目录。

1.4. 验证镜像

完成上述步骤后,我们的自定义镜像 myubuntu:1.0 就已经构建成功了。我们可以执行如下命令来验证一下:

docker images

这个命令会列出当前主机上所有可用的镜像列表,其中自定义的 myubuntu:1.0 就应该在其中。

2. 示例 1:基于 Ubuntu 的 PHP 开发环境镜像

如果我们需要搭建一个基于 Ubuntu 的 PHP 开发环境,一个常见的做法是基于我们刚才创建的 myubuntu:1.0 镜像再添加 Apache、PHP 组件等,具体步骤如下:

2.1. 编辑 Dockerfile

我们首先需要创建一个名为 Dockerfile 的文件,并编辑如下内容:

FROM myubuntu:1.0
LABEL maintainer="me@example.com"
LABEL version="1.0"
LABEL description="My customized Ubuntu image with PHP and Apache."
RUN apt-get update
RUN apt-get install -y apache2 php

这里,我们首先使用 FROM 关键字,指定我们基于之前创建的 myubuntu:1.0 镜像构建新的镜像。

然后,我们添加了 Apache 和 PHP 组件的安装命令。

2.2. 构建镜像

接下来,我们执行如下命令来构建我们的镜像:

docker build -t myphpdev:1.0 .

这里,我们使用 -t 参数来指定镜像名称和版本,名称为 myphpdev,版本为 1.0。

2.3. 启动容器

完成镜像构建后,我们就可以使用该镜像来启动容器了。例如,我们可以使用如下命令启动一个名为 myphpdev_container 的容器:

docker run -it --name myphpdev_container -p 80:80 myphpdev:1.0

这里,我们使用 -it 参数来指定使用交互式终端启动容器,-p 参数指定将容器内部的 80 端口映射到主机的 80 端口上,方便我们通过主机的浏览器访问容器内运行的 Web 服务。

2.4. 验证容器

我们可以通过浏览器访问 http://localhost 来验证容器运行情况,若一切正常,该页面应该显示了 Apache 的默认欢迎页面。

3. 示例 2:基于 Ubuntu 的 Python 开发环境镜像

如果我们需要搭建一个基于 Ubuntu 的 Python 开发环境,我们可以基于之前的 myubuntu:1.0 镜像进行扩展,完成后的镜像包含了 Python 环境,具体步骤如下:

3.1. 编写 Dockerfile

我们首先需要创建一个名为 Dockerfile 的文件,并编辑如下内容:

FROM myubuntu:1.0
LABEL maintainer="me@example.com"
LABEL version="1.0"
LABEL description="My customized Ubuntu image with Python 3.7."

RUN apt-get update
RUN apt-get install -y python3

RUN python3 --version

这里,我们添加了 Python 3.7 的安装命令,并运行了一个简单的 Python 程序,如下:

print('Hello, Docker!')

3.2. 构建镜像

接下来,我们执行如下命令来构建我们的镜像:

docker build -t mypydev:1.0 .

这里,我们使用 -t 参数来指定镜像名称和版本,名称为 mypydev,版本为 1.0。

3.3. 启动容器

完成镜像构建后,我们就可以使用该镜像来启动容器了。例如,我们可以使用如下命令启动一个名为 mypydev_container 的容器:

docker run -it --name mypydev_container mypydev:1.0

这里我们使用 -it 参数来指定使用交互式终端启动容器。

3.4. 验证容器

我们可以通过在容器内启动 Python 程序来验证容器环境,例如,我们可以在容器中执行如下命令:

python3 -c "print('Hello, Docker!')"

以上命令输出 hello, docker!,说明容器中的 Python 环境已经正常运行了。

这就是基于 Ubuntu 的 Python 开发环境镜像的打包过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Docker 容器基础系统镜像打包 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Docker安装方法与Docker四种网络模式详解

    关于Docker的安装,可以根据不同的操作系统选择相应的安装方法。下面分别介绍Windows、MacOS和Ubuntu下的Docker安装方法。 Windows下Docker的安装 在Windows下安装Docker比较简单,只需要下载Docker桌面版并运行安装程序即可。可以在Docker官网下载。 MacOS下Docker的安装 在MacOS下也是直接下…

    Docker 2023年5月16日
    00
  • 安装旧版本docker

    这里以docker-ce-17.03.2.ce-1.el7.centos为例   肯定要先找可用的版本啊,靓仔   使用下面这个命令: yum list docker-ce –showduplicates | sort -r   看看你有没有可用的版本:正常是这样的–》 [root@centos-linux ~]# yum list docker-ce …

    Docker 2023年4月16日
    00
  • 初次使用Docker的体验笔记总结

    初次使用Docker的体验笔记总结 什么是Docker Docker是一种轻量级的容器虚拟化技术,可以快速构建、打包以及分享便携式容器应用程序。Docker可以在不同的操作系统上共享,具有简单易用、环境隔离等优点。 安装Docker Mac:可以通过Homebrew安装,命令行输入brew install docker Windows:可以从官网下载Dock…

    Docker 2023年5月16日
    00
  • Docker安装并使用Mysql的详细教程(实测可用!)

    以下是Docker安装并使用Mysql的详细教程: 环境准备 在开始教程前,需要先安装好Docker和docker-compose,安装过程不在此赘述。 创建MySQL容器 创建一个文件夹,在该文件夹内创建一个docker-compose.yml文件,其中写入以下内容: version: ‘3’ services: db: image: mysql:5.7 …

    Docker 2023年5月15日
    00
  • 基于docker和cri-dockerd部署k8sv1.26.3

    在 Kubernetes v1.24 及更早版本中,我们使用docker作为容器引擎在k8s上使用时,依赖一个dockershim的内置k8s组件;k8s v1.24发行版中将dockershim组件给移除了;取而代之的就是cri-dockerd(当然还有其它容器接口);简单讲CRI就是容器运行时接口(Container Runtime Interface,…

    2023年4月8日
    00
  • Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板

    概述 创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索. 有经验的直接用 Grafana 的 Explore 功能就可以了. 但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这个用例,但对于第一次使用的人,或者半夜收到告警的人来说,也可…

    2023年4月10日
    00
  • 【JVM故障问题排查心得】「内存诊断系列」Xmx和Xms的大小是小于Docker容器以及Pod的大小的,为啥还是会出现OOMKilled?

    为什么我设置的大小关系没有错,还会OOMKilled? 这种问题常发生在JDK8u131或者JDK9版本之后所出现在容器中运行JVM的问题:在大多数情况下,JVM将一般默认会采用宿主机Node节点的内存为Native VM空间(其中包含了堆空间、直接内存空间以及栈空间),而并非是是容器的空间为标准。 堆内存和VM实际分配内存不一致 -XshowSetting…

    Docker 2023年4月11日
    00
  • Jenkins搭建与数据迁移实践

    概述 本文主要介绍内容如下: 1.使用Docker搭建Jenkins 2.迁移原Jenkins数据到新搭建的Jenkins中 3.在Jenkins容器内部配置Maven的私服配置 4.在Jenkins容器内部配置Nodejs 使用Docker搭建Jenkins Jenkins的最新版本已经全面支持jdk11,由于项目原因我们还是jdk8的钉子户,所以本次安装…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部