Docker 笔记(全)

2023-11-08

1、关于Docker

1.1 概念

Docker 是一个开源的应用容器引擎,基于Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
在这里插入图片描述

1.1.1 镜像 image

定义:一个镜像代表着一个软件 如mysql镜像 redis镜像

特点:只读

1.1.2 容器 container

定义:基于某个镜像运行一次就会生成一个程序实例,一个程序实例称之为一个容器

特点:可读可写的

1.1.3 仓库 repository

定义:用来存储docker中所有镜像具体位置

远程仓库:docker在世界范围维护一个唯一远程仓库

本地仓库:当前自己机器中下载镜像存储位置

1.1.4 docker运行流程

在这里插入图片描述

1.2 镜像相关操作

1.2.1 查看docker引擎以及docker帮助命令

docker info  //用来显示docker信息(版本等)
docker --version   //显示docker版本
docker --help  //查看docker所有帮助命令
docker 执行命令格式: docker [options] command(具体命令)

1.2.2 操作镜像images的相关命令

docker images   查看本地仓库中存在哪些镜像
docker pull 镜像:镜像版本号  下载镜像  (查看docker hub)
docker search redis  通过命令行搜索需要镜像

docker image rm  删除镜像
docker image rm -f  强制删除镜像
docker rmi 镜像名   简化删除镜像

1.3 容器相关命令

1.3.1 基本操作1

1、将打包tar镜像文件导入到自己的docker仓库
docker load -i tar文件 
2、通过镜像运行容器
docker run 镜像名:tag    
宿主机端口和容器中端口进行映射 -p (宿主机端口号):(容器中端口号)|==》可以写多个|  后台运行 -d  指定名称 --name
docker run -p 8081(宿主机端口号):8080(容器中端口号) -d --name tomcat1 容器名:tag
3、 查看当前运行的容器
docker ps
4、停止 重启容器的命令
docker start 容器名或id   
docker restart 容器名或id
docker stop 容器名或id     正常停止容器
docker kill 容器名或id		立即停止容器

1.3.2 基本操作2

1、删除容器
删除停止的容器
docker rm 容器名或id 
删除正在运行的容器
docker rm -f 容器名或id 
删除所有的容器
docker rm -f $(docker ps -aq)

2、查看容器呢服务运行日志
 docker logs 容器名或id 
 docker logs -f 容器名或id   ==>实时展示数据
 docker logs -tf  容器名或id   ==》实时展示数据+时间戳
 docker logs --tail N(5) 容器名或id 查看容器末尾5行数据
 
3、查看容器内进程
docker top 容器名或id

4、与容器内部交互
docker exec -it 容器名或id bash(命令行)  进入容器,并与容器内命令终端进行交互

5、操作系统与容器的传输文件
从容器复制文件到操作系统: docker cp 容器唯一标识(id,name):容器内资源路径 操作文件路径/文件目录
从操作系统复制文件到容器  docker cp 文件|目录名 容器唯一标识(id,name):/容器内资源路径

1.3.3 基本操作3

1、查看容器内部细节
docker inspect 容器id|容器名称
2、数据卷 Volume
作用: 实现宿主系统与容器之间的文件共享
数据卷使用:
docker run -d -p 8080:8080 --name tomcat01 -v 宿主机目录(必须是绝对地址):容器目录 tomcat:8.0.53
(1)自定义数据卷目录(适合读写)
docker run -d -p 8081:8080 --name tomcat02 -v /root/apps:/usr/local/tomcat/webapps tomcat:8.0.53
(2)自动数据卷目录(适合只读不写)
docker run -d -p 8082:8080 --name tomcat03 -v aa:/usr/local/tomcat/webapps tomcat:8.0.53
注意:

  1. aa代表一个数据卷名字,名称可以随便写,docker在不存在时自动创建这个数据卷同时自动映射宿主机某个目录
  2. 同时在启动容器时会将aa对应容器目录中全部内容复制到aa映射目录中

3、查询目录
find / -name 文件名
4、将容器打包成一个新的镜像
docker commit -m '描述信息' -a '作者信息' (容器id或者名称) 打包的镜像名称:tag
5、将镜像备份出来(tar文件)
dokcer save 镜像名称:Tag -o 文件名
docker save tomcat:8.0.53 -o test.tar

