Java面试复习---Docker(狂神版)


前言

本文是Java面试复习系列中的Docker,后面会陆续有该系列其他篇章,并且会一直维护。本系列都为网上资源整理而来,如有问题,及时联系。


Docker学习路径

Docker学习

  • Docker概述
  • Docker安装
  • Docker命令
    • 镜像命令
    • 容器命令
    • 操作命令
    • 。。。
  • Docker镜像
  • 容器数据卷
  • DockerFile
  • Docker网络原理
  • IDEA整合Docker
  • DockerCompose
  • DockerSwarm
  • CI\CD Jenkins

Docker概述

Docker为什么出现?

一款产品:开发–上线 两套环境! 应用环境,应用配置

开发—运维,问题:在自己的电脑上可以运行,别人电脑不行!版本更新,导致服务不可用!对运维来说,考验十分大

环境配置是十分麻烦的,每一个机器都要部署环境(集群Redis、ES、Hadoop…)费时费力

发布一个项目(jar+(Redsi Mysql jdk es)),项目能不能带上环境安装打包!

之前在服务器配置一个应用的环境Redis、MySQL、jdk等,配置超级麻烦,不能跨平台

传统:开发jar,运维来做

现在:开发打包部署上线,一套流程

Docker就是解决以上问题

Docker的思想来自于集装箱

JRE–多个应用(端口冲突)–原来都是交叉的

隔离:Docker核心思想!打包装箱!没有箱子相互隔离

Docker通过隔离机制,可以将服务器利用到极致

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习

Docker的历史

2010年,几个年轻人,在美国成立了一家公司dotCloud,做一些pass云计算机服务!LXC有关的容器技术!

他们将自己的技术(容器化技术)命名就是Docker!

Docker刚刚诞生的时候,没有引起行业的注意,!活不下去

2013年!Docker开源!每月更新一个版本!

2014年4月9日,Docker发布,Docker十分轻巧

虚拟机:在window中安装一个Vmware,通过这个软件我们可以虚拟出来一个或者多个电脑!笨重!虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术

vm:linux centos原生镜像(一个电脑)隔离,需要开启多个虚拟机
docker:隔离 镜像(最核心的环境)十分小巧

到现在,所有开发人员都必须要回Docker

聊聊Docker

Docker是基于go语言开发!开源项目

官网 文档(超级详细)

DockerHub

Docker能干嘛

之前的虚拟机技术

在这里插入图片描述

虚拟机技术缺点:

1.资源占用十分多

2.冗余步骤多

3.启动慢

容器化技术

容器化技术不是一个完整的操作系统

在这里插入图片描述

比较Docker和虚拟机技术的不同

  • 传统虚拟机,虚拟一条硬件,运行一个完整的操作系统,然后再这个系统之上安装和运行软件
  • 容器内的应用直接运行再宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的软件,所有就轻便了
  • 每个容器是相互隔离的。每个容器内都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

  • 更快速的交付和部署

    • 传统:一堆帮助文档,安装程序
    • Docker:打包镜像发布测试,一键运行
  • 更便捷的升级和扩缩容

    • 使用了Docker之后,我们部署应用就和搭积木一样
    • 项目打包为一个镜像,扩展
  • 更简单的系统运维

    • 在容器化之后,我们的开发,测试环境是高度一致的
  • 更高效的计算资源利用

    • Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例!将服务器的性能压榨到极致

Docker安装

Docker的基本组成

  • 客户端
  • 服务器
  • 仓库

镜像(image):

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务器运行或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术,独立运行一个或者多个应用,通过镜像来创建的。

启动、停止、删除、基本命令

目前就可以把这个容器理解为就是一个简单的Linux系统

仓库(repository):

仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!DockerHub(默认是国外的)!阿里云等都有容器服务器(配置镜像加速)!

安装Docker

环境准备

1.需要会一点Linux

2.Centos7

3.使用Xshell连接远程服务器进行操作

环境查看

