Docker 入门(Mac环境)- part 2 容器(container)
part-2 容器(container)
简介
Docker架构有三个层面,从高到低如下:
- stack(栈)
- services(服务)
- containers(容器)
现在接触的这些在容器这一层里,类似于底层的基础;服务的话就是在此基础上实现了哪些功能/服务;更高层的栈则是定义了这些服务内在的一些交互
docker的优势
以往开发一个东西,在本机开发后还要去服务器上去部署,就涉及到各种环境的配置,各种依赖软件的安装,很麻烦;docker相当于提供了一个类集装箱的服务,把这些东西都打包好,提供标准的服务,你把集装箱搬到这个船上,那个码头上,他都可以放在那里,提供开发好的服务;要把这些东西打包,当然就需要配置,配置文件就称之为 dockerfile;也就是说:dockerfile决定了容器中的环境,而这个环境是与系统环境隔离的。
docker示例
- 某文件夹下创建一个Dockerfile文件,内容如下:
# Use an official Python runtime as a parent 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 --trusted-host pypi.python.org -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文件,内容分别是
Flask
Redis
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)
- 编译(build),
docker build -t friendlyhello .
- 运行app,
docker run -p 4000:80 friendlyhello
- 查看
docker image ls
,可以看到friendlyhello这个image - 浏览器访问 localhost:4000,可以看到我们用flask写的这个app
- 可以使用后台模式启动这个app,命令是
docker run -d -p 4000:80 friendlyhello
- 后台模式启动的app可以使用
docker container stop container_id
来关闭 - 查看docker正在运行的容器,
docker ps
, 和Linux的ps
一样,也可以加上-a
的参数来查看全部
分享docker 镜像
git对应有github,docker对应有dockerhub;先注册一个dockerhub账号,然后就可以分享了;
docker login
登陆账号docker tag image
来打标签,类似于docker tag friendlyhello wang/get-started:part2
docker push username/repository:tag
,来push镜像- 拉取然后运行镜像
docker run -p 4000:80 username/repository:tag
Docker 入门(Mac环境)- part 2 容器(container)的更多相关文章
- Docker入门(三):容器(Containers)
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- 使用docker-sync解决docker for mac 启动的虚拟容器程序运行缓慢的问题
背景: 新入职的公司有个非常OG的大项目,为了避免新同学重复造轮子,有哥们已经把项目需要的所有打好了一个镜像供我们启动docker. 初次启动docker 使用的命令如下: docker run -i ...
- Docker入门之六端口映射与容器互联
一.端口映射 在之前的博客搭建私有仓库时用到这样一句:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry来r ...
- docker (二):容器container
docker使用入门(二):容器container docker层次结构可以分为三层,从下往上是:容器(container).服务(services).堆栈(stack),其中services定义了容 ...
- docker for mac
MacOS上通过docker部署 docker环境准备 1.访问这里安装好docker,需要注册账号才能下载dmg安装包:https://hub.docker.com/editions/communi ...
- Docker入门 第一课 --.Net Core 使用Docker全程记录
微服务架构无疑是当前最火热的开发架构,而Docker作为微服务架构的首选工具,是我们必须要了解掌握的. 我通过一天的时间,网上查文档,了解基础概念,安装Docker,试验Docker命令,通过Dock ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- Docker入门系列1:简介
可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...
- Centos7——docker入门(笔记)
docker 入门(笔记) 一.Docker是什么? 官方原话: Docker provides a way to run applications securely isolated in a co ...
- Docker入门 .Net Core 使用Docker全程记录
https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录 微服务架构无疑是当前最火热的 ...
随机推荐
- 一个使用Servlet文件实现文件下载的实例
一个使用Servlet文件实现文件下载的实例 (可以扩充本实例实现:对用户隐藏他要下载文件的路径,或者在下载文件时要做一些其他的工作,如检查用户有没有下载此文件的权限等) 了解在Servlet中如何控 ...
- 关于easyui的问答(来自百度问答)
求教大神,jquery easyui中$('#table').datagrid('options').queryParams是什么意思 https://zhidao.baidu.com/questio ...
- 【RS】Modeling User Exposure in Recommendation - 在推荐中建模用户的暴露程度
[论文标题]Modeling User Exposure in Recommendation (2016-WWW) [论文作者]Dawen Liang,Laurent Charlin,James Mc ...
- 树莓派进阶之路 (010) - 树莓派raspi-config配置(转)
经过前面两步我们的树莓派已经正常的工作起来了,但是在真正用它开发之前还需要进行一些列的配置以及软件的安装,这样开发起来才会得心应手,下面我们介绍一下常用的软件和服务 1.配置选项: 树莓派第一次使用的 ...
- CMFCPropertyGridProperty用法
MFCPropertyGridCtrl 是VC 2008 pack中的控件类. CMFCPropertyGridProperty这个控件类中的属性值类类. 针对修改属性后,对属性值改变的消息处理: 方 ...
- HDU 1258 Sum It Up (DFS)
Sum It Up Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- POJ 2391 Ombrophobic Bovines (Floyd + Dinic +二分)
Ombrophobic Bovines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11651 Accepted: 2 ...
- Redis 集群_主从配置_哨兵模式
首先:slaveof 可以在[从]服务器启动一个service服务,直接将[从]服务器定义为[从Redis] redis-server --slaveof <master-ip> < ...
- C#多线程JOIN方法初探
[说明:刚接触多线程时,弄不明白Join()的作用,查阅了三本书,都不明不白.后来经过自己的一番试验,终于弄清了Join()的本质.大家看看我这种写法是否易懂,是否真的写出了Join()的本质,多提宝 ...
- hadoop相关内容
数据库导出到hadoop http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1212liuqy/ http://www. ...