1.4 docker 镜像原理

1.4.1 镜像定义

一个镜像代表一个软件、软件包,用来打包软件运行环境和基于运行环境开发的软件

它包含运行某个软件所需的所有内容,包括代码、运行时所需要的库、环境变量和配置文件

1.4.2 镜像为什么这么大?

原因:一个软件镜像不仅仅是原来的软件包,它包含软件包所需要的操作系统依赖软件自身依赖以及自身软件包组成

1.4.3 为什么docker镜像采用分层镜像原理

注意:docker在设计镜像时每一个镜像都是有N个镜像共同组成 ==》镜像像一个花卷一层一层组成
原理:
​ UnionFS联合文件系统:就是一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统,联合加载会把各层文件叠加起来,这样最终的文件系统会包括所有底层的文件和目录

1.4.4 为什么采用UnionFS

好处:最大的好处就是资源共享 采用分层机制实现基础层共享,从而减小docker仓库整体体积

1.5 Docker 网络通信机制

docker允许通过外部访问容器或容器互联的方式来提供网络服务

1.5.1 docker容器与操作系统通信机制

在这里插入图片描述

1.5.2 docker网络使用

注意:一般在使用Docker网桥(bridge)实现容器与容器通信时,都是站在一个应用角度进行容器通信

  1. 查看Docker网桥配置
    docker network ls
  2. 创建自定义网桥
docker create ems(网桥名)  ==>`一般使用这种` docker create -d bridge ems  

docker run -d -p 8081:8080 --network ems --name tomcat01 tomcat:8.0.23  172.18.0.2 ==> tomcat01
docker run -d -p 8082:8080 --network ems --name tomcat02 tomcat:8.0.23  172.18.0.3 ==> tomcat02

注意:
一旦在启动容器时指定了网桥之后,日后可以在任何这个网桥关联的容器中使用容器名字进行与其他容器通信
  1. 删除网桥
    docker network rm 网桥名
  2. 查看网桥详细
    docker inspect 网桥名

注意 使用docker run指定 --network网桥时网桥必须存在

1.6 数据卷操作

1.6.1 数据卷作用 volume

用来实现容器和宿主机数据共享

1.6.2 数据卷特点

  1. 数据卷可以在容器之间共享和重用

  2. 对数据卷的修改会立即影响到对应容器

  3. 数据卷的更新修改,不会影响镜像

  4. 数据卷默认会一直存在,即使容器被删除

1.6.3 数据卷操作

  1. 自定义数据卷目录
    docker run -v 绝对路径:容器内路径
  2. 自动创建数据卷
    docker run -v 卷名(随意):容器内路径

1.6.4 docker 操作数据卷指令

  1. 查看数据卷
    docker volume ls
  2. 查看某个数据卷的细节
    docker volume inspect 卷名
  3. 创建数据卷
    docker volume create 卷名
  4. 删除没有使用的数据卷
    docker volume prune
  5. 删除指定数据卷
    docker volume 卷名

1.7 docker 核心架构

在这里插入图片描述

2、基于docker的软件安装

2.1 安装MySQL

1、安装哪个服务去docker hub搜索对应服务的镜像
2、点击进入该服务docker hub 
	a.描述
    b.版本信息
3、确定使用的版本
docker pull mysql:5.7.32
4、如何使用镜像
	a.基本启动mysql服务
	docker run -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.32
	-e MYSQL_ROOT_PASSWORD=root 给root用户指定密码为123456
	b.启动一个mysql服务,后台运行,指定用户密码,指定容器名字
	docker run -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql01 -p 3307:3306 mysql:5.7.32
	c.启动一个mysql服务,后台运行,指定用户密码,指定容器名字,使用数据卷将数据持久化到宿主机系统
	注意:通过docker hub描述得知,MySQL存储数据文件目录放置在容器这个目录 /var/lib/mysql
	docker run -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql01 -v mydata:/var/lib/mysql -p 3307:3306 mysql:5.7.32
	d.启动一个mysql服务,后台运行,指定用户密码,指定容器名字,使用数据卷将数据持久化到宿主机系统,以修改之后的配置文件启动
	docker run -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql01 -v mydata:/var/lib/mysql -v myconfig:/etc/mysql -p 3307:3306 mysql:5.7.32

2.2 安装tomcat

