一、docker中镜像相关操作

1、重要概念

  • 仓库 hub: docker在全世界范围内维护一个仓库 用来存储镜像 官方镜像 个人开发者镜像
  • 镜像 image: 一个镜像代表一个软件安装包 mysql tomcat
  • 容器 container: 一个镜像运行一次就会产生一个容器 一个容器认为是一个软件服务 tomcat容器 mysql容器

2、辅助命令

1. docker version  --------------------------  查看docker的信息
    2. docker info      --------------------------  查看更详细的信息
    3. docker --help    --------------------------  帮助命令

3、镜像相关命令

(1)查看当前本地仓库中有哪些镜像

#列出指定镜像名称信息
docker images tomcat(镜像名称)
docker images -q(镜像id) 镜像名 
#列出本地所有镜像
docker image ls 或者docker images

Sg2005配置镜像监控功能_tomcat

  • 结果解释
REPOSITORY(镜像名称)    TAG(版本)       IMAGE ID(镜像ID)       CREATED(镜像创建时间)        SIZE(镜像大小)
hello-world            latest       feb5d9fea6a5              6 months ago             13.3kB

(2)下载一个镜像

docker pull 镜像名称
#获取最新版本
  docker pull redis ==> docker pull redis:latest(最新版本)
# 获取指定版本
docker pull tomcat:8.5.31

Sg2005配置镜像监控功能_tomcat_02

(3)搜索镜像

docker search 镜像名
docker search tomcat ==>只能查看当前镜像是否存在 不能列出版本
docker search tomcat --no-trunc    ==>显示完整的镜像信息

Sg2005配置镜像监控功能_Docker_03

(3)删除镜像

# 删除镜像
docker image rm  镜像名:tag|镜像id  
docker image rm tomcat:8.5.31
#强制删除
 docker image rm  -f 镜像名:tag|镜像id 
 #批量删除  
 docker image rm  -f ${docker images tomcat -q}

Sg2005配置镜像监控功能_tomcat_04

二、Docker常用命令

1、操作命令的格式

docker 命令[选项]

2、如何查看docker引擎中运行容器有哪些?

docker ps          --------------------------  列出所有正在运行的容器
  -a      正在运行的和历史运行过的容器
  -q      静默模式,只显示容器编号

(1)查看正在运行的容器

docker ps

(2)查看所有容器(运行停止)

docker ps -a

(3)查看所有容器ID

docker ps -aq

Sg2005配置镜像监控功能_docker_05

3、如何运行一个容器

(1)简单运行tomcat镜像

#注意:这种方式运行容器内无法访问
docker run tomcat:tag

docker run tomcat: latest(latest是最新的意思)

Sg2005配置镜像监控功能_Docker_06

(2)运行tomcat容器,同时设置容器与主机端口的映射关系 -p

#注意:可以映射多个端口号 -p 15672:15672 -pd672:5672
docker run -p 8080:8080 tomcat:latest

Sg2005配置镜像监控功能_docker_07

(3)运行tomcat,开发端口映射,后台启动该服务 -d

docker run -p 8082:8080 -d tomcat:latest

(4)运行tomcat,开发端口映射,后台启动该服务,指定容器名称 —name 容器名称

docker run -d -p 8083:8080 --name tomcat01 tomcat:latest

Sg2005配置镜像监控功能_tomcat_08

4、停止,运行,重启,暂停,恢复容器

1.  docker start   容器名字或者容器id  --------------- 开启容器
 2.  docker restart 容器名或者容器id    --------------- 重启容器
 3.  docker stop  容器名或者容器id       ------------------ 正常停止容器运行
 4.  docker kill  容器名或者容器id      ------------------ 立即停止容器运行
 5.  docker pause|unpause 容器名或容器id ----------------- 暂停和恢复容器

5、杀死容器

docker kill id|name

Sg2005配置镜像监控功能_Docker_09

6、删除容器

#删除已经停止运行的容器
docker rm 容器id和容器名  
#强制删除容器,即使是运行的容器
docker rm -f 容器id和容器名  
#删除所有容器   
docker rm -f $(docker ps -aq)

Sg2005配置镜像监控功能_Docker_10

