当下最火的Docker容器(一)《Java-2021面试谈资系列》

这里写目录标题

  • Docker
    • 一、Docker概述
      • 1.Docker的出现
      • 2.Docker的历史
      • 3.Docker能干什么?
    • 二、Docker安装
      • 1.Docker的基本组成
      • 2.安装Docker
      • 3.阿里云镜像加速
      • 4.回顾HelloWorld流程
      • 5.底层原理
    • 三、Docker的常用命令
      • 1.帮助命令
      • 2.镜像命令
          • 查看镜像
          • 搜索镜像
          • 下载镜像
          • 删除镜像
      • 3.容器命令
          • 新建容器并启动
          • 列出所有运行的容器
          • 退出容器
          • 删除容器
      • 4.常用的其他命令
          • 后台启动容器
          • 查看日志
          • 查看容器中进程信息
          • 查看镜像元数据
          • 进入当前正在运行的容器
          • 从容器内拷贝文件到主机上
      • 5.小结
    • 四、练习
      • 1.部署Nginx
      • 2.部署tomcat
      • 3.可视化

Docker

一、Docker概述

1.Docker的出现

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

开发 ———— 运维。 问题:我在我的电脑上可以运行!版本跟新,导致服务不可用!对于运维来说,考验十分大!

环境配置十分麻烦,每一个机器都要部署环境(环境!)——费时费力

发布一个项目【jar+(Redis Mysql jdk Es 等)】

项目能不能带上环境安装打包!——>Docker

传统:开发jar,运维来部署!

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

Docker给以上的问题,提出了解决方案!

java——jar(环境)——打包项目带上环境(镜像)——(Docker仓库:商店)——下载我们发布的镜像——直接运行
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第1张图片
Docker的思想就来自于集装箱!

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

隔离:Docker核心思想!打包装箱!每个箱子都是相互隔离的。

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

2.Docker的历史

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第2张图片
在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个Vmwar,通过这个软件我们可以虚拟出一台或多台电脑!笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

vm: linux--centos原生镜像(一个电脑!) 隔离,需要开启多个虚拟机!
docker:隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧!---秒级启动

聊聊Docker

Docker 是基于go语言开发的!开源的!

官网:https://www.docker.com/

文档地址:https://docs.docker.com/

仓库地址:https://hub.docker.com/

3.Docker能干什么?

之前的虚拟机
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第3张图片
缺点:

  • 资源占用十分大
  • 冗余步骤多
  • 启动慢

容器化技术:

容器化技术不是模拟的一个完整的操作系统
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第4张图片
比较Docker和虚拟机技术的不同:

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

DevOps(开发、运维)

更快速的交付和部署

传统:一堆的帮助文件,安装程序

Docker:打包镜像发布测试,一键运行

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!

项目打包——>镜像,扩展 服务器A! 服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

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

二、Docker安装

1.Docker的基本组成

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第5张图片

镜像image:

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

容器container:

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

启动,停止,删除,基本命令!

目前可以把这个容器理解成一个简易的linux系统

仓库repository:

仓库就是存放镜像的地方!

仓库分为公有仓库和私有仓库!

Docker Hub (默认国外的)

阿里云

2.安装Docker

环境准备

1.需要会一点点Linux的基础

2.CentOS 7

3.我们使用Xshell连接远程服务器操作

环境查看