1、下载tomcat服务
docker pull tomcat:8.0.23
2、启动tomcat服务
	a.启动一个基本tomcat服务
	docker run -d -p 8001:8080 --name tomcat01 tomcat:8.0.23
	b.将部署应用项目通过数据卷挂载宿主机系统
	注意: 部署web应用在容器中目录为 /usr/local/tomcat/webapps  配置文件:/usr/local/tomcat/conf
	docker run -d -p 8001:8080 --name tomcat -v apps:usr/local/tomcat/webapps tomcat:8.0.23
	c.修改配置文件,并将应用目录通过数据卷挂载到宿主机系统
	docker run -d -p 8001:8080 --name tomcat -v apps:usr/local/tomcat/webapps -v myconfig:/usr/local/tomcat/conf tomcat:8.0.23

2.3 安装redis

redis配置文件需要自己去官网下载

1、下载redis镜像
docker pull redis:5.0.10
2、启动redis
docker run -d -p 6379:6379 --name redis redis:5.0.10
3、开启redis持久化
docker run -p 6379:6379 --name redis -d -v redisdata:/data redis:5.0.10 redis-server --appendonly yes
注意: 一旦开启持久化之后,持久化生成aof文件会被放入容器中/data目录中
4、修改redis配置文件,以配置文件方式启动(redis配置文件需要自己去官网下载)
注意:在当前/root/redisconf目录中存在redis.conf配置文件
docker run -p 6379:6379 --name redis -d -v /root/redisconf:/usr/local/etc/redis redis:5.0.10 redis-server /usr/local/etc/redis/redis.conf

2.4 安装ES服务(待补充)

3、Dockerfile

3.1 什么是Dockerfile

定义:用来帮助我们自己构建一个自定义镜像 ,Dockerfile成为镜像构建文件、描述文件

3.2 为什么要存在Dockerfile

问题:在dockerhub中官方提供很多镜像已经能满足我们的所有服务了,为什么还需要自定义镜像?

核心作用:日后用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行

3.3 Docker 构建镜像原理

在这里插入图片描述

3.4 Dockerfile 构建Springboot应用

1、开发Springboot应用
2、对Springboot项目应用程序进行打包  
	war  过渡  ===> tomcat
	jar  主流  ===> jdk
3、打包项目       demo-0.0.1-SNAPSHOT.jar
4、在服务器中创建dockerfile上下文目录context
 	a.mkdir demo 这个目录作为context目录  (上下文目录)
 	b.在demo目录中创建Docfile文件 touch dockerfile
 	c.上传应用jar到context目录中
 	d.编写dockerfile
 	
 	FROM openjdk:8-jre  #基于哪个镜像进行构建
    WORKDIR /app   #定义进入容器时默认位置,接下来后续操作工作位置
    ADD demo-0.0.1-SNAPSHOT.jar app.jar #将jar包复制到工作目录 同时修改名字为app.jar
    EXPOSE 8080   #暴露端口8080
    ENTRYPOINT ["java","-jar"]  #启动应用固定命令
    CMD ["app.jar"]  #执行jar名称  (传参)

	e.执行构建
	docker commit -t demo:01 .   demo:01 自定义镜像  .表示当前目录为上下文目录
	f.执行容器
	docker run -d --name demo -p 8080:8080 demo:01

4、 docker compose 使用

4.1 什么是docker compose

compose定位是 定义和运行多个Docker容器的应用 同时对多个容器进行编排

4.2 Compose定位

Compose项目是Dokcer官方开源项目,负责实现对Docker容器集群的快速编排

4.3 Compose 核心概念

服务(Service):一个应用的容器 服务可以存在多个
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义

4.4 Compose使用

a.下载docker-compose
	sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
	sudo chmod +x /usr/local/bin/docker-compose

4.5 检查compose是否安装成功

docker-compose -v

4.6 在yml文件路径下执行docker-compose

docker-compose up

docker-compose.yml

ersion: '3.0' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:
  tomcat:  # 指定服务名称
    image: tomcat:8.0.53
    ports:    # 指定端口映射
      - "8080:8080"

  tomcat01:  # 指定服务名称
    image: tomcat:8.0.53
    ports:    # 指定端口映射
      - "8081:8080"

在这里插入图片描述
在这里插入图片描述

模板命令

docker-compose.yml

