Docker容器学习笔记(看了狂神视频)

news2024/10/7 18:24:02

狂神的笔记更加系统详细,推荐大家可以去看狂神的视频教程和笔记。我这里仅根据我自己的需求写的笔记,对于需要快速掌握docker的使用的朋友可以参考学习。

Docker 背景需求

之前,开发一套环境,上线一套环境,环境配置十分麻烦。那么,就有一个美好的希望:发布一个项目时,能够带上环境。
在这里插入图片描述

Docker思想

来自于集装箱,具有隔离性!

容器技术

在容器技术出来之前,是使用虚拟机技术,笨重!

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

镜像( image ) : docker镜像好比一个模板,可以通过这个模板来创建容器服务,例如:Tomcat镜像—>run----->tomcat容器(提供服务器),通过这个镜像可以创建多个容器(服务/项目运行就是在容器中)

容器(container)docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建(有启动,停止,删除等命令)

仓库(repository),公有,私有仓库

在这里插入图片描述

Docker安装

docker命令

systemctl start docker  启动docker
docker version	查看版本
docker images  显示镜像有哪些
docker info 显示docker的系统信息,包括镜像和容器数量
docker --help 万能帮助文档

镜像命令

docker images -q  只显示镜像id
docker search  搜索镜像
docker pull mysql 下载镜像
docker rmi -f $(docker images -aq)   删除镜像
docker rmi -f ***

容器的命令

有了镜像才可以创建容器。

docker run [参数]  镜像       新建容器并启动 
参数说明:
--name = 'xxx'  容器名字
-d   后台方式运行
-it   使用交互方式运行,进入容器查看内容
-p 指定容器端口:-p 8080:8080
-P 随机指定端口
exit   停止容器并退出
ctrl+p+q 不停止退出
docker ps 查看正在运行的容器
docker ps -a 列出所有运行的容器+曾经运行的容器
docker -q  只显示容器编号
 删除容器
 docker rm 容器id
 docker rm -f $(docker ps -aq)  删除所有容器
启动和停止容器的操作
docker start 容器id
docker restart
docker stop
docker kill
docker run  -d 镜像名 #后台启动容器,容器启动后,发现自己没有提供服务,就会立刻停止。
docker logs -tf --tail lo 容器id # 查看日志
ps  查看容器中进程信息
docker top 容器id
docker inspect 容器id  查看镜像元数据
进入当前正在运行的容器
docker exec -it 容器id  /bin/bash   
docker attch 容器id
从容器内拷贝文件到主机
docker cp 容器id:容器内路径  目的主机路径

练习:docker 部署 nginx

在这里插入图片描述

docker pull nginx  #从仓库下载nginx镜像
docker images # 查看镜像列表
docker run -d --name nginx-01 -p 3344:80  nginx   # 用nginx镜像创建名字为nginx-01的容器,并后台运行,设置宿主机端口:容器内部端口 3344:80
docker ps  #查看
curl localhost:3344   #本机查看url端口号
docker exec -it nginx-01 /bin/bash  #进入容器
whereis ngnix
cd /etc/nginx
ls

练习:docker 部署 tomcat

docker pull tomcat:9.0  从仓库下载镜像
docker images  查看镜像
docker run -d -p 3355:8080 --name tomcat01 tomcat  创建并运行容器
docker exec -it tomcat01 /bin/bash  进入容器

可视化

portainer, docker的图形化界面管理工具。提供一个后台面板使用。
下载:

docker run -d -p 8088:9000 restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

docker镜像

镜像,是一种轻量级,可执行的独立软件包,包含运行某个软件所需要的所有内容。

如何得到镜像:

  • 从远程仓库下载
  • 朋友拷贝
  • 自己制作一个镜像 dockerfile

docker镜像加载原理

unionFS(联合文件系统)是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统unionFS。

分层理解

docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部! 这一层就是我们通常说的容器层,容器之下的都叫镜像层。
在这里插入图片描述
在这里插入图片描述

提交镜像

docker commit   -m=“提交的描述信息”  -a=作者  容器id  目标镜像名:tag

例子:

docker run -it -p 3355:8080 tomcat  运行tomcat镜像
docker exec -it 容器id  bin/bash  进入容器
做一些修改操作
docker commit -a="lulu" -m="add webapps app" 容器id tomcat02:1.0   将更改后的容器通过commit 提交为一个镜像

