Docker 入门(Mac环境)- part 2 容器(container)
Posted wswang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 入门(Mac环境)- part 4 swarms