本文实例讲述了Docker简单安装与应用。分享给大家供大家参考,具体如下:
作为一个初次接触Docker的人来说,最大的问题是Docker是什么?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。比如,我们在笔记本上编译测试通过的容器可以批量地在生产环境中部署,可以用于自动化测试和持续集成、发布。
还可以用于web应用的自动化打包和发布;在服务型环境中部署和调整数据库或其他的后台应用;从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
在Mac下安装Docker
打开Docker下载网址下载稳定版本,并安装和运行Docker。顶部状态栏中的鲸鱼指示Docker正在运行,并可以从终端访问。
点击顶部状态栏中的鲸鱼,选择About Docker
以验证是否有最新版本。
运行这些命令来测试docker、docker-ompose、docker-machine版本是否是最新的,并且和Docker.app兼容。
$ docker --version $ docker-compose --version $ docker-machine --version
打开一个命令行终端,你可以运行一些Docker命令来验证Docker是否正常工作。比如使用docker version
来检查你是否安装了最新版本,使用docker ps
来列出正在运行的容器,使用docker run hello-world
运行示例程序。
使用docker run
命令可以启动一个新容器,这种单一的命令将触发安装运行序列:先在本机寻找该镜像,如果本机找不到就去Docker Hub下载这个镜像,并把镜像加载到容器中,然后启动该程序,这样容器就运行起来了。其他系统可以参考官网文档安装。
Docker示例项目
现在开始使用Docker构建应用程序,从Docker应用程序的层次结构底部开始,应用程序是一个容器,在这个层次上面是一个服务,它定义了容器在运行时的行为方式,最后,在顶层是堆栈,定义了所有服务的交互。
在过去,如果要开始编写一个Python应用程序,第一步就是在机器上安装一个Python运行库,但是,这会造成应用程序只能在您的机器运行。使用Docker可以将一个可移植的Python运行时环境作为一个镜像来获取,无需安装。然后构建可以将基础Python镜像与应用程序代码一起包括在内,确保您的应用程序、依赖项和运行时环境都一起移动。
这些可移植的镜像是由一个叫做Dockerfile
的东西来定义的。
用Dockerfile定义容器
Dockerfile
将定义容器内的环境中发生了什么,访问像网络接口和磁盘驱动器这样的资源是在这个环境中虚拟化的,这个环境与系统的其他部分是隔离的,所以必须将端口映射到外部世界,并具体说明想复制哪些文件到那个环境。完成这些工作后,这个Dockerfile
中定义的应用程序在任何地方运行都将有完全相同的表现。
创建一个新的目录,在新目录下创建一个名为Dockerfile
的文件,将以下内容复制并粘贴到该文件中保存。
# 使用官方的Python运行时环境作为父镜像 FROM python:2.7-slim # 将工作目录设置为“/app” WORKDIR /app # 将当前目录内容复制到“/app”的容器中 ADD . /app # 安装requirements.txt中指定的所有需要的软件包 RUN pip install --trusted-host pypi.python.org -r requirements.txt # 将端口80映射到外部世界 EXPOSE 80 # 定义环境变量 ENV NAME World # 容器启动时运行app.py CMD ["python", "app.py"]
创建并编辑应用程序
创建requirements.txt文件,并放在与Dockerfile
相同的目录下。
Flask Redis
创建app.py文件,并放在与Dockerfile
相同的目录下。
from flask import Flask from redis import Redis, RedisError import os import socket # 连接到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)
很简单的就完成了应用程序部分,当Dockerfile
被内置到镜像中时,由于Dockerfile
的ADD
命令,app.py和requirements.txt将会出现,并且app.py的输出将可以通过HTTP访问,这要归功于EXPOSE
命令。
构建应用程序
打开一个命令行终端,确保仍然在新目录的顶层,运行构建命令,这会创建一个Docker镜像。
$ docker build -t friendlyhello .
构建的镜像可以在本地Docker镜像注册表中看到。
$ docker images
运行应用程序
运行应用程序,使用-p将机器的端口4000映射到容器的已发布端口80。
$ docker run -p 4000:80 friendlyhello
现在应该看到一条消息,Python在http://0.0.0.0:80上提供应用程序,但是这个消息来自容器内部,它并不知道该容器的端口80映射到4000,因此正确的URL为http://localhost:4000。
也可以在命令行终端中使用curl命令来查看相同的内容。
$ curl http://localhost:4000
这个4000:80的端口重映射是为了演示Dockerfile
中的EXPOSE
与使用docker run -p
发布的内容之间的区别。在后面的步骤中,会将主机上的端口80映射到容器中的端口80,并使用http://localhost。
在Mac下,在命令行终端中点击CTRL + C即可退出。而在Windows系统下,CTRL + C不会停止容器。因此,首先键入CTRL + C来获取提示,或打开另一个Shell,然后键入docker container ls
列出正在运行的容器,接着是docker container stop <Container NAME或ID>
以停止容器。否则,当尝试在下一步中重新运行容器时,将从守护程序中收到错误响应。
现在以分离模式在后台运行应用程序。
$ docker run -d -p 4000:80 friendlyhello
容器正在后台运行,您还可以使用docker container ls查看CONTAINER ID。
$ docker container ls
可以看到CONTAINER ID与http://localhost:4000上的内容匹配。现在使用docker container stop
来结束进程。
$ docker container stop 9dfc794cdc52
分享镜像
为了演示镜像的可移植性,上传我们构建的镜像,并在其他地方运行它,毕竟,将容器部署到生产环境中时,需要学习如何使用注册表。
一个注册表是一个存储库的集合,一个存储库是一个镜像集合,有点像GitHub存储库,除了代码已经建立。注册表上的帐户可以创建许多存储库。Docker CLI默认使用Docker的公共注册表。在这里使用Docker的公共注册表,是因为它免费,并且是预配置的,但是有许多公共选项可供选择,甚至可以使用Docker Trusted Registry设置您自己的私有注册表。
使用Docker ID登录
如果没有Docker帐户,请在Docker官网注册一个。然后,登录到本地机器上的Docker公共注册表。
$ docker login
标记镜像
将本地镜像与注册表中的存储库相关联的符号是username/repository:tag
,该tag是可选的,但推荐使用,因为这是注册管理机构为Docker镜像提供版本的机制。给存储库标记一个有意义的名字,比如get-started:part2
,这会将镜像放入启动存储库,并将其标记为part2。
现在,把它们放在一起来标记镜像,使用用户名、存储库、标签名称运行docker tag image,以便镜像将上传到想要的目的地。
# 语法 $ docker tag image username/repository:tag # 示例 $ docker tag friendlyhello john/get-started:part2
运行docker images
或docker image ls
以查看新标记的镜像。
发布镜像
将您标记的镜像上传到存储库。
# 语法 $ docker push username/repository:tag # 示例 $ docker push john/get-started:part2
一旦完成,这个上传的结果是公开的,如果你登录到Docker Hub ,你将会看到那个新的镜像和它的pull
命令。
从远程存储库中提取并运行镜像
从现在开始,可以使用docker run并使用此命令在任何机器上运行您的应用程序。
# 语法 $ docker run -p 4000:80 username/repository:tag # 示例 $ docker run -p 4000:80 john/get-started:part2
如果镜像在机器上本地不可用,Docker将从存储库中取出。无论docker run
在哪里,它都会将您的镜像、Python以及所有依赖项从requirements.txt中提取出来,并运行您的代码。它们被打包在行李箱中一起旅行,主机不需要安装任何东西,除了Docker环境来运行它。
希望本文所述对大家docker容器的使用有所帮助。
Docker,安装,应用
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]