[root@iZwz9j3h85ywjfp5klhlrnZ /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

安装

# 1.卸载旧版本
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2.需要的安装包
 sudo yum install -y yum-utils
# 3.设置镜像的仓库
 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 # 推荐使用阿里云
    
# 更新yum软件包索引
yum makecache fast

# 4.安装Docker相关的 docker-ce社区 ee企业
yum install docker-ce docker-ce-cli containerd.io

# 5.启动Docker
systemctl start docker

# 6.使用docker version查看是否安装成功

# 7.hello-world

# 8.查看一下下载的hello-world镜像

卸载Docker

# 1.卸载依赖
 sudo yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
 sudo rm -rf /var/lib/docker  #docker的默认工作路径
 sudo rm -rf /var/lib/containerd

阿里云镜像加速

1.登录阿里云

2.找到镜像加速地址

3.配置使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ji4ei67b.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾HelloWorld

在这里插入图片描述

底层原理

Docker是怎么工作的?

Docker是一个Client+Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

DockerServer接收到Docker-Client的指令,就会执行这个命令

在这里插入图片描述

Docker为什么比VM快?

1.Docker有着比虚拟机更少的抽象层

2.Docker利用的是宿主机的内核,VM需要的是Guest OS

在这里插入图片描述

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个步骤,秒级

Docker的常用命令

帮助命令

docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/commandline/

镜像命令

docker image查看所有本地主机上的镜像
[root@daigua /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 months ago   13.3kB

# 解释 
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE 镜像id
CREATED 镜像的创建时间
SIZE 镜像的大小

# 可选项
-a,--all #列出所有镜像
-q,--quiet #只显示镜像的id
docker search搜索镜像
[root@daigua /]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11205     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4259      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   833  

# 可选项,通过收藏来过滤
--filter=STARS=3000 # 搜索出来的镜像就是STARS大于3000的
docker pull下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@daigua /]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
33847f680f63: Pull complete # 分层下载 docker images的核心
5cb67864e624: Pull complete 
1a2b594783f5: Pull complete 
b30e406dd925: Pull complete 
48901e306e4c: Pull complete 
603d2b7147fd: Pull complete 
802aa684c1c4: Pull complete 
715d3c143a06: Pull complete 
6978e1b7a511: Pull complete 
f0d78b0ac1be: Pull complete 
35a94d251ed1: Pull complete 
36f75719b1a9: Pull complete 
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 等价
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@daigua /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
33847f680f63: Already exists 
5cb67864e624: Already exists 
1a2b594783f5: Already exists 
b30e406dd925: Already exists 
48901e306e4c: Already exists 
603d2b7147fd: Already exists 
802aa684c1c4: Already exists 
5b5a19178915: Pull complete 
f9ce7411c6e4: Pull complete 
f51f6977d9b2: Pull complete 
aeb6b16ce012: Pull complete 
Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
[root@daigua /]# docker rmi -f 容器id # 删除指定的镜像
[root@daigua /]# docker rmi -f 容器id 容器id 容器id # 删除多个镜像
[root@daigua /]# docker rmi -f $(docker images -aq) # 删除全部镜像

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos
新建容器并启动
docker run[可选参数] image

# 参数说明
--name="NAME" 容器名字 用来区分容器
-d            后台运行
-it           使用交互方式运行,进入容器查看内容
-p            指定容器端口
  -p ip:主机端口:容器端口
  -p 主机端口:容器端口
  -p 容器端口
  容器端口
-p             随机指定端口

# 测试:启动并进入容器
[root@daigua /]# docker run -it centos /bin/bash
[root@24de185362f3 /]# ls # 查看容器内部centos,基础版本,很多命令都是不完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退出到主机
[root@24de185362f3 /]# exit
exit
[root@daigua /]# ls
bin   dev  home  lib64       media  opt    proc  run   srv  tmp  var
boot  etc  lib   lost+found  mnt    patch  root  sbin  sys  usr  www
列出所有的运行容器
# docker ps 命令
  #列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-aq # 只显示容器编号

[root@daigua /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@daigua /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
24de185362f3   centos         "/bin/bash"   6 minutes ago   Exited (0) 4 minutes ago             confident_fermat
d260d8e9d713   d1165f221234   "/hello"      2 hours ago     Exited (0) 2 hours ago               kind_merkle
[root@daigua /]# docker ps -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
24de185362f3   centos    "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             confident_fermat
[root@daigua /]# docker ps -aq
24de185362f3
d260d8e9d713
退出容器
exit # 退出容器 停止并推出
ctrl + p + q # 容器不停止退出
删除容器
docker rm 容器id                    # 删除指定容器(不能删除正在运行的容器,强制删除 rm -f)
docker rm -f $(docker ps -aq)      # 删除所有容器
docker ps -a -q | xargs docker rm  # 删除所有容器
启动和停止容器
docker start 容器id      # 启动容器
docker restart 容器id    # 重启容器
docker stop 容器id       # 停止当前正在运行的容器
docker kill 容器id       # 强制停止容器

常用其他命令

后台启动容器
# 命令 docker run -d 镜像名
[root@daigua ~]# docker run -d centos
#问题 docker ps时,发现centos停止
#常见的坑,docker容器使用后台运行,就必须要有一个后台进程,docker发现没有应用,就会自动停止
# nginx,容器启动,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -tf --tail 容器

#自己编写一段Shell脚本
[root@daigua ~]#  docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"

# 显示日志
-tf       #显示日志
--tail number  # 要显示日志的条数
[root@daigua ~]# docker logs -tf --tail 10 容器id
查看容器中进程信息
# 命令 docker top 容器id
[root@daigua ~]# docker top aa7725e69152
UID                 PID                 PPID                C                   ST
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值