容器数据卷

需求背景:数据可以持久化,不再随着容器删除而丢失!
容器之间可以有一个数据共享的技术,docker容器中产生的数据同步到本地,这就是卷技术!
目录的挂载,将容器内的目录,挂载到linux上面,实现同步。
在这里插入图片描述

使用数据卷

方式一:直接使用命令来挂载(手动挂载)

docker run -it -v 主机目录:容器内目录  镜像名 /bin/bash

具名挂载 匿名挂载 指定路径挂载
-v 容器内路径! #匿名
-v 卷名:容器内路径 #具名
-v /宿主机路径::容器内路径 #指定路径挂载

练习:mysq同步数据

docker  pull mysql:5.7  获取镜像
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d  -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASS WORD=123456 --name mysql01 mysql:5.7  运行容器,需要做数据挂载,且mysq需要配置密码

Dockerfile

dockerfile 就是用来构建docker镜像的构建文件,即命令脚本。dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

dockerfile:构建文件,定义了一切的步骤,源代码
dockerImages:通过dockerfile构建生成的镜像,发布/运行的产品。
docker容器:镜像运行起来提供服务器。

dockerfile方式构建步骤:

  • 编写一个dockerfile文件
  • docker build 构建成一个镜像
  • docker run 运行镜像
  • docker push 发布镜像到仓库(DockerHub,阿里云等)

dockefile指令:

FROM  基础镜像,一切从这里开始
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建时需要运行的命令
ADD 步骤
WORKDIR  镜像的工作目录
VOLUME   挂载的目录
EXPOSE  保留端口设置
CMD  指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  可追加命令
ONBUILD  当构建一个被继承dockerfile ,就运行
ENV  构建的时候设置环境变量

dockerfile语法要求:
每个关键字必须大写
每一个指令都会创建提交一个新的镜像层,并提交!

方式二:在dockerfile中 自动挂载数据卷

mkdir docker-test-volume
vim dockerfile1    #创建一个dockerfile文件,文件中的内容:指令参数
docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos:1.0  #构建镜像
docker run -it 镜像id /bin/bash  #运行镜像

Dockerfile实战

创建一个自己的centos

  1. 编写dockerfile文件:mydockerfile
FROM  centos
MAINTAINER lulu<123.qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo 'end........'
CMD /bin/bash
  1. 根据编写的dockerfile文件,构建镜像
docker build -f mydockerfile -t mycentos:0.1
  1. 基于镜像创建启动容器
docker run -it mycentos:0.1

制作tomcat镜像

  1. 准备镜像文件 tomcat压缩包,jdk压缩包
  2. 编写dockerfile文件,官方命名为‘Dockerfile’,build会自动寻找到这个文件
FROM  centos
MAINTAINER lulu<123.qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-***.tar.gz  /usr/local/
ADD tomcat***.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME  /usr/local/jdk.8.0_11
ENV CLASSPATH  $JAVA_HOME /lib/
ENV CATALINA_HOME /USR/LOCAL/
ENV CATALINA_BASH
ENV PATH
RUN yum -y install vim
EXPOSE 8080
CMD /usr/local/apache-tomact-9.0  /bin/startup.sh && tail -F
  1. 构建
docker build -t diytomcat
  1. 启动
docker run -d p 9090:8080 --name lulutomcat -v /home/lulu/  :  /url/local/
  1. 访问测试
curl localhost 9090
  1. 发布项目(由于做了卷挂载,我们直接在本地编写项目,就可以发布了)

  2. 发布自己的镜像到仓库

Docker网络

理解docker0

linux 可以ping通docker容器内部,容器之间可以互ping通docker会给容器分配ip,docker有一个docker0网卡桥接模式,evth-pair技术,一对虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连,连接各种虚拟设备.
在这里插入图片描述

容器互联 --link (可以通过容器名互联)

–link 就是在hosts配置中增加了一个映射

docker run -d -p --name tomcat03 --link tomcat01 tomcat
docker exec -it tomcat03 ping tomcat02

自定义网络

docker network ls 
网络模式
bridge 桥接
none 不配置网络
host 和宿主机共享网络
container 容器网络连通

