Docker-使用篇

2023-05-16

文章目录

  • 一、Docker镜像和容器
    • ①、镜像命令
      • 镜像下载(pull)
      • 查看镜像(images)
      • 镜像搜索(search)
      • 删除镜像(rmi)
    • ②、容器命令
      • 新建并启动容器(run)
      • 列出容器(ps)
      • 终止容器(stop)
      • 重新启动(restart)
      • 进入容器(exec)
      • 删除容器(rm)
      • 从容器拷贝文件到主机上
      • 退出
      • 查看日志
    • ③、查看容器里面的进程
  • 二、Docker容器数据卷
    • ①、配置数据卷
    • ②、数据卷容器
      • ●创建一个自定义容器
      • ●●查看所有容器卷
      • ●●●查看指定容器卷详情信息
      • ●●●●删除数据卷
      • 使用指定卷容器
  • 三、DockerFile
    • ①、入门镜像
      • ●构建镜像文件
      • ●●构建镜像
    • ②、基础命令
      • FROM —— 指定基础镜像
      • MAINTAINER —— 维护者信息
      • WORKDIR —— 类似于cd命令
    • ③、构建命令
      • RUN —— 执行命令
      • ADD —— 添加本地文件
      • COPY—— 类似ADD
      • CMD —— RUN指令相似
    • ④、配置命令
      • ENTRYPOINT —— RUN指令相似
      • ENV —— 设置环境变量
      • EXPOSE —— 设置端口
      • VOLUME —— 数据卷
      • USER —— 运行权限
      • ONBUILD —— 基座
    • ⑤、RUN、CMD、ENTRYPOINT区别
    • ⑥、自定义tomcat镜像
        • 编写dockerfile 文件
        • docker build构建
        • docker run运行
  • 四、Docker网络管理
    • ①、evth-pair技术
    • ②、容器互联
    • ③、四种网络模式
    • ①、自定义网络
      • ●创建局域网络
      • ●●容器连接新网络
      • ●●●查看容器网络情况
      • ★★★指定网络模式
  • 五、Docker镜像管理
    • ①、DockerHub 基本命令

一、Docker镜像和容器

①、镜像命令

Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

镜像下载(pull)

docker pull 镜像名字:[版本]
  • 注意:
    如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。

查看镜像(images)

docker images

镜像搜索(search)

docker search [镜像名字]:[版本]

删除镜像(rmi)

docker rmi 源名字
docker rmi image id

②、容器命令

新建并启动容器(run)

  • 守护态运行
docker run -d 镜像名字 
  • 创建容器(create)
docker create -it 镜像名字
  • 创建运行容器
docker run 镜像名字 /bin/echo 
  • 参数:
    • -t 选项让Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
    • -i 则让容器的标准输入保持打开。
    • -p 我们以后使用3307 端口来访问mysql 为了防止黑客攻击
    • -e 配置环境变量 MYSQL_ROOT_PASSWORD 设置容器内mysql root 密码

列出容器(ps)

docker ps
  • 参数:
    • -a: 显示未启动容器
    • -q:返回容器id号

终止容器(stop)

docker stop 容器id

重新启动(restart)

  • 启动
docker start 容器id
  • 重新启动
docker restart 容器id

进入容器(exec)

docker exec -it 容器id /bin/bash
  • 进入容器(attach)
docker attach 容器id

删除容器(rm)

docker rm 容器id
  • 参数:
    • -f, --force=false强行终止并删除一个运行中的容器。
    • -l, --link=false删除容器的连接,但保留容器。
    • -V,–volumes=false删除容器挂载的数据卷。

从容器拷贝文件到主机上

docker cp 容器id:容器内路径   目录路径

退出

  • 直接停止同期并退出
exit  
  • 容器不停止 并退出
Ctrt + p + q

查看日志

docker logs 容器id
  • 参数:
    • -f, --follow 跟踪实时日志
    • –since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
    • –tail string 从日志末尾显示多少行日志, 默认是all
    • -t, --timestamps 显示时间戳
    • –until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

③、查看容器里面的进程

docker top 容器id

二、Docker容器数据卷

①、配置数据卷

docker run -v 宿主机目录(文件):容器内目录(文件) 
  • 注意事项
    • 目录必须是绝对路径
    • 如果目录不存在则会自动创建
    • 可以挂载多个数据卷

②、数据卷容器

docker volume 参数
  • 参数:
    • create # 创建数据卷
      inspect # 查看数据卷元数据
      ls # 查看数据卷列表
      prune # 删除所有未使用的卷
      rm # 删除数据卷

●创建一个自定义容器

docker volume create 容器卷-名

●●查看所有容器卷

docker volume ls