version: '3.0' # 表示该 Docker-Compose 文件使用的是 Version 2 file  支持3.8
services:    #用来书写当前项目中那些容器  服务
  tomcat:  # 指定服务名称
    image: tomcat:8.0.53   image:tag
    ports:    # 指定端口映射   -p
      - "8081:8080"
    volumes:
      - /root/apps:/usr/lcoal/tomcat/webapps
      -tomcatwebapps:/usr/local/tomcat/webapps
    
    networks:  #指定容器启动之后使用哪个网桥   --network
      -aa
    command: redis-server  /....  #用来覆盖容器默认启动指令
    command: "redis-server --appendonly yes" 
    environment:             #用来指定容器启动时环境参数
    	- MYSQL_ROOT_PASSWORD=123456

volumes:
   tomcatwebapps: 
     external:   #使用自定义名数据卷
         true
networks:
	aa:
	 external:   #使用自定义网桥
         true

4.7 docker compose模板命令总结

在这里插入图片描述

docker-compose 指令之build

在这里插入图片描述

docker-compose指令使用

在这里插入图片描述

4.8 portainer

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 笔记(全) 的相关文章

  • java处理时间字符串2021-08-04T16:00:00.000Z

    背景 业务中收到了字符串2021 08 04T16 00 00 000Z 也有可能是2021 08 05 或者2021 08 05 12 00 00由于不确定性 需要手动转换时间 直接上代码 public static String int
  • 在webpack中使用monaco-editor

    目录 前言 使用 自己总结的使用过程 1 安装 2 在页面中使用 3 开启辅助功能 4 如何设置菜单中文显示效果 5 编辑器功能 6 monaco editor使用到的JS文件如何压缩 2020年4月28日11 49 58 前言 我查过网上
  • ROS中多个工作空间同时工作

    ROS开发中 有时需要建多个工作空间 将不同的功能包区别开来 但是 多个工作空间会存在相互影响的情况 如何让它们能同时工作且相互不影响 需要技巧 这里需要清楚ROS工作空间的工作原理 本文做个详细介绍 1 ROS PACKAGE PATH环
  • 汽配企业如何把MES管理系统的价值利用到最大化

    随着信息技术的快速发展 越来越多的汽配企业开始引入MES生产管理系统 以提高生产效率 优化资源利用和提升产品质量 然而 要想实现MES系统的最大化价值 汽配企业需要从以下几个方面入手 首先 汽配企业应该充分了解MES系统的功能和特点 并根据
  • git笔记

    git笔记 第一次使用配置 git config global user email you example com git config global user name Your Name 生成ssh key ssh keygen t
  • Matplotlib Intermediate Styling with cycler

    Styling with cycler 自定义属性循环设置的演示以控制多个 line 的图的颜色和其他样式属性 这个例子演示了两种不同的 API 设置 rc 参数 指定默认属性循环 这会影响所有随后的 axes 不会影响已经创建的 axes

