Docker简单介绍及常用命令

Docker架构

在这里插入图片描述

Client 客户端

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

Host 主机(Docker 引擎)

一个物理或者虚拟的机器用于执行Docker守护进程和容器。

Image 镜像

什么是Docker镜像?简单的理解,Docker镜像就是一个Linux文件系统(Root FileSystem),这个文件系统里面包含可以运行在Linux内核的程序以及相应的数据。

通过镜像启动一个容器,一个镜像就是一个可执行的包,其中包括运行应用程序所需要的所有内容:包含代码,运行时间,库,环境变量和配置文件等。

Docker 把 App 文件打包成为一个镜像,并且采用类似多次快照的存储技术,可以实现:

  • 多个App可以共用相同的底层镜像(初始的操作系统镜像);
  • App运行时的IO操作和镜像文件隔离;
  • 通过挂载包含不同配置/数据文件的目录或者卷(Volume),单个App镜像可以用来运行无数个不同业务的容器。

Container 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker面向对象
镜像
容器对象

镜像分层

Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。

在这里插入图片描述

从上图可以看到,新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

镜像分层最大的一个好处就是共享资源。比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如/etc下的文件,这时其他容器的/etc是不会被修改的,修改只会被限制在单个容器内。这就是容器Copy-on-Write特性。

Volume 数据卷

实际上我们的容器就好像是一个简易版的操作系统,只不过系统中只安装了我们的程序运行所需要的环境,前边说到我们的容器是可以删除的,那如果删除了,容器中的程序产生的需要持久化的数据怎么办呢?容器运行的时候我们可以进容器去查看,容器一旦删除就什么都没有了。

所以数据卷就是来解决这个问题的,是用来将数据持久化到我们宿主机上,与容器间实现数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存储到我们宿主机上的真实磁盘中。

Registry 注册中心

DockerRegistry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像。

Docker公司提供了公共的镜像仓库https://hub.docker.com(Docker 称之为 Repository)提供了庞大的镜像集合供使用。

一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。
在这里插入图片描述

Docker常用命令

官方文档:https://docs.docker.com/reference

镜像命令

#查看内核版本
docker -r

#查看docker版本
docker -v

#查看镜像
docker images

#搜索镜像
docker search java:8

#拉取镜像
docker pull java:8

#删除镜像
docker rmi 镜像id
docker rmi java:8

#镜像推送远端
1、tag修改推送镜像名称
docker tag openjdk:8 远端分组名/openjdk:8
2、push
docker push 远端分组名/openjdk:8

Dockerfile编写

# 基于哪个镜像 
From java:8 
#声明端口
EXPOSE 8080
#指定工作路径-对容器内部
WORKDIR /opt/dockerwork
# 复制文件到容器 
COPY microservice‐eureka‐server‐1.0.0.jar /opt/dockerwork/app.jar
# 配置容器启动后执行的命令 
ENTRYPOINT ["java","‐jar","/opt/dockerwork/app.jar"]

根据Dockerfile构建镜像

docker build -t  microservice‐eureka‐server:1.0.0 .
-t:指定创建的目标镜像名
.:dockerfile所在文件目录,一般把镜像和Dockerfile放在同一目录下
::指定镜像版本号

执行build命令后docker images 可以查看到对应的镜像

容器启动

docker run -d -v /opt/log:/opt/log -v /opt/db:/opt/db -p 8090:8080 microservice‐eureka‐server:1.0.0

-d:后台运行
-v:挂载 宿主目录:容器目录
-p 映射端口 宿主机:容器端口

容器其他命令

#查看启动容器
docker ps
#查看所有容器
docker ps -a
#停止
docker stop 容器id
#启动
docker start 容器id
#重启
docker restart 容器id
#删除,要先停止再删除
docker rm 容器id
#查看容器信息
docker inspect 容器id

#查看容器日志
docker container log 容器id

#进入容器
docker exec -it 容器id /bin/bash

镜像拷贝

#源
#windows
docker save 镜像id> d://home/jdk.tar
#linux
docker save 镜像id> /opt/jdk.tar

#目标主机
docker load --input D:\jdk.tar

docker load --input jdk.tar

#重命名
docker tag 镜像id jdk:8

#镜像反推dockerfile,百度下

docker-compose.yml

version: '3.8' 
services: 
  microservice‐eureka: #指定服务名
  image: microservice‐eureka‐server:1.0.0 #指定镜像名称 
  build: ./eureka #指定Dockfile所在路径 
  ports:
  ‐ "8761:8761" #指定端口映射 
  expose: 
  ‐ 8761 #声明容器对外暴露的端口

启动

docker-compose up

#后台启动
docker-compose up -d

#关闭
docker-compose down

参考:http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值