1.docker简介
1.很早的部署:
- 部署非常慢:准备物理服务器,安装操作系统,配置系统环境
- 成本高:购买服务器
- 资源浪费:cpu和硬盘根本用不完
- 难以迁移和扩展:迁移需要从新准备服务器,搭建环境。
- 可能会被限定硬件厂商
虚拟化技术:
1.虚拟化的优点
- 资源池--一个物理机的资源分配到了不同的虚拟机里。
- 很容易扩展--加物理机器或者加虚拟机
- 很容易云化--亚马逊AWS,阿里云等
2.虚拟化的局限性
- 每当一个虚拟机都是一个完整的操作系统,要给其分配资源,而当虚拟机数量增多时,操作系统本身想好的资源势必会增多
容器解决了什么问题:
- 解决了开发和运维之间的矛盾:开发环境和运维环境的不一致使得两者撕逼
- 减少运维工程师的工作:在集群部署的时候,不需要在每台物理机器上安装各个软件,jdk,MySQL,tomcat,redis等等,而是通过对整体打包成镜像的方式,通过docker容器将环境+代码整体迁移过来。
什么是容器:
- 对软件和其依赖的标准化打包
- 应用之间的相互隔离,每个容器相互隔离,耦合度低,容器之间的进程不会相互影响
- 共享同一个OS Kernel
- 可以运行在很多主流操作系统上
三大要素:
- 镜像(image):一个模板
- 容器(container):就是一个模板的实例
- 仓库(repository)
docker利用容器运行一个或者一组应用,容器是镜像创建的实例。它可以被启动,开始,停止,删除。每个容器都是相互隔离的,可以吧容器看成是一个简易版的linux系统。
比较:
- 传统的虚拟化技术是对硬件进行分配,在上面运行一个完整的系统,再在该系统上运行所需要的进程
- 而容器技术是应用程序是基于宿主的内核,而且没有对硬件进行虚拟。
2.docker的安装
3.docker命令基础
当非root用户安装docker以后,直接输入docker命令会出现以下报错
ERRO[0000] failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: no such file or directory
原因:一种是docker没有启动,另外一种情况就是没有使用sudo docker的方式输入docker命令,没有权限。
解决:如果我们每次都输入sudo docker命令来执行docker命令会很麻烦,因为我们可以创建docker用户组
$ sudo groupadd docker
将当前非root用户加入到group内,然后退出重新登录
$ sudo gpasswd -a${USER} docker
重启docker服务
$ sudo service docker restart
切换当前会话到新group或者重启x会话
$ newgrp - docker 或者 pkill x
为后面的联系可以去注册一个docker hub账号,然后通过docker login 命令登录
- 构建第一个docker镜像
新建文件夹hello,然后在里面新建一个文件 Dockerfile,填入一下信息
FROM alpine
CMD "echo" "hello world"
然后通过docker build -t hello . 构建镜像(注意不要玩那个命令后面的小数点)
然后直接运行 docker run --rm hello (--rm表示容器退出时后自动删除该容器)
2. docker pull 拉取镜像
docker pull <imgesName:tag> 可以不指定标签,默认拉取latest的镜像,不推荐,这种镜像不稳定
docker pull locahost:5000/<imagesName:tag> 对于私有仓库,可以指定仓库地址
3.docker search 搜索镜像
4.docker inspect查看镜像信息,还可以查看容器信息
docker inspect hello 即可查看刚才拉取的hello镜像
docker inspect -f '镜像创建的时间是:{{.Created}}' hello 通过-f 参数进行定位查询信息
5.创建镜像
- 通过 docker pull hello-world 拉取镜像
- 从Dockerfille文件构建镜像
- 输入配置信息
- docker build -t hello .
- docker run --rm hello
- 自动构建镜像(从docker hub)
我们需要构建自己的镜像,而每一次docker build与漫长的等待都非常耗费时间。因此我们可以通过docker hub来帮助我们构建镜像。在登录decker hub以后,点击右上角个人头像,选中account setting ==>link accounts==>gihub==>connet来和我们的github仓库连接。然后就可以创建我们的镜像仓库辽!
- 通过阿里云加速构建镜像
访问外国网站docker hub,从上面拉取镜像太慢,我们可以使用阿里云的提供的镜像托管平台来拉取镜像。
开发者平台-容器镜像服务,复制我们的镜像加速器地址,对我们默认的docker拉取镜像地址的配置文件进行修改
vim etc/sysconfig/docker(CentOS 7以下版本)
(CentOS7)以上版本:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://91up0tgw.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker