java37-Docker

179 阅读7分钟

一、概述

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

20210719100837873.png

所以说,新建一个容器的时候,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,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了