●●●查看指定容器卷详情信息

docker volume inspect 容器卷-名

●●●●删除数据卷

docker volume rm 容器卷-名

使用指定卷容器

有了自定义容器卷,我们可以创建一个使用这个数据卷的容器,这里我们以tomcat为例:

docker run -d -it --name=edc-tomcat -p 8080:8080 -v 容器卷-名:/usr/local/tomcat/webapps tomcat

-v代表挂载数据卷,这里使用自定数据卷edc-tomcat-vol,并且将数据卷挂载到/usr/local/tomcat/webapps 。如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。

三、DockerFile

  • 基本结构

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44NuK8IW-1673922371733)(C:/Users/Administrator/Desktop/%E6%96%87%E6%A1%A3%E6%9F%A5%E6%89%BE/Markdown/Markdown/images/03.docker/DockerFile.png)]

①、入门镜像

  • Dockerfile 四部分说明:
    • 一开始必须要指明所基于的镜像名称, 关键字是FROM, 这是必须的.
    • 接下来是维护者信息关键字是MAINTAINER, 非必须, 但良好的习惯有利于后期的职责明确.
    • 后面是镜像操作指令, 如RUN等, 每执行一条RUN命令,镜像添加新的一层.
    • 最后是CMD指令,来指明运行容器时的操作命令

●构建镜像文件

在一个空白的文本文件, 命名为Dockerfile

vim Dockerfile

●●构建镜像

. 镜像文件目录执行

docker build -t 镜像名字:版本 .

②、基础命令

FROM —— 指定基础镜像

指定基础镜像,必须为第一个命令。

FROM <image>:<tag> 
  • 注意:
    • tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

MAINTAINER —— 维护者信息

维护者信息

MAINTAINER <name>

WORKDIR —— 类似于cd命令

工作目录,类似于cd命令

WORKDIR /usr/workdir
  • 注意:
    • 通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

③、构建命令

RUN —— 执行命令

构建镜像时执行的命令

# 1. shell执行格式 
RUN <命令>

# 2. exec执行格式 
RUN ["executable", "param1", "param2"]
  • 注意:
    • RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定–no-cache参数,如:docker build --no-cache

ADD —— 添加本地文件

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。

ADD <本地文件>... <放置文件镜像目录>    

ADD ["<src>",... "<dest>"] 用于支持包含空格的路径示例:

COPY—— 类似ADD

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

COPY <源路径> <目标路径> 

CMD —— RUN指令相似

  • 构建容器后调用,也就是在容器启动时才进行调用。指定这个容器启动的时候要运行的命令只有最后一个会生效可被替换。
  • CMD指令与RUN指令相似
# shell格式
CMD <命令>

# exec格式
CMD ["可执行文件", "参数1", "参数2", …]

④、配置命令

ENTRYPOINT —— RUN指令相似

配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

指定容器启动的要运行的命令,可以追加命令

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2 (shell内部命令) 
  • 注意:
    • ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

ENV —— 设置环境变量

这个指令非常简单,就是用于设置环境变量而已,无论是接下来的指令,还是在容器中运行的程序,都可以使用这里定义的环境变量。

ENV JAVA_HOME=/usr/local/jdk1.7.0_79
ENV PATH=$JAVA_HOME/bin:$PATH
ENV <key>=<value>

EXPOSE —— 设置端口

指定于外界交互的端口

EXPOSE <port>
  • 注意:
    • EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

VOLUME —— 数据卷

用于指定持久化目录

VOLUME ["/path/to/dir"]
  • 注意:
    • 一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
      • 卷可以容器间共享和重用
      • 容器并不一定要和其它容器共享卷
      • 修改卷后会立即生效
      • 对卷的修改不会对镜像产生影响
      • 卷会一直存在,直到没有任何容器在使用它

USER —— 运行权限

USER 指令用于将会用以什么样的用户去运行

USER userUSER:group
  • 注意:
    • 使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过 docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

ONBUILD —— 基座

帮助别人定制而准备的

ONBUILD [INSTRUCTION]

⑤、RUN、CMD、ENTRYPOINT区别

  • 区别:
  1. RUN:执行命令并创建新的Image
  2. CMD: 设置容器启动后默认执行的命令和参数
  3. ENTRYPOINT:设置容器启动时运行的命令
  • CMD #指定这个容器启动的时候要运行的命令,可被替换
  • ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令

⑥、自定义tomcat镜像

编写dockerfile 文件

#基础镜像
FROM java:8

#维护者
MAINTAINER itxiong<itxiogn@163.com>

#拷贝tomcat包
ADD ./apache-tomcat-9.0.50.tar.gz /usr/local