docker0 特点,默认,域名不能访问,–link 可以打通连接!
可以自定义一个网络

docker network create --driver bridge --subnet 192.168.0.0/16 --getway 192.168.0.1 mynet
docker network inspect mynet #查看自己的网络
docker run -d -p --name tomcat-net-01 --net mynet tomcat 
docker exec -it tomcat-net-01 ping tomcat-net-02

可以ping通
即自定义的网络,其包含的容器之间可以可以通过名字来ping通。

网络连接 : docker0 ,mynet

在这里插入图片描述

docker network connect mynet tomcat01
可以连通,原理:将tomcat01 放到了mynet网络下,一个容器两个ip地址。

Docker compose

Docker swarm

CI/CD jenkins

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32滴答定时器SysTick精准延时,兼容HAL库和标准库

STM32手册资料下载&#xff1a;STM32资料Github链接&#xff1b;STM32资料Gitee链接&#xff1b; 注意&#xff1a;Github是国外的&#xff0c;要翻墙&#xff0c;Gitee是国内的&#xff0c;无需翻墙。 目录 滴答定时器的功能 模块化思想 什么叫做模块化 如何利用keil实现…

用 Wireshark 让你看见 TCP 到底是什么样!

本文为掘金社区首发签约文章&#xff0c;14天内禁止转载&#xff0c;14天后未获授权禁止转载&#xff0c;侵权必究&#xff01; 莫听穿林打叶声&#xff0c;何妨吟啸且徐行。 前言 当你看到这篇文章时&#xff0c;你只能看到已经渲染好的文字和图像&#xff0c;而网络数据的交…

rk3588硬件构成-rock5b

前言 rk3588是瑞芯微的一套新的arm64的板子&#xff0c;上一代用的比较多的是rk3399&#xff0c;新的硬件设备比之前更强大&#xff0c;接口更多&#xff0c;本系列就是介绍相关的硬件软件的一些资料&#xff0c;后面会根据不同的使用进行分篇的介绍 很多资料官网有提供&…

深度学习与总结JVM专辑(四):类文件结构(图文+代码)

类文件结构概述无关性的基石Class类文件结构前言字节码文件结构属性魔数与Class文件的版本号魔数版本号常量池反编译软件访问标志类索引&#xff0c;父类索引与接口索引集合字段表集合方法表集合属性表集合Code属性attribute_name_indexmax_stackmax_localscode_length和codeja…

视频卡顿率测试方法

一、背景介绍 视频流畅性测试是视频质量评估一个重要的指标。一般的获取方法是在渲染前增加统计信息。不过这种方法需要增加额外工作量&#xff0c;并且也不是用户直接的体验数据。 这里介绍一种基于时域运动指标/平均相关位置像素差&#xff08;TI&#xff1a;temporal info…

Android Camera性能分析 第24讲 录像Buffer Path帧率统计

​ 本讲是Android Camera性能分析专题的第24讲&#xff0c;我们介绍录像Buffer Path帧率统计&#xff0c;包括如下内容&#xff1a; 从GraphicBufferSource统计录像Buffer Path帧率Video Codec角度统计视频帧率Video Codec2角度统计视频帧率 视频在线观看&#xff1a; 极客笔…

Nacos Discovery--服务治理

目录 一&#xff0c;服务治理介绍 二&#xff0c;nacos简介 nacos实战入门 搭建nacos环境 第1步: 安装nacos 第2步: 启动nacos 第3步: 访问nacos 将商品微服务注册到nacos 1 在shop-common模块的pom.xml中添加nacos的依赖 注意在父模块中是否导入了alibaba 2 在主类上添加E…

Altium Designer智能粘贴命令的使用教程

怎么样等间距的复制很多过孔&#xff1f;怎么带网络的复制走线&#xff1f;又或者是怎么样把元件的位号及网络从当前的这个PCB调用到另一个PCB板中呢&#xff1f;PCB设计当中经常会遇到这些问题&#xff0c;可以使用特殊粘贴也可以称为智能粘贴法来实现。 1、选中需要复制的元素…

微信小程序 视频列表滑动无限循环(仿抖音)

一、写在前面&#xff1a; 1:安卓ios表现基本一致&#xff0c;不是swiper组件实现&#xff0c;滑动效果流畅不卡顿&#xff0c;实现了列表无限循环。不是使用官方的腾讯视频播放组件&#xff0c;完整代码在下面 2:实现功能&#xff1a;支持位置导航、拨打电话、复制微信号、分…

