part-2 容器(container)

简介

Docker架构有三个层面,从高到低如下:

  • stack(栈)
  • services(服务)
  • containers(容器)

现在接触的这些在容器这一层里,类似于底层的基础;服务的话就是在此基础上实现了哪些功能/服务;更高层的栈则是定义了这些服务内在的一些交互

docker的优势

以往开发一个东西,在本机开发后还要去服务器上去部署,就涉及到各种环境的配置,各种依赖软件的安装,很麻烦;docker相当于提供了一个类集装箱的服务,把这些东西都打包好,提供标准的服务,你把集装箱搬到这个船上,那个码头上,他都可以放在那里,提供开发好的服务;要把这些东西打包,当然就需要配置,配置文件就称之为 dockerfile;也就是说:dockerfile决定了容器中的环境,而这个环境是与系统环境隔离的。

docker示例

  1. 某文件夹下创建一个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"]
  1. 创建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)
  1. 编译(build),docker build -t friendlyhello .
  2. 运行app,docker run -p 4000:80 friendlyhello
  3. 查看 docker image ls,可以看到friendlyhello这个image
  4. 浏览器访问 localhost:4000,可以看到我们用flask写的这个app
  5. 可以使用后台模式启动这个app,命令是docker run -d -p 4000:80 friendlyhello
  6. 后台模式启动的app可以使用 docker container stop container_id 来关闭
  7. 查看docker正在运行的容器,docker ps, 和Linux的ps 一样,也可以加上-a的参数来查看全部

分享docker 镜像

git对应有github,docker对应有dockerhub;先注册一个dockerhub账号,然后就可以分享了;

  1. docker login登陆账号
  2. docker tag image来打标签,类似于docker tag friendlyhello wang/get-started:part2
  3. docker push username/repository:tag,来push镜像
  4. 拉取然后运行镜像 docker run -p 4000:80 username/repository:tag

Docker 入门(Mac环境)- part 2 容器(container)的更多相关文章

  1. Docker入门(三):容器(Containers)

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  2. 使用docker-sync解决docker for mac 启动的虚拟容器程序运行缓慢的问题

    背景: 新入职的公司有个非常OG的大项目,为了避免新同学重复造轮子,有哥们已经把项目需要的所有打好了一个镜像供我们启动docker. 初次启动docker 使用的命令如下: docker run -i ...

  3. Docker入门之六端口映射与容器互联

    一.端口映射 在之前的博客搭建私有仓库时用到这样一句:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry来r ...

  4. docker (二):容器container

    docker使用入门(二):容器container docker层次结构可以分为三层,从下往上是:容器(container).服务(services).堆栈(stack),其中services定义了容 ...

  5. docker for mac

    MacOS上通过docker部署 docker环境准备 1.访问这里安装好docker,需要注册账号才能下载dmg安装包:https://hub.docker.com/editions/communi ...

  6. Docker入门 第一课 --.Net Core 使用Docker全程记录

    微服务架构无疑是当前最火热的开发架构,而Docker作为微服务架构的首选工具,是我们必须要了解掌握的. 我通过一天的时间,网上查文档,了解基础概念,安装Docker,试验Docker命令,通过Dock ...

  7. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  8. Docker入门系列1:简介

    可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...

  9. Centos7——docker入门(笔记)

    docker 入门(笔记) 一.Docker是什么? 官方原话: Docker provides a way to run applications securely isolated in a co ...

  10. Docker入门 .Net Core 使用Docker全程记录

    https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录   微服务架构无疑是当前最火热的 ...

随机推荐

  1. 树莓派进阶之路 (021) - 3.2inch RPi LCD (B)

    参考文档:http://www.waveshare.net/wiki/3.2inch_RPi_LCD_(B) 产品特点 320x240分辨率 电阻式触摸控制 兼容并可直接插入任何版本树莓派 提供Ras ...

  2. CSS中详解height属性

    目录结构: contents structure [+] hight属性值类型一览表 height的%的使用 定义 实例 需要注意的 参考文章 hight属性值类型一览表 value describt ...

  3. Docker 构建Hadoop环境

    参考如下文章: Docker安装Hadoop Docker在本地搭建Hadoop分布式集群 Docker快速搭建Hadoop测试环境 从0开始用docker搭建 hadoop分布式环境 Docker- ...

  4. Swift 类

    1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...

  5. numpy中的np.random.mtrand.RandomState

    1 RandomState 的应用场景概述 在训练神经网络时,苦于没有数据,此时numpy为我们提供了 “生产” 数据集的一种方式. 例如在搭建神经网络(一)中的 4.3 准备数据集 章节中就是采用n ...

  6. 12C的审计模式

    1.Mixed Auditing Policy 混合审计模式支持新的审计引擎和老的审计引擎一起工作数据库升级后,已有的审计设置不会受到影响.但是官方建议迁移到统一审计模式.数据库创建后,默认是使用混合 ...

  7. Android Framework中的线程Thread及它的threadLoop方法

    当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许很多多的Thread.它们普遍的特点就是有一个threadLoop方法.依照字面的意思应该是这个线程能够循环 ...

  8. keras 类似问题解决:model找不到,或者无法下载

    Applications Keras Applications are deep learning models that are made available alongside pre-train ...

  9. [转]在windows上实现多个java jdk的共存解决办法

    问题背景 公司项目中应用到的jdk环境为1.6,最近在家学习IntelliJ IDEA中sdk多环境配置时,想安装Jdk1.8,作为学习基础.那么问题来了,公司项目扩展不支持jdk1.8,为了既能满足 ...

  10. [转]如何在 Git 里撤销(几乎)任何操作

    任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力.在 Git 里,“撤销” 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点 ...