#设置工作目录
WORKDIR /usr/local

#设置tomcat环境变量
ENV TOMCAT_HOME=/usr/local/apache-tomcat-9.0.50
ENV PATH=$PATH:$TOMCAT_HOME/bin

#保留端口
EXPOSE 8080

#启动容器运行命令
CMD startup.sh && tail -F catatlina.out

docker build构建

docker build -t 镜像名字:版本 .

docker run运行

docker run xxx

四、Docker网络管理

①、evth-pair技术

evth-pair 就是一对的虚拟设备接口,它们都是成对出现,一段彼此连接。 正是因为这个特性,evth-parit桥梁。 连接各种各样网络设备。

②、容器互联

--link <name or id>:alias
  • 参数:

    • name和id是源容器的name和id,alias是源容器在link下的别名。
  • docker run --name tomcat01 --link tomcat02 -d -P tomcat

③、四种网络模式

  • Host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

  • Container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。

  • None模式

这种网络模式下容器只有io回环网络,没有其他网卡。none模式可以在容器创建时通过–network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

  • Bridge模式

bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。

①、自定义网络

  • 基础命令
docker network --help
命令名称说明
docker network connect将容器连接到网络
docker network create创建一个网络
docker network disconnect断开容器的网络
docker network inspect显示一个或多个网络的详细信息
docker network ls列出网络
docker network prune删除所有未使用的网络
docker network rm删除一个或多个网络

●创建局域网络

docker network create --driver 桥接方式 --subnet 网段范围 --gateway 路由 网络名
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
- 注意:
  - --driver:网络模式。bridge -网络模式桥连接
  - --subnet:网段范围。
    - 192.168.200.0/24命令指定该网络模式网段范围,其中24代表该网段前24位相同,后8位不同,即该网段范围为:192.168.200.1~192.168.200.254,
    - 若该命令改为192.168.200.0/16,即该网段范围为: 192.168.0.1-192.168.255.254,这个范围就变的很大了。
  - gateway - 路由
  - mynet- 自定义网络名

●●容器连接新网络

将容器连接到新建网络

docker network connect 网络名 容器名

●●●查看容器网络情况

docker network inspect 容器名

★★★指定网络模式

docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式

docker run -d -P --name tomcat01 --net mynet tomcat:test3
docker run -d -P --name tomcat02 --net mynet tomcat:test3
docker exec -it tomcat01 ping tomcat02
# 查看自定义网络信息
docker network inspect mynet
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID指定

五、Docker镜像管理

官方DockerHub :https://hub.docker.com/signup

①、DockerHub 基本命令

  • 连接
docker login --username=kalista
  • 注意:
    • 填写注册Docker Hub的密码。
  • 把容器提交到docker hub上
docker commit -m "镜像描述" -a "作者" 容器id/容器名字 远程库的名字:上传到dockerhub上的名字
  • 注意:
    • -m 镜像描述
    • -a 作者
  • 将镜像,容器,远程库进行标识
docker tag 镜像id 远程库的名字:上传到dockerhub上的名字
  • 将于远程库有标识关系的库提交
docker push 远程库的名字:上传到dockerhub上的名字
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker-使用篇 的相关文章