7、查看容器内部日志

docker logs 容器id|name
#实时监控服务器内服务的日志
docker logs -f 容器id|name

Sg2005配置镜像监控功能_docker_11

8、进入容器内部

docker exec -it(交互模式) 容器id|name bash
#退出容器
exit

Sg2005配置镜像监控功能_docker_12

9、容器与宿主机操作系统之间文件拷贝

#如何将容器中指定文件和目录拷贝到宿主机:
 docker cp 容器id:容器文件或目录 主机那个目录
 #如何将主机中指定文件和目录拷贝到容器内:
 docker cp 主机文件和目录 容器id:容器中目录

(1)将tomcat容器里面的server.xml复制一份到/usr/apps下

docker cp 7a42964beeb6:/usr/local/tomcat/conf/server.xml /usr/apps

Sg2005配置镜像监控功能_docker_13

(2)将linux中fruit这个项目war包移动到tomcat的webapps下

#1.fruit.war这个项目的位置
/usr/apache-tomcat-8.5.46/webapps
#2.移动到tomcat webapps
docker cp /usr/apache-tomcat-8.5.46/webapps/fruit.war 7a42964beeb6:/usr/local/tomcat/webapps/

Sg2005配置镜像监控功能_tomcat_14

Sg2005配置镜像监控功能_Sg2005配置镜像监控功能_15

10、如何部署一个web项目 war包项目

1. 将test.war上传到linux服务器
2. 通过docker cp命令将test.war复制到tomcat的webapps目录中即可
3.使用ip端口进行测试访问即可

Sg2005配置镜像监控功能_Sg2005配置镜像监控功能_16

11、查看容器内运行进程

docker top 容器id|name

Sg2005配置镜像监控功能_Docker_17

12、查看容器内细节指令

docker inspect 容器id|name

Sg2005配置镜像监控功能_Docker_18

13、容器数据卷机制

#数据卷 Data Volume
1. 作用:用来实现容器中数据和宿主机中数据进行映射的
2. 注意:**数据卷必须在容器第一次启动时设置**
3. 使用: docker run -v ...

(1)使用绝对路径设置数据卷

docker run -v 宿主机绝对路径:容器内路径:ro ...
#ro:ready only 如果设置数据卷时指定ro ,代表日后容器内路径是只读的
注意:这种方式会将容器路径的原始内容全部清空,始终以宿主机路径为主

(2)使用别名方式设置数据卷

docker run -v aa:/usr/local/tomcat/webapps ...
#aa是是什么?
1.aa代表docker数据卷中的别名 注意:这个别名如果存在docker直接使用
2.使用别名方式保留容器路径原始内容,前提别名对应路径不能存在内容


注意:docker根据别名创建目录默认在:/var/lib/docker/volumes/

Sg2005配置镜像监控功能_Docker_19

14、容器卷应用场景

  • 注意:凡是在容器内持有重要数据的镜像在运行时都需要指定数据卷

15、将容器打包成新的镜像

(1)为什么要将容器打包成新的镜像?

  • 因为容器是可读可写的,可以对容器进行定制比如maven可以定制settings.xml。让他从阿里云下载jar包,将容器打包成新的镜像之后,日后基于这个镜像运行成容器,这个新容器存在原来定制的特性

(2)将容器打包成一个新的镜像

docker commit -m "deploy test project in tomcat" -a "wanghengjie" 容器id|name 镜像名:版本

16、镜像的备份与恢复

Sg2005配置镜像监控功能_Sg2005配置镜像监控功能_20

#镜像备份
docker save 镜像名:Tag -o  (镜像名-tag).tar
例:docker save tomcat:80 -o tomcat-8.0.tar
#恢复镜像
docker load -i tomcat-8.0.tar

三、Docker镜像原理

1、镜像是什么

镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境变量和配置文件。

2、为什么一个镜像那么大

Sg2005配置镜像监控功能_tomcat_21

  • 镜像就是花卷
  • UnionFS(联合文件系统): Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 。
  • 内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。 用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。 对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。 而对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了。相比其他 Linux 发行版,CentOS 的 rootfs 已经算臃肿的了,alpine 还不到 10MB。 我们平时安装的 CentOS 除了 rootfs 还会选装很多软件、服务、图形桌面等,需要好几个 GB 就不足为奇了。