如何实现fastdds的topic调试工具

在使用fastdds进行实际的开发调试中发现&#xff0c;常常需要对已经发布的话题进行进一步的调试&#xff0c;比如话题存在&#xff0c;话题内容&#xff0c;话题频率等等信息都需要确认&#xff0c;尤其是话题内容。这时候就需要一个能进行这项操作的调试工具。可能对于用过ros…

hit_os_lab2 操作系统启动

前置知识 1.1 基础概念 入理论课程的学习。 如果网易云上的课程无法查看&#xff0c;也可以看 Bilibili 上的 操作系统哈尔滨工业大学李治军老师。 L2 开始揭开钢琴的盖子L3 操作系统启动 同济大学赵炯博士的《Linux 内核 0.11 完全注释&#xff08;修正版 V3.0&#xff09…

防火墙练习实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 二. 实验命令 一.实验图纸 二. 实验命令 ciscoasa> en Password: ciscoasa# co…

DJ12-2-4 串操作指令

目录 1. REP 重复前缀 2. 串操作指令的基本概念 3. 串操作指令的指令类型 &#xff08;1&#xff09;串传送指令 MOVS &#xff08;2&#xff09;串传送指令 CMPS &#xff08;3&#xff09;串扫描指令 SCAS &#xff08;4&#xff09;串装入指令 LODS &#xff08;5&a…

如果把网络原理倒过来看,从无到有,一切如此清晰(下)

人生若只如初见。 前言 当我在台灯下&#xff0c;听着远隔17年前五月天的歌&#xff0c;而在数日后&#xff0c;我的文字也会纵使相隔万里远的来到你的屏幕前&#xff0c;就觉得这一切妙不可言。 OSI 网络七层模型 《如果把网络原理倒过来看&#xff0c;从无到有&#xff0c…

Metabase学习教程:仪表盘-5

如何进行时间段比较 我们通过不同的方法来比较一个指标在不同日期范围内的表现。 我们将研究不同的策略来比较两个不同时期的指标&#xff0c;比如将本周与上周、去年同期与上一周进行比较。我们将使用Metabase附带的示例数据库&#xff0c;这样您就可以继续学习了。这个示例…

【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、Vulkan简介 Vulkan是一个跨平台的图形绘制接口&#xff0c;被称为下一代OpenGL&#xff0c;因为尽管OpenGL提供了丰富的图形API&#xff0c;但他在底层实现的C代码早已封装起来&#xff0c;由于开发者修改不了底层代码&#xf…

社区系统项目复盘-5

文章目录Kafka消息队列实现系统通知功能什么是Kafka&#xff1f;Spring是怎么整合Kafka的&#xff1f;发送系统通知显示系统通知Kafka消息队列实现系统通知功能 阻塞队列 可以用阻塞队列来实现消息队列&#xff0c;阻塞队列是一个接口&#xff1a;BlockingQueue&#xff0c;可以…

易云维医院后勤综合管理平台为医院智慧后勤的建设与发展做出贡献

近年来&#xff0c;随着国家医疗卫生改革进程的不断推进&#xff0c;越来越多的医院开始关注运营成本控制问题&#xff0c;医院后勤管理服务模式的创新和优化变得越来越重要。利用医院后勤综合管理平台将医院后勤管理信息化将极大地提高医院智慧后勤建设与发展。在这种形势下&a…

Mac下安装Hadoop

1、引言 如果想在Mac下安装Hadoop而且让Hadoop能正常运行&#xff0c;那安装之前需要先安装java&#xff0c;在Mac环境下安装Hadoop。 2、配置ssh环境 在Mac下如果想使用Hadoop&#xff0c;必须要配置ssh环境&#xff0c; 如果不执行这一步&#xff0c;后面启动hadoop时会出现…

Spring MVC应该怎么学?这份教程带你快速入门,深入剖析源码!

前言: 什么是MVC&#xff1f; MVC&#xff08;Model-View-Controller&#xff09;&#xff1a;它是一种软件架构设计模式&#xff0c;分为三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;业务的数据模型&#xff1b; View&#xff08;视图&#xff09;&…