Docker 是什么
Docker 是使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
Docker 的优势
- 更高效的利用系统资源
- 更快的启动时间
- 一致的运行环境
- 易部署
- 易扩展
- 镜像构建过程透明
Docker 的用途
个人
- 提供一次性,一致性的环境,用于测试或是构建
- 代替虚拟机在一台机器上搭建多个微服务
Docker 基本概念
镜像
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
macOS 安装 Docker
https://docs.docker.com/docker-for-mac/install/
常用命令
# 拉取镜像
docker pull
# 查看本地镜像
docker images
# 查看容器
docker ps
# 删除本地镜像
docker image rm
# 启动容器
docker run
# 清理所有处于终止状态的容器
docker container prune
Demo
拉取ubuntu镜像
寻找 docker images 上 docker hub
docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
99ad4e3ced4d: Pull complete
ec5a723f4e2a: Pull complete
2a175e11567c: Pull complete
8d26426e95e0: Pull complete
46e451596b7c: Pull complete
Digest: sha256:ed49036f63459d6e5ed6c0f238f5e94c3a0c70d24727c793c48fded60f70aa96
Status: Downloaded newer image for ubuntu:14.04
查看本地镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 a35e70164dfb 12 days ago 222MB
构建镜像
Docker commit
黑箱镜像,不常用,不推荐。
Docker file
touch Dockerfile
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y python \
&& apt-get install -y python-pip \
&& pip install flask
COPY ./hello.py /app/
CMD ["python", "/app/hello.py"]
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello docker!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
docker build -t demo:v1 ./
启动容器
docker run -p 5000:5000 demo:v1