# 系统内核是3.10以上的
[root@zjdzka /]# uname -r
4.18.0-193.28.1.el8_2.x86_64
# 版本
[root@zjdzka /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

安装

帮助文档:

 # 1.卸载旧版本
 sudo 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 \
--add-repo\ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#跟新yum软件包索引
 
 sudo yum makecache 

 
#4.安装docker相关 -ce社区版  ee企业版
 yum install docker-ce docker-ce-cli containerd.io
 
#5.启动docker
systemctl start docker

#6.docker version 查看释放安装成

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第6张图片

#7.测试hello world
docker run hello-world

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第7张图片

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

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第8张图片

#9.卸载docker
#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第9张图片

3.阿里云镜像加速

1.登录阿里云找到容器服务

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第10张图片
2.找到镜像加速地址
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第11张图片
3.配置使用

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

4.回顾HelloWorld流程

Run流程
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第12张图片

5.底层原理

docker是怎样工作的?

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

DockerServer 接收到Docker-Client 的指令,就会执行。
当下最火的Docker容器(一)《Java-2021面试谈资系列》_第13张图片
Docker为什么比VM快?

  • Docker有着比虚拟机更好的抽象层
  • Docker利用的是宿主机的内核,vm需要的是GuestOS。
    当下最火的Docker容器(一)《Java-2021面试谈资系列》_第14张图片

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

三、Docker的常用命令

1.帮助命令

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

帮助文档的地址:官网的帮助文档

2.镜像命令

查看镜像
docker images 

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   3 weeks ago   13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小


docker images --help #后缀提示

Options:
  -a, --all #列出所有的镜像
      --digests        
  -f, --filter #过滤器
      --format #格式化
      --no-trunc
  -q, --quiet  #只显示镜像的id     
搜索镜像
docker search

#可选项
  -f, --filter #过滤器
      --format 
      --limit 
      --no-trunc

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第15张图片

下载镜像
docker pull 镜像名 版本号
#如果不写版本,默认最新

[root@zjdzka ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete #分层下载,docker image的核心 联合文件系统
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c #签名
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
5.7: Pulling from library/mysql
a076a628af6f: Already exists 
f6c208f3f991: Already exists 
88a9455a9165: Already exists 
406c9b8427c6: Already exists 
7c88599c0b25: Already exists 
25b5c6debdaf: Already exists 
43a5816f1617: Already exists 
1831ac1245f4: Pull complete 
37677b8c1f79: Pull complete 
27e4ac3b0f6e: Pull complete 
7227baa8c445: Pull complete 
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第16张图片

删除镜像
docker rmi -f id #删除指定id
docker rmi -f $(docker images -aq) #一个一个删除

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第17张图片

3.容器命令

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

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

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

#启动,并进入容器
[root@zjdzka ~]# docker run -it centos /bin/bash
[root@623f590a560b /]

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第18张图片

#查看容器内部的centos
[root@623f590a560b /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

#从容器退回主机
exit
列出所有运行的容器
#docker ps 命令
	#列出当前正在运行的容器
-a #列出当前正在运行的容器+历史运行过
-n=#显示最近创建的容器
-q #只显示容器的编号

[root@zjdzka ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
623f590a560b   centos         "/bin/bash"   4 minutes ago   Exited (0) About a minute ago             confident_yonath
fcb98c99f4c7   d1165f221234   "/hello"      2 days ago      Exited (0) 2 days ago                     sharp_banzai
退出容器
exit #容器停止并退出
Ctrl+p+q #容器不停止退出
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器
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 #强制停止当前容器

4.常用的其他命令

后台启动容器
#命令 docker run -d 镜像名!
[root@zjdzka ~]# docker run -d centos
f76c19278e12a02d885f6b0d174c90ddd9b925ab0b2b0ce7760e1d0df3ab94a3

#问题:docker ps 发现centos停止了?

#坑:docker 容器使用后台运行时,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
docker logs -tfn --tail 容器里面没有日志

#自己编写shell脚本,测试

#显示日志
-f
-t	
-n --tail number #显示日志条数
查看容器中进程信息
top命令
[root@zjdzka ~]# docker top 95405824fd16
UID                 PID                 PPID                C                   STIME               TTY     
root                3046022             3046000             0                   21:38               pts/0
查看镜像元数据
docker inspect 容器id

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第19张图片

进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

#命令
docker exec -it id /bin/bash

#测试
[root@zjdzka ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zjdzka ~]# docker run -it centos /bin/bash
[root@c6f1ff97f6fa /]# [root@zjdzka ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
c6f1ff97f6fa   centos    "/bin/bash"   10 seconds ago   Up 9 seconds             pensive_allen
[root@zjdzka ~]# docker exec -it c6f1ff97f6fa /bin/bash
[root@c6f1ff97f6fa /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

方式二:

docker attach id
#测试
[root@zjdzka ~]# docker attach c6f1ff97f6fa
[root@c6f1ff97f6fa /]# exit



#docker exec--进入容器后开启新终端,可以在里面操作
#docker attach--进入容器正在运行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径

5.小结

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第20张图片

# Docker命令小结

四、练习

1.部署Nginx

#1.搜索镜像
docker search nginx
#2.下载镜像
docker pull nginx
#启动镜像
	# -d 后台运行
	# --name 起名字
	# -p 宿主机端口:容器内部端口
#查看镜像
docker ps
#本机测试
curl localhost:3344

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第21张图片

#图解原理

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第22张图片

#进入容器
docker exec -it nginx01 /bin/bash
#测试查看文档
root@d396333730c9:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@d396333730c9:/# cd /etc/nginx 
root@d396333730c9:/etc/nginx# ls
conf.d		koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params	koi-win  modules     scgi_params  win-utf
#退出容器
exit
#停止容器
docker stop d396333730c9

思考:我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,我要是可以在容器外提供一个映射路径,达到在容器外部修改文件,容器内部就可以自动修改?—— -v数据卷技术

2.部署tomcat

#1.直接启动并下载
docker run -it --rm tomcat:9.0 
#官方版本,一般用于测试,容器用完即删

==============================================================
#下载
docker pull tomcat:9.0
#启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
#测试访问没有问题

#进入容器
docker exec -it tomcat01 /bin/bash
#发现问题:1.linux命令少了;2.没有webapps 阿里云镜像的原因。默认是最小的镜像,也就是把所有的不必要都剔除掉,保证最小可运行环境

#解决问题:
#将webapps.dist文件拷贝到webapps下,即可访问出网页

**思考:**我们以后部署项目,如果每次都要进入容器是不是很麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!

3.可视化

  • portainer(先用这个)
  • Rancher(CI/CD 再用)

什么是portainer?

Docker的图形化界面管理工具!提供一个后台面板供我们操作

# 搜索镜像
docker search portainer/portainer
# 拉取镜像
docker pull portainer/portainer
# 运行镜像
docker run -d -p 8088:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name dev-portainer portainer/portainer

展示:

当下最火的Docker容器(一)《Java-2021面试谈资系列》_第23张图片

操作参考链接:

http://www.senra.me/docker-management-panel-series-portainer/

你可能感兴趣的:(java,笔记,linux,docker,运维)