一、概述
1.1 Docker为什么出现?
问题:我在我的电脑上可以运行 环境配置十分的麻烦,每一个机器都要部署环境
发布一个项目将jar+(Redis MySQl JDK ES),项目带上环境安装打包
现在:开发打包部署上线,一套流程做完!
安卓流程:java — apk —发布(应用商店)—- 张三使用apk一安装即可用!
docker流程: java-jar(环境) — 打包项目带上环境(镜像) — ( Docker仓库:商店)——-下载我们发布的镜像 —- 直接运行即可!
1.2 Docker历史 (基于GO语言)
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个VMware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!
虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
- vm : linux centos 原生镜像(一个电脑!) 隔离、需要开启多个虚拟机! 几个G 几分钟
- docker: 隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧!
几个M 秒级启动!
1.3 Docker能做什么?
比较Docker和虚拟机技术的不同:
传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
容器内的应用直接运行在宿主机的内存,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
可以在容器和简单的设置30个redis的服务
docker官网:www.docker.com/
文档:docs.docker.com/ Docker的文档是超级详细的!
仓库:hub.docker.com/ 相当于 github
1.4 DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档。安装程序
Docker:打包镜像发布测试,一键运行
更快捷的升级和扩缩容 使用了Docker之后,部署就像搭积木一样
- 更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
- 更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
1.5 Docker的组成
- 镜像(image);docker镜像是一个模板,类似于.Class,可以通过这个模板来创建容器服务
tommact镜像
run
tomcat01容器(提供服务)tomcat02容器(提供服务)tomcat03容器(提供服务)
通过这个镜像可以创建多个容器(最终的**服务运行**或者`项目运行`就是在容器中的)
- 容器(container): Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建
启动,停止,删除,基本命令
可以把这个容器想为简易的linux系统
- 仓库(repository) 仓库就是存放镜像的地方
二、Docker的安装
2.1 环境的配置
- 查看内核版本
uname -r
- 查看系统的版本
cat /etc/os-release
2.2 安装
#安装gcc环境
yum -y install gcc yum -y install gcc-c++
#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
yum-config-manager --add-repo mirrors.aliyun.com/docker-ce/l…
#更新yum软件包索引 yum makecache fast centos8去掉fast
#4.安装docker相关的 docker-ce 社区版 而ee是企业版 yum install -y docker-ce docker-ce-cli containerd.io
#5.启动docker systemctl start docker
#6. 使用docker version查看是否按照成功 docker version
#7. 测试 docker run hello-world
#8.查看一下下载的这个hello-world镜像 docker images
Docker安装的默认目录是 /var/lib/docker
2.3 阿里云镜像加速
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fiojwb8k.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.4 hello-world的执行流程
寻找镜像,找不到去DockerHun查找,找到放到本地,找不到的就卡住了
2.5 Docker的原理
Docker为什么比VM快?
1、Dokcer有着比虚拟机更少的抽象层(基于操作系统内核的实现)。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,vm 需要是Guest OS
所以说,新建一个容器的时候,docker 不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级!
三、
3.1、帮助命令 (万能命令)
docker version
#显示docker的版本信息。
docker info
#显示docker的系统信息,包括镜像和容器的数量
docker --help
#帮助命令
帮助文档的地址:docs.docker.com/engine/refe…
3.2 镜像命令
Docker images 查看所有的镜像
docker images --help
常用的命令
docker -a 列出所有的镜像
docker -q 显示镜像的id
搜索镜像
docker search mysql docker search --help
//搜索过滤
docker search mysql --filte=stars=3000
下载搜到的镜像
docker pull mysql
//下载结束分析
Using default tag: latest 默认的版本为最新的额
latest: Pulling from library/mysql, #如果不tag指定版本
72a69066d2fe: Pull complete #分层下载 docker的核心,联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实的地址
docker pull mysql 等价于
docker pull docker.io/library/mysql:latest
docker pull mysql:5.7
上面的分页有好多重复的,就不同去下载了,只下载版本更新的部分
镜像的下载
docker rmi -f 可以根据镜像的id和名字都可
docker rmi -f $(docker images -aq) 删除所有的,a是列出所有的,q是列出所有的id
3.3容器的命令
docker run 镜像id #新建容器并启动
docker ps #列出所有运行的容器
docker container list
docker rm 容器id #删除指定容器
docker start 容器id #启动容器
docker restart容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习 ,相当于创建一个虚拟机
- 新建容器并启动
docker run image
//it 使用交互式运行,进入容器查看内存
//-p指定容器的端口
# /bin/bash 跟着的是对应的控制台
[root@AoRan image]# docker run -it centos /bin/bash
[root@b71cdc773caa /]# 是一个小型的linux系统
查看当前运行的容器 的进程
docker ps
查看之前运行的和现在的
docker ps -a
查看最近运行的几个,可以指定
docker ps -a -n=1
只显示容器的编号
docker ps -aq
- 退出容器
exit 直接容器停止并退出
ctrl+P +Q直接退出不停止
- 删除容器
docker rm 容器的id 不能删除正在运行的容器
docker rm -f 删除所有的容器
- 启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
3.4 常用的其他命令
- 后台启动容器
# 命令 docker run -d 镜像名!
[root@iZ8vbgc3u6dvwrjyp45lyrZ ~]# docker run -d centos
# 问题docker ps,发现centos停止了
# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程, docker 发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了