Docker基本介绍
写作日期: 2020-01-21
1.容器发展道路
在2010年前后,大家经常会使用VMWare虚拟机软件,在自己的Windows主机上虚拟出一个Linux系统来学习、使用Linux操作系统。VMWare是一个伟大的技术,但是它也的确存在不足。不足之处列举如下:
- 依赖专用的操作系统,OS会占用额外的CPU、RAM和存储。
- 操作系统本身需要licence、补丁和监控,这样就增加了运营成本。
- 虚拟机的启动比较慢、可移植性差...
Google一直采用容器技术解决虚拟机的问题,容器与虚拟机的主要区别在于,容器的运行不会独占操作系统。现代容器技术起源于Linux。容器技术比较复杂,难以实际应用。Docker的面世使得容器开始被广泛使用,Docker使容器变得简单。
运行中的容器共享宿主机的内核。Kubernetes是Google的一个开源项目,并且开源后迅速成为容器编排领域的领头羊,Kubernetes是保证容器部署和运行的软件体系的重要组成部分。
2.Docker简介
Docker是运行在Linux和Windows上的软件,用于创建、管理和编排容器。Docker是开源项目Moby的一部分,Docker公司维护整个Moby项目,并同时提供商业版Docker。
一般情况下,Docker是指Docker引擎。Docker引擎是运行容器的核心容器运行时。Docker引擎包含企业版(EE)和社区版(CE)。Docker公司的核心哲学是“Batteries included but removable”,意思是许多Docker内置的组件都可以替换为第三方组件。
OCI(The Open Container Initiative, OCI) 开放容器计划,是一个旨在对容器基础架构中的基础组件进行标准化的管理委员会。OCI已经发布了两份规范(标准):镜像规范和运行时规范。OCI在Linux基金会的支持下运作,Docker公司和CoreOS公司都是主要贡献者。
3.安装Docker
Mac版Docker是Docker公司基于社区版的Docker提供的一个产品。Mac版Docker底层是基于Linux VM运行的,所以说Mac版Docker只能运行基于Linux的Docker容器(大部分容器实际都是基于Linux的)。
Mac版Docker安装方法:https://www.runoob.com/docker/macos-docker-install.html
安装完成后,可以验证下是否安装成功:
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
(base) KF00005167:~ natty$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE (base) KF00005167:~ natty$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES (base) KF00005167:~ natty$ docker version Client: Docker Engine - Community Version: 18.09.1 API version: 1.39 Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:33:12 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.1 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:41:49 2019 OS/Arch: linux/amd64 Experimental: false (base) KF00005167:~ natty$ docker --version Docker version 18.09.1, build 4c52b90 (base) KF00005167:~ natty$ docker-compose --version docker-compose version 1.23.2, build 1110ad01 (base) KF00005167:~ natty$ docker-machine --version docker-machine version 0.16.1, build cce350d7 (base) KF00005167:~ natty$ notary version notary Version: 0.6.1 Git commit: d6e1431f
每个Docker容器都有一个本地存储空间,用于保存层叠的镜像层以及挂载的容器文件系统。
$ docker system info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.09.1 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce runc version: 96ec2177ae841256168fcf76954f7177af9446eb init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.9.125-linuxkit Operating System: Docker for Mac OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 1.952GiB Name: linuxkit-025000000001 ID: EJJ4:3OCZ:CKXY:SC67:AKNR:JXRE:XD3Y:ZICE:K4L2:C6AK:KJUQ:GU4H Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 24 Goroutines: 50 System Time: 2020-02-12T07:23:08.557194679Z EventsListeners: 2 HTTP Proxy: gateway.docker.internal:3128 HTTPS Proxy: gateway.docker.internal:3129 Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: http://hub-mirror.c.163.com/ Live Restore Enabled: false Product License: Community Engine
4.Docker概览
在深入介绍Docker前,本部分概述一下Docker的知识,有个概览。
安装Docker时,会涉及2个主要组件:Docker客户端和Docker daemon(也称为服务端或者docker引擎)。例如:下边命令查看了我安装的docker(包含Client和Server):
$ docker version Client: Docker Engine - Community Version: 18.09.1 API version: 1.39 Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:33:12 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.1 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:41:49 2019 OS/Arch: linux/amd64 Experimental: false
5.Docker镜像
Docker镜像就像停止运行的容器(有一个比喻很贴切,Docker镜像就像是java中的类,而容器就像从这个类实例化的对象)。安装完Docker后,本机并没有任何镜像,需要从镜像仓库中拉取镜像(最常见的镜像仓库服务器是Docker Hub)。使用一个镜像可以启动一个或者多个容器。
相比于VMware,镜像一般都很小。并且镜像是一种构建时结构,而容器是一种运行时结构。
安装完Docker时,默认本机是没有镜像的,需要自行拉取,下面做了拉取的实验:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE $ docker pull ubuntu:latest latest: Pulling from library/ubuntu 5c939e3a4d10: Downloading c63719cdbe7a: Downloading 19a861ea6baf: Download complete 651c9d2d6c4f: Downloading latest: Pulling from library/ubuntu 5c939e3a4d10: Pull complete c63719cdbe7a: Pull complete 19a861ea6baf: Pull complete 651c9d2d6c4f: Pull complete Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110 $ docker pull alpine:latest latest: Pulling from library/alpine c9b1b535fdd9: Pull complete Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest e7d92cdc71fe 4 weeks ago 5.59MB ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
如上代码所示,在pull之后,docker image ls展示的列表已经不是空的了。
镜像仓库服务包含多个镜像仓库,同时一个镜像仓库中可以包含多个镜像。拉取镜像时,需要指定镜像的名字和标签,语法如下:
docker image pull <repository>:<tag>
如果命令没有指定<tag>,Docker会假设用户希望拉取tag为“latest”的镜像。

浙公网安备 33010602011771号