Docker practice

Docker 实践


目标

创建一个基于最新版Ubuntu的镜像,在该镜像中更新apt包源并安装NTP package,最后将该新镜像提交到本地私有的registry中。

本地创建私有Registry

有N种方法创建私有Registry,这里选择最方(tou)便(lan)的,利用官方Registry镜像来构建。在你需要创建Registry的主机上运行:

  1. docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry

制作目标镜像

当然,创建镜像的方法也有N种。用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。
那么是否可以利用一个container创建镜像呢?答案是可以滴。
具体可以参考创建镜像

创建Dockerfile

最好是创建一个新的空目录,然后在该空目录下创建Dockerfile

  1. # This dockerfile uses the ubuntu image
  2. # Version 0.0.1
  3. # Author: Andy WU
  4. FROM ubuntu:latest
  5. MAINTAINER AndyWu zewei@nfs-qd.com
  6. # 更新apt包源
  7. RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe">>/etc/apt/sources.list
  8. # 添加一行文字到文件/andy/test
  9. RUN echo "hello world">>/andy/test
  10. # 安装NTP
  11. RUN apt-get install ntp -y
  12. # 将 src 目录拷贝到目标镜像目录/opt/data下
  13. ADD src /opt/data

在Dockerfile同一目录下执行镜像创建命令:

  1. docker build -t 10.50.200.248:5000/andy/new_image .

注意,如果是要将镜像上传到私有的Registry中,必须将repository写全,格式是:registry/user/tag,这样当你push的时候,docker才能正确提交。

但是很不幸,提交时出现 error:

  1. ...
  2. Step3: RUN echo "hello world">>/andy/test
  3. --->Runningin8ae55dfb7dd7
  4. /bin/sh:1: cannot create /andy/test:Directory nonexistent

什么问题?为什么能正确更新/etc/apt/souce.list而不能更新/andy/test呢?我明明在刚刚利用Ubuntu镜像创建的容器里新建了这个文件啊?
提示没有/andy/test这个文件,那应该是Ubuntu这个base的镜像不存在这个文件,那么怎么来理解这个 base image 呢?
Base 镜像就是那个最原始,没有经过任何修改,这里的修改通常指的是添加其他package等。

镜像 VS 容器

造成这个错误的另一个根本原因是没有弄清image和container之间的关系。
image是死的,container是活的,我们利用image启动一个container,在container中所做的工作一旦退出,就不存在了
container不可重复,即利用image创建container,不可能创建出与之前一直的container。这可以从container ID看出:

CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
16616512db8210.50.200.248:5000/andy/new_mage:latest/bin/bashAbout a minute agoExited (0) 5 seconds ago cocky_heisenberg
b759a51351ba10.50.200.248:5000/andy/new_mage:latest/bin/bash9 minutes agoExited (0) 2 minutes ago sleepy_mclean

用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
当然,你也可以通过docker start 来重新启动一个退出的container。

  1. docker start -i b759a51351ba

没有修改Dockerfile,无论你怎么修改tag,创建的总是同一个image.

上传镜像
  1. docker push 10.50.200.248:5000/andy/new_image

上传之后你可以去Registry查看是否成功:

  1. root@nfs:/opt/data/registry/repositories# tree --charset ASCII
  2. .
  3. `-- andy
  4. |-- new_image
  5. | |-- _index_images
  6. | |-- json
  7. | |-- tag_latest
  8. | `-- taglatest_json
  9. `-- test
  10. |-- _index_images
  11. |-- json
  12. |-- tag_latest
  13. `-- taglatest_json

验证

  1. docker pull 10.50.200.248:5000/andy/new_image
  2. docker run -it 10.50.200.248:5000/andy/new_image /bin/bash
  3. root@b759a51351ba:/# ntpq
  4. ntpq>

Bingo!

最后,上图。