随机推荐

  • VUE3的setup函数

    文章目录 目录 文章目录 前言 一 setup函数是什么 xff1f 二 使用步骤 三 vue3中文文档和面向vue3的组件库 总结 前言 Vue3是一个面向数据驱动的渐进式JavaScript框架 xff0c 其的设计理念包括简洁 灵活和
  • 几种实现promise队列的方法

    第一种 xff1a 使用map实现promise队列 初始值为promise resolve 为成功状态 xff0c 每次成功都返回一个promise xff0c 依次执行 span class token keyword function
  • SD卡在烧录镜像系统之后恢复正常使用

    问题 xff1a 我们知道发现镜像系统烧录完毕以后将SD卡插入电脑 xff0c 电脑会找不到SD卡 xff0c 也无法读取SD卡显示 实际是可以的只是不能正常显示出来 xff0c 这是正常现象 如果我们的开发板 xff08 如jetson
  • 手工制作F450四旋翼无人机的工具准备以及apm调参 GPS调参等相关工作

    F450 是一款大量航模爱好者都很喜欢的一款无人机结构 xff0c 很多想动手制作无人机的同学 xff0c 都是从这一款机型开始的 xff0c 当然我也是 xff0c 在制作一款无人机 xff0c 我们需要以下部件准备 xff0c 1 xf
  • git合并分支

    前提 xff1a 所有开发在develop xff0c 最后合并到master 1 从master建立本地分支temp xff0c git checkout b temp xff0c 这个temp分支不要发布到远程仓库 xff1b 2 在t
  • Java基础笔记一

    Java基础笔记一 本文章是作者学习B站系列视频 狂神说Java 的记录笔记与心得 xff0c 创作不易 xff0c 希望能够得到您的支持 Java程序运行机制 编译型 xff1a 完整编译 Java编译器将 java 文件编译为 clas
  • 树莓派4b入门以及各种系统烧录问题分享

    文章目录 前言一 买一个树莓派二 上系统三 系统烧录故障情况1 固件问题2 验证失败3 插入主板 xff0c 报错 xff1a VFS Unable to mount root fs on unknown block 179 2 1 重新格
  • gazebo保存world时出现问题

    gazebo保存world时出现没反应 xff0c 以为卡死了 xff0c 可最小化的时候能看到保存界面弹出 可以每次最小化再放大 xff0c 以此刷新界面 xff0c 一步一步保存
  • Windows向日葵连接Ubuntu时“连接已断开”解决方案

    环境 控制端 xff1a Windows10 系统 xff0c 向日葵版本12 5 1 44969 被控端 xff1a Ubuntu20 04 系统 xff08 默认gdm3桌面 xff09 xff0c 向日葵版本11 0 0 36662
  • [调参神器]使用VOFA+上位机进行PID调参(附下位机代码)

    1 VOFA 43 是啥 简单地来说 xff0c VOFA 43 是一个超级串口助手 xff0c 除了可以实现一般串口助手的串口数据收发 xff0c 它还可以实现数据绘图 xff08 包括直方图 FFT图 xff09 xff0c 控件编辑
  • visual studio 2022 调试时如何1、打开监视窗口;2、监视窗口无法输入问题

    1 如何打开监视窗口 xff1a 注意要先点击调试 xff0c 不然没有这个窗口 2 如果窗口显灰色 xff0c 说明当前调试状态没有中断 xff0c 而只有中断的时候才可以输入或修改 3 点击调试里的 全部中断 后就可以输入了 xff01
  • 单片机学习——定时器/计数器

    单片机必学系列 单片机学习 中断系统 单片机学习 存储器详解 xff08 程序存储器 片内RAM 拓展RAM EEPROM xff09 单片机学习 定时器 计数器 单片机学习 A D转换 更新ing 单片机学习 定时器 计数器 单片机必学系
  • C++的动态多态性理解

    多态 xff1a 指允许不同类的对象对同一消息做出响应 即同一消息可以根据发送对象的不同而采用多种不同的行为方式 xff08 发送消息就是函数调用 xff09 像我们之前学的函数重载和符号重载都是多态现象 例 xff1a 使用运算符 43
  • Hadoop伪分布集群配置(我用的是VMwareWorkstation)

    1 虚拟机环境准备 xff1a 1 0 xff09 首先准备好一台已经安装好了的虚拟机 我这里用的是Centos 2 0 xff09 安装 vim 编辑器 使用 yum y install vim 也可以直接用vi 注意 xff1a 安装好
  • fork函数的用法

    1 头文件 include lt sys types h gt inlcude lt unistd h gt 2 函数原型 pid t fork void 函数参数 xff1a void 3 fork函数功能 fork xff08 xff0
  • gitee配置流水线实现自动打包vue

    1 任务编排 xff1a 第1步 xff1a 创建一个构建任务 xff0c 选择nodejs xff1b 第2步 xff1a 编写构建命令 设置NPM源 xff0c 提升安装速度 npm config set registry https
  • Linux操作系统:Firewalld防火墙

    Linux操作系统 xff1a Firewalld 防火墙 课堂引入 xff1a Linux防火墙是通过netfilter来处理的 xff0c 它是内核级别的框架 iptables被作为netfilter的用户态抽象层 xff0c ipta
  • 全景图拼接

    目录 一 图像拼接基本流程 二 RANSAC 随机一致性采样 2 1 RANSAC基本思想 xff1a 数据中包含正确的点和噪声点 xff0c 合理的模型应该能够在描述正确数据点的同时摒弃噪声点 2 2 RANSAC基本流程 xff1a 2
  • 11. JS操作节点续(2) + DOM 重点核心

    关于dom操作 xff0c 我们主要针对于元素的操作 主要有创建 增 删 改 查 属性操作 事件操作 DOM xff1a 我们获取过来的DOM元素是一个对象 xff08 object xff09 xff0c 所以称为 文档对象模型 创建 d
  • Docker-使用篇

    文章目录 一 Docker镜像和容器 镜像命令镜像下载 xff08 pull xff09 查看镜像 xff08 images xff09 镜像搜索 xff08 search xff09 删除镜像 xff08 rmi xff09 容器命令新建