随机推荐

  • 论文笔记:Learning Transferable Visual Models From Natural Language Supervision(CLIP)

    1 Intro 目前最先进的CV模型 大部分是现有一个定义好的类别的集合 然后模型通过预测这些提前定义好的类别 从而完成模型的训练 这些提前定义好的类别会大大简化问题本身 但采用了这种有限制性的监督信号 也大大限制了模型的泛化性 尤其是识别
  • 详解Python的切片(Slice)

    先看例子 array 0 1 2 3 4 5 print array print array 1 print array 2 print array 4 1 print array 4 5 print array 10 3 结果是 0 1
  • Ubuntu 12.04 搭建Android开发环境

    Ubuntu 12 04 搭建Android开发环境 2013 7 29 Linux环境下搭建Android开发环境 大部分开发人员可能都在Windows下做开发 可能是感觉在Windows下比较方便 我感觉也是 不过作为一名开发者仅局限在
  • R语言内置颜色色板+生成代码

    R语言内置颜色参照色板 日常使用中 想用一些R语言内置颜色 网上始终没有找到相对齐全的内置色板 于是自己写了一个 R语言内置颜色总共657种 文中代码共生成560种颜色 去掉了部分Grey渐变色 代码如下 RColors 568 col l
  • spring文件上传大小限制,Springboot大于一1G文件上传

    前言 一 SpringMVC简介 1 1 SpringMVC引言 为了使Spring有可插入的MVC架构 SpringFrameWork在Spring基础上开发SpringMVC框架 从而在使用Spring进行WEB开发时可以选择使用Spr
  • 宋浩线性代数笔记(六)二次型

    本章的内容比较少且均通俗易懂 较第三章和第五章容易许多 之后还有针对于数学一的第7更 数二数三的选手已经可以完结撒花
  • Dagger2 设计模式之构建者模式

    Dagger 中的设计模式分析 Builder 模式 DaggerFatherComponent 对象的构建 Dagger 中对 DaggerFatherComponent 对象的构建可以拆分成三部分 一 构建使用 Inject 注解构造函
  • ARMV8体系结构简介:AArch64应用级体系结构之Atomicity

    1 前言 Atomicity是内存访问的一个属性 描述为原子性访问 包括single copy atomicity和multi copy atomicity 2 基本概念 observer 可以发起对memory read write访问的
  • 经典机器学习算法之SVM算法

    本篇文章旨在让完全不懂的小伙伴对该算法有一个初步认识与理解 只适用于小白 如果想深入了解 可以参考本文的参考文章 文章目录 一 算法介绍 1 SVM简介 2 支持向量 二 算法分析 1 线性可分情况 线性可分的理解 找到最优的超平面 2 线
  • 【第四阶段】kotlin语言中的数组类型

    1 kotlin语言中的数组类型 类型 定义 IntArray intArrayOf DoubleArray doubleArrayOf LongArray longArrayOf ShortArray shortArrayOf ByteA
  • 模拟实现内存动态分区分配与回收(完整代码)

    memory类 package memory import java util LinkedList import java util Scanner public class memory private int size 内存大小 pr
  • vscode开发python项目使用flake8、yapf工具格式化pip8编码规范

    前言 使用flake8 yapf工具工具去格式化py文件 有助于生成满足pep8规范 使用快捷键即可完成 提高开发效率 安装配置 1 win10下安装flake8 yapf pip install flake8 pip install ya
  • python 实现批量抠图

    系统 windows10 语言 python 3 6 编辑器 pycharm 安装库 1 paddlepaddle python m pip install paddlepaddle i https mirror baidu com pyp
  • ES Module 和 Commonjs 的区别

    只有静态引入 tree shaking才能够知道哪些引入哪些不引入 动态引入 要引入的代码都没有执行 所以不会引入 所以tree shaking不知道哪些引入哪些不引入
  • 只利用 phpstudy 如何运行PHP文件 超详细教程

    1 先编写好PHP代码 我这里用记事本简单写了一个 2 打开phpstudy 检查下有没有下载PHP环境 启动Apache 3 把编写好的PHP文件复制到phpstudy目录下的www文件中 注 phpstudy可以通过 网站 管理 打开根
  • Vue常见简写 “:“ , “@“ , “#“ :帮助刚入行的伙伴快速看懂代码

    提示 本文仅仅是对Vue中比较常见的简写进行总结 适合刚入行有时看不懂代码的朋友 目录 文章目录 前言 一 是什么 1 是什么意思 2 怎么使用 二 是什么 1 是什么意思 2 怎么使用 三 是什么 1 是什么意思 2 怎么使用 总结 前言
  • JDBC 学习笔记(基础)

    示意图 目录 创建 JDBC 应用 例子 通过本地协议纯 Java 驱动程序实现JDBC 代码具体步骤 1 注册驱动 2 建立与数据库的连接 3 获取执行SQL语句的对象 Statement 4 定义执行 SQL 语句 5 操作结果集对象
  • 100. Same Tree

    Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeNode int x val x left NULL ri
  • 【Java】SpringBoot使用AOP进行日志解析打印+系统异常全局处理配置

    文章目录 前言 一 导入Lombok 二 创建日志打印Model 三 创建日志切面工具类 四 需要用到的一些常量类 五 创建接口请求切面 六 系统异常全局配置 总结 前言 为了方便项目部署在服务器之后 当出现BUG以及某些特殊需求时 会因为
  • Docker 笔记(全)

    1 关于Docker 1 1 概念 Docker 是一个开源的应用容器引擎 基于Go 语言 并遵从 Apache2 0 协议开源 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级 可移植的容器中 然后发布到任何流行的 Linu