转载于:https://www.cnblogs.com/zeweiwu/p/4748564.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种容器化平台,能够在不同的操作系统和环境中运行应用程序。它有助于提高开发、部署和管理应用程序的效率。 Docker_practice是一个公开的GitHub仓库,包含了一系列用于学习和练习Docker的实例代码和教程。这些实例代码涵盖了各种应用场景,能够帮助用户快速入门和掌握Docker的基本操作和高级功能。 在docker_practice仓库中,用户可以学习到如何构建、运行和管理Docker容器。其中包括了使用Dockerfile创建自定义镜像的方法,以及使用docker-compose进行容器编排的技巧。此外,还提供了一些Docker应用的实际示例,帮助用户了解如何在实际项目中应用Docker进行开发和部署。 通过docker_practice,用户可以逐步掌握Docker的使用技巧和最佳实践。这对于开发人员和系统管理员来说是非常有价值的,能够加快应用程序的部署速度,提升整体的开发效率。此外,Docker还能够提供一个可移植的部署环境,简化开发和测试过程,提供更高的可靠性和可扩展性。 总之,docker_practice是一个有助于学习和实践Docker的资源库,通过实例代码和教程,帮助用户掌握Docker的基本操作和高级功能,提高应用程序的开发和部署效率。 ### 回答2: Docker是一种开源的容器化技术,通过将应用程序及其依赖打包在容器中,实现了应用程序的快速部署、可移植性和可伸缩性。Docker的核心组件是Docker引擎,它是一个轻量级的虚拟化平台,可以在操作系统层面创建和管理容器。 使用Docker进行实践,可以带来很多好处。首先,Docker提供了一个一致性的运行环境,开发人员可以将应用程序及其依赖打包为一个镜像,并在不同的环境中进行部署,保证应用程序在不同的机器上能够以相同的方式运行。这样一来,开发人员可以更加专注于业务逻辑的开发,而不需要关心环境的配置和依赖的安装。 其次,Docker具有快速部署的特点。借助Docker的功能,我们可以非常快速地创建、启动和停止容器,提供了更加敏捷的应用程序开发和发布流程。同时,Docker还支持自动化部署,结合CI/CD工具,可以实现持续集成和持续部署。 另外,Docker提供了可伸缩性的解决方案。使用Docker Swarm或Kubernetes等容器编排工具,可以将应用程序的多个容器组织成一个集群,并进行负载均衡和自动扩缩容。这样,我们可以根据需求的变化,自动地增加或减少容器的数量,确保应用程序具有良好的性能和可用性。 最后,Docker还具有资源隔离的优势。每个Docker容器都相互隔离,拥有自己的文件系统、进程空间和网络接口。这样一来,即使将多个应用程序部署在同一台物理机器上,它们之间也不会相互影响,提高了系统的安全性和稳定性。 综上所述,Docker的实践可以极大地提高开发和部署的效率,同时也提供了更好的可伸缩性和资源隔离。它正在成为越来越多企业和开发者的首选技术,为应用程序的交付提供了更加可靠和可持续的解决方案。 ### 回答3: Docker是一个用于开发、部署和运行应用程序的开源平台。它允许开发者将应用程序及其依赖项打包为一个称为容器的独立运行环境。通过将应用程序和依赖项打包为容器,可以确保应用程序在不同的环境中具有相同的运行结果。 Docker的主要优势之一是轻量级和灵活性。容器只需包含运行所需的最基本的组件,减少了资源的消耗和管理的复杂性。此外,容器可以提供高度可移植性,可以在不同的操作系统和云平台上运行。 使用Docker进行实践也非常简单。首先,我们需要在本地机器上安装Docker引擎。然后,我们可以使用Docker命令行工具或Docker Compose配置文件来定义和管理容器。可以使用Docker Hub来获取或分享现有的Docker镜像,这些镜像可以作为容器的基础。Docker Hub是一个公共的注册表,它包含各种类型的镜像,供用户使用。 在实践中,我们可以使用Docker构建和测试应用程序,然后将其打包为一个容器并进行部署。通过使用容器,我们可以轻松地在不同的环境中部署和运行应用程序,包括开发、测试和生产环境。容器还提供了隔离性和安全性,可以确保一个容器中的应用程序不会影响其他容器或宿主机的运行。 总而言之,Docker是一个方便、高效和可移植的平台,可以帮助开发者更容易地构建、部署和管理应用程序。通过使用Docker,我们可以减少依赖项的冲突和环境配置的问题,并确保应用程序在不同的环境中具有一致的运行结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值