1、docker简介
docker是一款容器软件。由2013年发布,后来加入linux基金会。
1、什么是容器
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等
2、什么是docker?
Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。
3、为什么要用docker?
在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须满足“任何时间任何地点”可获取可使用的特点。因此,开发者们需要一种新型的创建分布式应用程序的方式,快速分发部署,而这正是Docker所能够提供的最大优势。Docker提供了一种更为聪明的方式,通过容器来打包应用、解耦应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。
2、docker的核心概念
1、镜像(Image)
Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。
2、容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
3、仓库(Repository)
用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。
3、docker在开发和运维中的优势
对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker具有以下几个方面的优势:
1、更快的交付和部署:
使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
2、更高效的利用资源:
运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker的性能要提高1~2个数量级。
3、更轻松的迁移和扩展:
Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。
4、更轻松的管理和更新:
使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
5、解决异构环境
4、安装部署docker
下载链接:https://www.docker.com/products/docker-desktop
windows :
mac
linux
docker分为两个版本:
docker-ce : 社区版
docker-ee :企业版
linux 3.10的内核 有BUG
1、升级系统内核
[root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.167-1.el7.elrepo.x86_64.rpm
[root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.167-1.el7.elrepo.x86_64.rpm
# 安装
[root@localhost ~]# yum localinstall -y kernel-lt*
# 启动时自动选择最新的系统版本
[root@localhost ~]# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
# 查看最新的系统内核启动版本
[root@localhost ~]# grubby --default-kernel
# 重启生效
[root@localhost ~]# reboot
# 检测
[root@localhost ~]# uname -a
2、安装依赖包
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
3、添加软件源信息
[root@localhost ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、更新并安装Docker-CE
[root@localhost ~]# sudo yum makecache fast
[root@localhost ~]# sudo yum -y install docker-ce-19.03.9
k8s支持的最新的版本,也是最稳定的版本是19
5、启动Docker
[root@localhost ~]# systemctl start docker
6、检测docker
[root@localhost ~]# docker info
7、加速docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://exc00kim.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5、docker的基础使用
1、docker三大概念
1、镜像 :镜像是启动容器的模板
2、容器 :是对外提供服务的实例
3、仓库(Harbor) :存放镜像的地方
2、docker和虚拟机之间的区别
3、镜像
镜像是启动容器的模板,同一个镜像启动的所有的容器完全相同。
3.1、下载镜像
docker pull [仓库的URL]/[命名空间]/[镜像名称]:[版本号]
默认的仓库URL:https://index.docker.io/v1/
默认的命名空间:library
默认的版本号:latest
# 命令 :docker pull nginx
index.docker.io/library/nginx:latest
3.2、查看本机镜像列表
[root@localhost ~]# docker images
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6987c8d6ed5 6 days ago 141MB
仓库名 版本 镜像ID 创建距离现在的时间 大小
3.3、查看镜像的详情
docker inspect [镜像名称|ID]
[root@localhost ~]# docker inspect nginx
3.4、镜像tag # 起别名
docker tag [镜像ID] [新的名称]
[root@localhost ~]# docker tag f6987c8d6ed5 dockers
3.5、登录仓库
docker login [仓库的URL地址]
默认的仓库地址:hub.docker.com
3.6、上传镜像
第一步:打tag
[root@localhost ~]# docker tag f6987c8d6ed5 alvinos/nginx:v2
第二步:上传
[root@localhost ~]# docker push alvinos/nginx:v2
3.7、删除镜像
docker rmi [镜像的名称|ID]
[root@localhost ~]# docker rmi alvinos/nginx:v2
注:docker镜像只能创建和删除,不能修改。
docker的ID全宇宙唯一
6、容器
对外提供服务的实例。
1、容器生命周期
容器内的进程至少有一个进程运行在前台。
2、启动一个容器
docker run [参数] [镜像名称|ID] [启动命令]
参数:
-d : 以守护进程方式运行
--rm : 当容器生命周期结束时,立即删除该镜像
--name : 指定容器名称,和将容器的名称加入docker DNS
-e : 指定容器内部的环境变量
-h : 指定容器的主机名
-p : 端口映射(固定)
-P : 端口映射(随机)
-i : 打开标准输出(将容器内部的标准输出接入到命令行中)
-t : 创建一个命令行(伪终端)
-v : 添加一个目录映射
--link
--network
[root@localhost ~]# docker run -it --rm centos
3、查看本机运行的容器列表
docker ps
-a : 显示本机上的所有的容器
-q : 只显示ID
# docker ps -a -q
4、在容器内部执行命令
docker exec [容器名称] [命令]
[root@localhost ~]# docker exec nginxv1 printenv
进入容器:
docker exec -it [容器名称] bash
[root@localhost ~]# docker exec -it hungry_wright bash
5、删除容器
docker rm [容器ID或名称]
-f : 强制删除
[root@localhost ~]# docker rm -f $(docker ps -a -q) # 全部删除
6、常用命令
docker start : 启动一个容器
docker stop :停止一个容器
docker create :创建一个容器
docker run 和 docker create 之间有两个区别
1、docker run创建容器并立即启动,而docker create 只是创建
2、docker run创建的容器时up状态,而docker create创建的容器是create
7、保存容器和镜像
1、直接将容器保存成本地镜像
docker commit
参数:
-a : 作者
-m : 提交是解释信息
-p : 保存容器时,是否暂停运行容器
[root@localhost ~]# docker ps
[root@localhost ~]# docker commit -a "meng" -m "shuaige" -p happy_heisenberg test:v1
[root@localhost ~]# docker images
2、将本地的容器保存成镜像压缩包
1、保存容器为镜像压缩包
docker export
[root@localhost ~]# docker export -o nginx.tar hungry_wright
2、解压容器压缩包成镜像
docker import
[root@localhost ~]# docker import nginx.tar test:v2
3、将本地的镜像保存成镜像压缩包
# 1、保存
docker save
[root@localhost ~]# docker save -o nginxv1.tar python:3.6 nginx:latest # 可以保存多个
# 2、解压镜像压缩包成镜像
docker load
[root@localhost ~]# docker load -i nginxv1.tar
4、save 和 export之间的区别
1、针对的对象不一样
2、save保存的镜像更加完善