3、Docker镜像原理

docker的镜像实际是由一层一层的文件系统组成。 UnionFS 联合文件系统

  • bootfs(boot file system)主要包含bootloader(引导装载程序)和kernel(内核),bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。在docker镜像的最底层就是bootfs。这一层与Linux/Unix 系统是一样的,包含boot加载器(bootloader)和内核(kernel)。当boot加载完,后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时会卸载bootfs。
  • 我们平时安装进虚拟机的centos都有1到几个GB,为什么docker这里才200MB?

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令,工具,和程序库就可以了,因为底层直接使用Host的Kernal,自己只需要提供rootfs就行了。由此可见不同的linux发行版,他们的bootfs是一致的,rootfs会有差别。因此不同的发行版可以共用bootfs。

Sg2005配置镜像监控功能_Docker_22

4、为什么docker镜像要采用这种分层结构呢

最大的一个好处就是资源共享

  • 比如:有多个镜像都是从相同的base镜像构建而来的,那么宿主机只需在磁盘中保存一份base镜像。同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为容器层,容器层之下都叫镜像层。

四、Docker 命令手册

命令

描述

docker attach

连接到正在运行中的容器

docker build

通过Dockerfile构建一个镜像

docker builder

管理builds

docker checkpoint

管理checkpoints

docker commit

从容器创建一个新的镜像

docker config

管理 Docker 配置

docker container

管理容器(一般都会省略container,比如docker container ps ==> docker ps)

docker context

管理 contexts

docker cp

用于容器与主机之间的数据拷贝

docker create

创建一个新容器

docker diff

检查容器里文件结构的变化

docker events

从服务器获取实时事件

docker exec

在运行的容器中执行命令

docker export

将文件系统作为一个tar归档文件导出

docker history

查看指定镜像的创建历史

docker image

管理镜像

docker images

列出所有镜像

docker import

从归档文件中创建镜像

docker info

示 Docker 系统信息,包括镜像和容器数

docker inspect

获取容器/镜像的元数据

docker kill

杀掉一个运行中的容器

docker load

从归档文件中或STDIN中加载一个镜像

docker login

登录 Docker

docker logout

登出 Docker

docker logs

获取容器日志

docker manifest

管理显示镜像 manifest 信息

docker network

管理网络

docker node

管理Swarm节点

docker pause

暂停容器进程

docker plugin

管理插件

docker port

显示容器端口映射关系

docker ps

显示容器列表

docker pull

从镜像仓库中拉取或者更新指定镜像

docker push

将本地的镜像上传到镜像仓库

docker rename

重命名容器

docker restart

重启容器

docker rm

删除容器

docker rmi

删除镜像

docker run

在一个新容器中运行命令(创建并进入容器)

docker save

将指定镜像保存成 tar 归档文件

docker search

在公共仓库中搜索镜像

docker secret

管理 Docker secrets

docker service

管理Docker服务

docker stack

管理 Docker stacks

docker start

启动容器

docker stats

Display a live stream of container(s) resource usage statistics

docker stop

停止容器

docker swarm

管理 Swarm

docker system

管理 Docker

docker tag

标记本地镜像,将其归入某一仓库

docker top

查看容器中运行的进程信息,支持 ps 命令参数

docker trust

管理Docker镜像上的trust

docker unpause

取消容器暂停

docker update

更新容器配置

docker version

显示 Docker 版本信息

docker volume

管理Docker卷

docker wait

阻塞运行直到容器停止,然后打印出它的退出代码

五、后续Docker相关博客内容

  • Docker基础篇(2022/3/29,已经发布)
  • Docker常用命令总结及镜像原理(2022/3/29)
  • Docker安装mysql,Redis,nginx,tomcat,mongoDB,elasticSearch软件攻略(2022/3/30)
  • DockerFile相关命令及构建部署SpringBoot项目(2022/3/30)
  • Docker的网络配置和数据卷配置(2022/3/31)
  • Docker Compose文件的使用攻略(2022/4/1)
  • Docker可视化工具使用(2022/4/2)