Docker基本介绍

写作日期: 2020-01-21 

1.容器发展道路

在2010年前后,大家经常会使用VMWare虚拟机软件,在自己的Windows主机上虚拟出一个Linux系统来学习、使用Linux操作系统。VMWare是一个伟大的技术,但是它也的确存在不足。不足之处列举如下:

  1. 依赖专用的操作系统,OS会占用额外的CPU、RAM和存储。
  2. 操作系统本身需要licence、补丁和监控,这样就增加了运营成本。
  3. 虚拟机的启动比较慢、可移植性差...

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。

在任务栏点击 Docker for mac 应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。
Mac版Docker安装了Docker引擎(客户端及服务端守护程序)、Docker Compose、Docker machine以及Notary命令行。
 
Docker安装成功后,可以尝试一些常见的命令(包括验证其他安装的组件):
(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
View Code

 每个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
View Code

 

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
View Code

 

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
View Code

 如上代码所示,在pull之后,docker image ls展示的列表已经不是空的了。

 

镜像仓库服务包含多个镜像仓库,同时一个镜像仓库中可以包含多个镜像。拉取镜像时,需要指定镜像的名字和标签,语法如下:

docker image pull <repository>:<tag> 

如果命令没有指定<tag>,Docker会假设用户希望拉取tag为“latest”的镜像。

 

 

 

posted @ 2020-01-22 09:50  葛洪俊  阅读(383)  评论(0)    收藏  举报