热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【云计算】Dockerfile、镜像、容器快速入门

1.1、Dockerfile书写示例

Dockerfile可以用来生成Docker镜像,它明确的定义了Image的生成过程。虽然直接修改容器也可以提交生成镜像,但是这种方式生成的镜像对使用者是透明的,很难进行二次修改。最佳实践只建议使用Dockerfile生成镜像,开发者、使用者都需要明确的知道镜像的生成过程。

以下示例为Ubuntu 14.04之上的一个Nginx+uWSGI+Django项目Dockerfile示例。常用的Dockerfile有以下6部分组成:基础镜像信息、基础镜像、维护者信息、镜像操作指令、指定容器需要暴露的端口、指定容器需要使用的持久化存储、容器启动指令。

源代码、Dockerfile的SVN:

https://xx.xx.xx.xx/svn/cloud/GalaxyManager/branches/0.1/DJANGO-DEMO

 

# 1. 基础镜像信息.

# VERSION: V1.0.0.0

# Author: JunneYang

 

# 2. 基础镜像.

# FROM ubuntu:14.04

 

# 3. 维护者信息.

# MAINTAINER JunneYang <597092663@qq.com>

 

# 4. 镜像操作指令.

# RUN apt-get update -y

 

# RUN apt-get install python-pip -y

# RUN pip install --upgrade pip

# RUN pip install Django==1.8.3

# RUN apt-get install python-dev libmysqlclient-dev -y

# RUN pip install MySQL-python==1.2.5

 

# RUN pip install uwsgi

# RUN apt-get install nginx -y

 

FROM 10.5.24.46:80/nscloud/django:1.0.0.0

 

RUN mkdir -p /opt/applications

COPY ./applications/ /opt/applications/

RUN find /opt/applications/ -type d -name ".svn" | xargs rm -rf

RUN chmod 755 /opt/applications/run.sh

 

# 4. 指定容器需要暴露的端口.

EXPOSE 80 443

 

# 5. 指定容器需要使用的持久化存储.

VOLUME ["/opt/applications/logs", "/opt/applications/template/sharedfiles"]

 

# 6. 容器启动指令: 如果为LongTime Service,不能起为后台进程.

CMD ["/bin/bash", "-c", "env && cd /opt/applications/ && ./run.sh"]

更多Dockerfile资料:

https://yeasy.gitbooks.io/docker_practice/content/dockerfile/index.html

http://www.toxingwang.com/cloud/docker/3032.html

https://discuss.csphere.cn/t/dockerfile/1655

http://os.51cto.com/art/201507/485007.htm

http://www.blogjava.net/yongboy/archive/2013/12/16/407643.html

http://blog.tankywoo.com/docker/2014/05/08/docker-2-dockerfile.html

http://blog.csdn.net/qinyushuang/article/details/43342553

https://hub.docker.com/r/konradkleine/docker-registry-frontend/~/dockerfile/

1.2、使用Dockerfile构建Docker镜像

使用如下命令,构建Docker镜像。

# docker build -t 10.5.24.46:80/nscloud/django:1.0.0.1 .

-t 表示该镜像的名称、标签

. 指定Dockerfile当前位置

使用如下命令查看Image:

# docker images

1.3、使用镜像运行容器

使用如下命令,启动运行容器:

# docker run --name=django-demo -d -it -p 80:80 -p 443:443 \

-e MYSQL_DATABASE="mysite" \

-e MYSQL_USER="mysite" \

-e MYSQL_PASSWORD="Admin@123" \

-e MYSQL_HOST="10.5.24.31" \

-e MYSQL_PORT="31111" \

-v /opt/fileserver/django-demo/logs:/opt/applications/logs \

-v /opt/fileserver/django-demo/files/sharedfiles:/opt/applications/template/sharedfiles \

10.5.24.46:80/nscloud/django:1.0.0.1

--name:指定容器名称,可以不指定

-d:容器后台运行

-it:容器交互式运行

-p:使用主机端口映射访问容器服务

-e:容器启动参数(环境变量),环境变量传递到镜像脚本中使用

-v:指定容器挂载的外部持久化存储路径

10.5.24.46:80/nscloud/django:1.0.0.1:容器启动镜像

 

使用如下命令,查看容器是否运行:

# docker ps

使用如下命令,查看容器控制台输出:

# docker logs #容器ID#

可以访问:http://xx.xx.xx.xx/ 或者 https://xx.xx.xx.xx/ 查看容器服务是否正常。

使用如下命令停止容器:

# docker stop #容器ID#

更多命令,使用 docker –help 获取。

可以查看 /opt/fileserver/django-demo/logs、/opt/fileserver/django-demo/files/sharedfiles是否存在内容,检验持久化存储是否有效。

 

更多docker run,参考:

http://www.tuicool.com/articles/uUBVJr


推荐阅读
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
author-avatar
Daro_olingke_572
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有