Docker概述
Docker为什么会出现?
将项目打包并带上部署环境(镜像),上传到Docker 仓库,下载镜像,运行即可。开发打包部署上线一套流程做完。
Docker思想来自集装箱
JRE--多个应用(端口冲突)--原来都是交叉的
隔离:Docker核心思想!打包装箱!每个箱子都是相互隔离的。
Docker通过隔离,将服务器利用到极致。
Docker 历史
2010年,几个搞IT的年轻人,在美国成立了一家公司dotCloud
做一些pass云计算服务,Linux相关的容器技术,并且将自己的技术(容器化技术)命名就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意,dotCloud就活不下去!
2013年,Docker开源
越来越多的人发现Docker的优点,火了,Docker每个月更新一个版本!
2014年9月,Docker1.0发布!
Docker为什么这么火?十分的轻巧!
在容器技术出现之前,我们都是使用虚拟机技术!
虚拟机,在windows中装一个VMware,通过这个软件我们可以虚拟出来一台或多台电脑!十分笨重!
虚拟机属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
vm中加载linux centos原生镜像(一个电脑)运行多个应用,需要开启多个电脑,一个电脑几个G
docker 镜像中包含的最核心的环境小于4m,加上jdk mysql十分小巧,运行镜像就可以了。秒级启动。
Docker是基于Go语言开发的。
Docker能干什么
之前的虚拟机技术
虚拟机技术缺点:
- 占用资源十分多
- 冗余步骤多
-
启动很慢
容器化技术
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内核上,容器没有自己的内核,也没有虚拟硬件。
- 每个容器是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发、运维)
更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一件运行
更便捷的升级和扩缩容
使用了docker之后,部署应用就和搭积木一样,项目打包为一个镜像
更简单的系统运维
容器化之后,我们的开发,测试环境高度一致
Docker基本组成
Docker镜像(image)
好比一个模板,可以通过这个模板来创建容器服务,例如:
Tomcat镜像==》run==》tomcat01容器(可提供服务器)。
通过这个镜像可以创建多个容器(最终服务器或者项目运行就是在容器中的)
容器(container)
Docker利用容器技术,独立运行一个后者一组应用,通过镜像来创建的。
启动 停止 删除 基本命令
目前可以把这个容器理解为一个建议的linux系统
仓库(repository)
仓库就是放镜像的地方
仓库分为公有仓库和私有仓库!
DockerHub(国外的)
阿里云也有容器服务器(配置了镜像加速)
Docker安装
环境准备
1.Linux基础
2.Centos7
3.Xshell(MobaXterm)连接服务器
环境查看
# 系统内核是3.10以上
[root@localhost /]# uname -r
3.10.0-1127.el7.x86_64
# 系统版本
[root@localhost /]# 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"
- 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.需要的安装包
安装 Docker Engine-Community
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用以下命令来设置稳定的仓库。
使用官方源地址(比较慢)
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:
阿里云
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:
$ sudo yum install docker-ce docker-ce-cli containerd.io
3.启动docker
[root@localhost /]# systemctl start docker
- 使用docker 查看是否安装成功
[root@localhost /]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Experimental: false
- 运行hello-world
[root@localhost /]# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for docker.io/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/
提示 Hello form Docker,证明成功运行
6.查看hello-world 镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 4bb46517cac3 12 days ago 133 MB
docker.io/hello-world latest bf756fb1ae65 7 months ago 13.3 kB
卸载docker
1、查询docker安装过的包:
[root@localhost /]# yum list installed | grep docker
docker.x86_64 2:1.13.1-162.git64e9980.el7.centos @extras
docker-client.x86_64 2:1.13.1-162.git64e9980.el7.centos @extras
docker-common.x86_64 2:1.13.1-162.git64e9980.el7.centos @extras
2、删除安装包:
[root@localhost /]# yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
3、删除镜像/容器等
[root@localhost /]# rm -rf /var/lib/docker
阿里云镜像加速
1.将docker镜像源修改为国内的:
在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建):
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
2.服务重启:
[root@localhost /]# systemctl daemon-reload
[root@localhost /]# systemctl restart docker
回顾hello-world
run的运行流程
底层原理
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer 接收到Docker-Client的指令,就会执行这个命令。
** Docker为什么比VM快**
1.Docker有着比虚拟机更少的抽象层
2.Docker利用宿主机的内核,VM则组要Guest OS。