根据第一节,把docker安装完毕并学习了基本操作之后,我们来学习构建一个docker应用程序

要创建一个便携的镜像,首先需要创建一个叫做Dockerfile的文件,这个文件定义了你要创建的容器所需要的环境配置。由于这个环境是虚拟化的,所以与外部环境隔离,因此需要将你所需要用到的端口映射到外部,并具体说明这个环境中需要什么样的配置,这样做之后,就可以通过Dickerfile构建应用程序,并且运行到任何地方。
接下来逐步说明docker应用程序的创建过程。
创建一个空目录,并在此目录中创建Dockerfile文件,定义应用程序的环境,配置如下:

# Use an official Python runtime as a base image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]

阅读配置信息可以看出,我们还需要创建requirements.txt和app.py文件,文件内容分别是:
requirements.txt
Flask
Redis
这里的Flask和Redis分别是需要给Python安装的库,因为在运行时需要这两个库的支持。
app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():try:visits = redis.incr("counter")except RedisError:visits = "<i>cannot connect to Redis, counter disabled</i>"html = "<h3>Hello {name}!</h3>" \"<b>Hostname:</b> {hostname}<br/>" \"<b>Visits:</b> {visits}"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":app.run(host='0.0.0.0', port=80)

这个app.py做了两个事情,第一,启动Flask服务,第二链接redis服务器。
文件准备完毕,我们就开始进行应用程序的构建了,在创建的目录下运行命令:
docker build -t xxxx .
xxxx表示将要生成的容器名称

注意:在容器名称中输入大写字母直接报错,意思是不能使用大写字母,将大写字母改成小写即可。

通过运行过程我们可以看到,写在Dockerfile的配置全部运行完成,则表示容器创建成功。
接下来,我们来看一下创建的容器放在了哪里,docker images 一下:

可以看到,已经生成在了images列表中,然后,我们来对该容器进行测试:
使用docker run -p 9999:80 my-helloworld 来运行容器,其中 -p 表示我们要使用外部端口来映射容器的80端口

在浏览器中输入http://192.168.83.129:9999,当我们看到如下页面时,表示我们的容器已经生成完毕,可以发布和使用了。

这里的报无法连接Redis的错误是因为我们没有安装Redis数据库,而仅仅安装了Python的redis库的原因。在服务端,我们看到访问记录如下:

当然我们也可以在后台运行我们的应用程序,只需要加上-d参数即可,即:
docker run -d -p 9999:80 my-helloworld
如果要关闭应用,运行 docker stop imageid
如果要上传此容器到Docker Hub,只需参考初识docker部分,上传之后,就可以在任何安装docker的机器上运行docker run -pxxxx:80 xxxx/xxxx来从docker库中拉取xxxx/xxxx的镜像了。
一些常用命令:

docker build -t friendlyname .  # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyname  # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyname         # Same thing, but in detached mode
docker ps                                 # See a list of all running containers
docker stop <hash>                     # Gracefully stop the specified container
docker ps -a           # See a list of all containers, even the ones not running
docker kill <hash>                   # Force shutdown of the specified container
docker rm <hash>              # Remove the specified container from this machine
docker rm $(docker ps -a -q)           # Remove all containers from this machinedocker images -a                               # Show all images on this machine
docker rmi <imagename>            # Remove the specified image from this machine
docker rmi $(docker images -q)             # Remove all images from this machine
docker login             # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag  # Tag <image> for upload to registry
docker push username/repository:tag            # Upload tagged image to registry
docker run username/repository:tag                   # Run image from a registry

创建一个docker容器相关推荐

  1. docker新建Linux虚拟机,RHEL/CentOS 7下创建你的第一个Docker容器

    Docker容器人气一直在增长.他们现在正在快速采用,正在取代虚拟机,特别是在应用程序开发方面. 在本教程中,我们将讨论Docker容器的内容,并将学习在RHEL/CentOS 7上安装它的过程. D ...

  2. 快速使用docker创建一个tomcat9容器,并且挂载webapps目录运行war包

    安装docker-ce 使用以下命令就可以直接创建一个tomcat容器,并且含有jre1.8环境 docker run --name=tomcat -d -p 8080:8080 -v /mydata ...

  3. 修改已经创建的docker容器的端口映射

    原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-dock ...

  4. 创建新Docker容器时出现“The container name /xxx is already in use by container xxxxxxxxxxx...”问题的解决办法

    创建新Docker容器时出现"The container name "/xxx" is already in use by container xxxxxxxxxxx-& ...

  5. Docker新手教程(03)进入已创建的Docker容器并执行bash命令

    03.进入已创建的Docker容器并执行bash命令 1.情况描述 我们会遇见这样一种情况,一个Docker容器执行一段时间后,出错了,这个时候我们需要查看到底是因为什么原因出错. 正常情况,我们进入 ...

  6. 创建一个nginx容器(提供配置文件和网页文件)

    创建一个nginx容器(提供配置文件和网页文件) 创建一个nginx容器 [root@localhost ~]# docker run -tid --name nginx centos 81cd1d3 ...

  7. 创建新Docker容器时出现“The container name “/xxx“ is already in use by container xxxxxxxxxxx...”问题的解决办法

    创建新Docker容器时出现"The container name "/xxx" is already in use by container xxxxxxxxxxx-& ...

  8. 运行第一个Docker容器-Docker for Web Developers(1)

    1. Docker介绍 Docker由dotCloud公司发起的一个内部项目,后来Docker火了,dotCloud公司改名为Docker了: Docker使用了Go语言开发,基于 Linux 内核的 ...

  9. 运行第一个docker容器

    我们来学习SpringCloud部署方面的知识,我们先来个简单的,这是Eureka,首先你电脑上得先安装Docker,docker run -p 8761:8761 -d hub.c.163.com/ ...

最新文章

  1. mybatis的一些基础问题
  2. 这一次,我拒绝了Python,选择了Go
  3. PowerDesigner使用总结(转)
  4. python中对象包含几个部分_python中包含对象类型的两个列表的交集
  5. java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用
  6. HDU 5876 关于补图的bfs
  7. 4666 Hyperspace stl
  8. c语言解三元一次方程组_一次二次反比例,一山更比一山高?二次函数三大解析式详解...
  9. EOJ3536 求蛇形矩阵每一行的和---找规律
  10. spring3.0注解定时任务配置及说明
  11. U盘安装EXSi6.7出错menu.c32文件
  12. maxscript编辑器脚本高亮显示
  13. 实力验证:金蝶EAS 8.2授权注册 (包含Apusic 9999连接数破解)
  14. 【物理】半导体物理 西安电子科技大学 柴常春等主讲-[笔记P11-P14]
  15. onepunch的wp
  16. 【MapBox实战】生成地图+绘制区域+纠偏
  17. linux中'.'的作用
  18. zookeeper配置文件zoo.cfg详细讲解
  19. 与普通仓库相比,自动化立体库的优缺点
  20. 机器学习排序算法:RankNet to LambdaRank to LambdaMART

热门文章

  1. SystemUI修改
  2. vue字符云-------把老婆放到云端
  3. 线性筛(Linear Sieve)
  4. HDU 4069 Squiggly Sudoku 【DLX+BFS】
  5. 超市收银系统测试报告
  6. mppdb 查看建表语句_MPP架构数据库优化总结——华为LibrA与GreenPlum
  7. SAP中采购订单历史分类标识与实际业务描述
  8. python项目开发实例集锦-python项目开发案例集锦 mobi|金融租赁公司 业务
  9. 附件四:攻击方评分标准.docx
  10. 试题 入门训练 Fibonacci数列