3.0.4 认识Docker容器

Linux容器的核心实现原理:
Linux Namespace隔离,Linux Cgroup是的限制,rootfs文件系统

实际上Docker on Mac 以及Windows Docker (Hyper - V 实现), 是基于虚拟化技术实现的, 与Linux容器完全不同

Docker 提供Dockerfile文件来制作容器镜像:

# 使用官方提供的 Python 开发镜像作为基础镜像
FROM python:2.7-slim

# 将工作目录切换为 /app
WORKDIR /app

# 将当前目录下的所有内容复制到 /app 下
ADD . /app

# 使用 pip 命令安装这个应用所需要的依赖
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 允许外界访问容器的 80 端口
EXPOSE 80

# 设置环境变量
ENV NAME World

# 设置容器进程为:python app.py,即:这个 Python 应用的启动命令
CMD ["python", "app.py"]

Dockerfile的设计思想,是使用一些标准的原语,描述我们所构建的Docker镜像。并且这些原语,都是按顺序处理的。

Docker会为你提供一个隐含的ENTRYPOINT,默认地址为: /bin/sh -c
这里简称Docker容器的启动进程为ENTRYPOINT,

Dockerfile的每个原语执行后,都会生成一个对应的镜像层。

$ docker run -p 4000:80 helloworld
//如果没有在Dockerfile里面指定CMD,我们还有把进程的启动命令加在后面
$ docker run -p 4000:80 helloworld python app.py

这里我们把容器内80端口映射在宿主机的4000端口.
从宿主机的命令行窗口

//可以使用 docker exec 命令进入到了容器, 4ddf4638572d  为containerID
docker exec -it 4ddf4638572d /bin/sh

Linux Namespace创建的隔离空间虽然看不见摸不着,但一个进程的Namespace信息在宿主机上是确实存在的,
可以通过宿主机的proc文件下的PID号,来查看该进程下的所有Namespace对应的文件。

从而,一个进程,可以通过加入到某个进程已有的Namespace当中,从而达到进入这个进程所在容器的目的,这就是
docker exec的实现原理。

Docker Volume机制

允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作。

你可能感兴趣的:(3.0.4 认识Docker容器)