共计 5455 个字符,预计需要花费 14 分钟才能阅读完成。
人生有涯,学海无涯
前言
现在 Docker 的应用曾经十分广泛,特地在一线互联网公司。应用 Docker 技术能够帮忙企业疾速程度扩大服务,从而达到弹性部署业务的能力。在云服务概念衰亡之后,Docker 的应用场景和范畴进一步倒退,现在在微服务架构越来越风行的状况下,微服务 +Docker 的完满组合,更加不便微服务架构运维部署落地。
在理解 Docker 之前咱们先思考几个问题:1、Docker 是什么?2、为什么要应用 Docker,它有什么劣势?
什么是 Docker?
Docker 属于 Linux 容器的一种封装,提供简略易用的容器应用接口。它是目前最风行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件外面。运行这个文件,就会生成一个虚构容器。程序在这个虚构容器里运行,就如同在实在的物理机上运行一样。有了 Docker,就不必放心环境问题。
总体来说,Docker 的接口相当简略,用户能够不便地创立和应用容器,把本人的利用放入容器。容器还能够进行版本治理、复制、分享、批改,就像治理一般的代码一样。
为什么要应用 Docker
1、更疾速的交付和部署
对开发和运维(devop)人员来说,最心愿的就是一次创立或配置,能够在任意中央失常运行。
开发者能够应用一个规范的镜像来构建一套开发容器,开发实现之后,运维人员能够间接应用这个容器来部署代码。Docker 能够疾速创立容器,疾速迭代应用程序,并让整个过程全程可见,使团队中的其余成员更容易了解应用程序是如何创立和工作的。Docker 容器很轻很快!容器的启动工夫是秒级的,大量地节约开发、测试、部署的工夫。
2、更高效的虚拟化
Docker 容器的运行不须要额定的 hypervisor 反对,它是内核级的虚拟化,因而能够实现更高的性能和效率。
3、更轻松的迁徙和扩大
Docker 容器简直能够在任意的平台上运行,包含物理机、虚拟机、私有云、公有云、个人电脑、服务器等。这种兼容性能够让用户把一个应用程序从一个平台间接迁徙到另外一个。
4、更简略的治理
应用 Docker,只须要小小的批改,就能够代替以往大量的更新工作。所有的批改都以增量的形式被散发和更新,从而实现自动化并且高效的治理。
Docker vs VM
从下图能够看出,VM 是一个运行在宿主机之上的残缺的操作系统,VM 运行本身操作系统会占用较多的 CPU、内存、硬盘资源。Docker 不同于 VM,只蕴含应用程序以及依赖库,基于 libcontainer 运行在宿主机上,并处于一个隔离的环境中,这使得 Docker 更加轻量高效,启动容器只需几秒钟之内实现。因为 Docker 轻量、资源占用少,使得 Docker 能够轻易的利用到构建标准化的利用中。但 Docker 目前还不够欠缺,比方隔离成果不如 VM,共享宿主机操作系统的一些根底库等;网络配置性能绝对简略,次要以桥接形式为主;查看日志也不够不便灵便。
Docker 在容器的根底上,进行了进一步的封装,从文件系统、网络互联到过程隔离等等,极大的简化了容器的创立和保护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
作为一种新兴的虚拟化形式,Docker 跟传统的虚拟化形式相比具备泛滥的劣势。Docker 容器的启动能够在秒级实现,这相比传统的虚拟机形式要快得多;Docker 对系统资源的利用率很高,一台主机上能够同时运行数千个 Docker 容器。
相干概念
Docker 是 CS 架构,次要有两个概念:
- Docker daemon: 运行在宿主机上,Docker 守护过程,用户通过 Docker client(Docker 命令) 与 Docker daemon 交互
- Docker client: Docker 命令行工具,是用户应用 Docker 的次要形式,Docker client 与 Docker daemon 通信并将后果返回给用户,Docker client 也能够通过 socket 或者 RESTful api 拜访近程的 Docker daemon
理解了 Docker 的组成,再来理解一下 Docker 的三个次要概念:
- Docker image:镜像是只读的,镜像中蕴含有须要运行的文件。镜像用来创立 container,一个镜像能够运行多个 container;镜像能够通过 Dockerfile 创立,也能够从 Docker hub/registry 上下载。
- Docker container:容器是 Docker 的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保障容器中的程序运行在一个绝对平安的环境中。
- Docker hub/registry: 共享和治理 Docker 镜像,用户能够上传或者下载下面的镜像,官网地址为
https://registry.hub.docker.com/
,也能够搭建本人公有的 Docker registry。
镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的中央。
Docker 装置
倡议在 linux 环境下装置 Docker,window 环境搭建比较复杂且容易出错,应用 Centos7+yum 来装置 Docker 环境很不便。
这里我是购买的阿里云服务器,几百块钱就搞定了,新用户有很大的折扣。
首先查看服务器的版本以及配置:
[root@jiangwang /]# uname -r
3.10.0-1062.18.1.el7.x86_64
[root@jiangwang /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、须要的安装包
yum install -y yum-utils
3、设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像仓库(举荐)[root@jiangwang /]# yum-config-manager \
> --add-repo \
> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
4、更新 yum 软件包索引
yum makecache fast
5、装置 docker docker-ce 社区版 ee 企业版
yum install docker-ce docker-ce-cli containerd.io
6、启动 docker
systemctl start docker
7、应用 docker version
[root@jiangwang /]# docker version
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:33:55 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:32:17 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
8、hello-world
[root@jiangwang /]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:89b647c604b2a436fc3aa56ab1ec515c26b085ac0c15b0d105bc475be15738fb
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
9、查看下载的镜像
[root@jiangwang /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 3 days ago 13.3kB
10、卸载 docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
阿里云镜像加速器
1、登录阿里云,找到容器镜像服务
2、找到镜像加速器
3、配置应用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://0uf1zwdk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
参考
Docker — 从入门到实际
Docker 系列之一:入门介绍
Docker 入门教程