【云原生系列】Docker学习

news2025/1/20 3:35:22

目录

一、Docker常用命令

1 基础命令

2 镜像命令

2.1 docker images 查看本地主机的所有镜像

2.2 docker search 搜索镜像

2.3 docker pull 镜像名[:tag] 下载镜像

2.4 docker rmi 删除镜像

2.5 docker build 构建镜像

3 容器命令

3.1 如拉取一个centos镜像

3.2 运行容器

3.3 进入容器

3.4 退出容器

3.5 列出运行过的容器

3.6 删除容器

3.7 启动和停止容器

4 docker网络

4.1 查看docker网络列表

4.2 查看网络详细信息

5 docker挂载

5.1 查看volume网络列表

5.2 查看volume详细信息

二、dockerfile文件

1 规则

2 示例

3 使用-P和EXPOSE发布随机端口

三、docker compose

1 Compose常用命令

2 示例


一、Docker常用命令

1 基础命令

docker version          #查看docker的版本信息
docker info             #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help       #帮助命令(可查看可选的参数)
docker COMMAND --help

命令的帮助文档地址:docker | Docker Docs

2 镜像命令

2.1 docker images 查看本地主机的所有镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

#解释:

1.REPOSITORY  镜像的仓库源

2.TAG  镜像的标签

3.IMAGE ID 镜像的id

4.CREATED 镜像的创建时间

5.SIZE 镜像的大小

# 可选参数

-a/--all 列出所有镜像

-q/--quiet 只显示镜像的id

2.2 docker search 搜索镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10308     [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3819      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   517       [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]


#可选参数

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
      
# 搜索收藏数大于3000的镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10308     [OK]
mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]


2.3 docker pull 镜像名[:tag] 下载镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql

# 指定版本下载
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7

2.4 docker rmi 删除镜像

#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  $(docker images -aq)

2.5 docker build 构建镜像

-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;

# 会看到 docker build 命令最后有一个.     . 表示当前目录
docker build -t 新镜像名字:版本号 .

3 容器命令

3.1 如拉取一个centos镜像

docker pull centos

3.2 运行容器

docker run [可选参数] image
#参数说明
--name="名字"           指定容器名字
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
(
-p ip:主机端口:容器端口  配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P                     随机指定端口(大写的P)

3.3 进入容器

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
[root@bd1b8900c547 /]# ls      
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

3.4 退出容器

#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q  不停止容器退出
[root@bd1b8900c547 /]# exit
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]#

3.5 列出运行过的容器

#docker ps 
     # 列出当前正在运行的容器
-a   # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q   # 只显示容器的编号


[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago             optimistic_shtern
bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             cool_tesla
cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               optimistic_darwin

3.6 删除容器

docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

3.7 启动和停止容器

docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器

4 docker网络

4.1 查看docker网络列表

docker network ls

4.2 查看网络详细信息

docker inspect 网络名

5 docker挂载

5.1 查看volume网络列表

docker volume ls

5.2 查看volume详细信息

docker inspect 挂载名

windows上启动没有指定路径,默认挂载路径/var/lib/docker/volumes/xxx/_data

在资源管理中输入

  • For Docker version 20.10.+ : \\wsl$\docker-desktop-data\data\docker\volumes
  • For Docker Engine v19.03: \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

二、dockerfile文件

dockerfile是用来构建docker镜像的文件!命令参数脚本!

1 规则

1.每条保留字指令都必须都为大写,且后面都要至少一个参数

2.指令按照从上到下,顺序执行

3.每条指令都会创建一个新的镜像层,并对镜像进行提交

关键字

作用

FROM

当前镜像是基于那个镜像的(第一个指令必须是FROM)

RUN

构建镜像时需要运行的指令。可以安装各种依赖

EXPOSE

当前容器对外暴露的端口号(只是声明,没有实际意义)

WORKDIR

指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点

如果WORKDIR的路径不存在,也会进行创建该路径

ADD

将宿主机目录下的文件拷贝进镜像。且ADD命令会自动处理下载URL和解压tar包

ADD aa.txt . 将aa.txt拷贝到容器当前路径下

ADD URL . 某文件URL下载地址下载到当前路径下

COPY

类似于ADD,拷贝文件和目录到镜像中

ENV

用来在构建镜像过程中设置环境变量

VOLUME

容器数据卷,用于数据保存和持久化工作(只是声明,没有实际意义)

CMD

指定一个容器启动时要运行的命令

可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

CMD和ENTRYPOINT区别?

1.CMD里面命令如果在运行容器时进行覆盖

docker run 镜像:版本号 覆盖自己定义命令

2.ENTRYPOINT里面命令如何在运行容器时进行覆盖

docker run --entrypoint=覆盖指令 镜像:版本号 传递参数

2 示例

web项目docker部署,打成镜像。dockerfile文件:

# 设置本镜像需要使用的基础镜像
FROM openjdk:8

#ENV APP_PATH = /home/toolset
#
#WORKDIR $APP_PATH

# 把jar包添加到镜像中
ADD toolset-0.0.1-SNAPSHOT.jar /home/toolset/toolset-0.0.1-SNAPSHOT.jar

# 镜像暴露的端口
EXPOSE 9090


# 容器启动命令
#ENTRYPOINT ["sh", "-c", "echo ${APP_PATH}"]
ENTRYPOINT ["java", "-jar", "/home/toolset/toolset-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=test"]

# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

构建镜像和创建容器

# 构建镜像
docker build -t tooset:1.0 .

# 创建容器
docker run -p 9090:9090 --name tooset tooset:1.0

3 使用-P和EXPOSE发布随机端口

因为EXPOSE通常只是作为记录机制,也就是告诉用户哪些端口会提供服务,Docker可以很容易地把Dockerfile里的EXPOSE指令转换成特定的端口绑定规则。只需要在运行时加上-P参数,Docker会自动为用户创建端口映射规则,并且帮助避免端口映射的冲突。

添加如下行到上文使用的Web应用Dockerfile里:

EXPOSE 1000

EXPOSE 2000

EXPOSE 3000


构建镜像,命名为exposed-ports。

docker build -t exposed-ports .


再次用-P参数运行,但是不传入任何特定的-p规则。可以看到Docker会将EXPOSE指令相关的每个端口映射到宿主机的端口上:

$ docker run -d -P --name exposed-ports-in-dockerfile exposed-ports 
63264dae9db85c5d667a37dac77e0da7c8d2d699f49b69ba992485242160ad3a 
$ docker port exposed-ports-in-dockerfile
1000/tcp -> 0.0.0.0:49156 
2000/tcp -> 0.0.0.0:49157 
3000/tcp -> 0.0.0.0:49158

三、docker compose

1 Compose常用命令

docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose ps                      		  # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                          # 展示当前docker-compose编排过的容器进程
docker-compose restart [service]  					# 重启服务
docker-compose start [service]    					# 启动服务
docker-compose stop [service]     					# 停止服务

docker-compose config     					        # 检查配置,输出docker-compose.yml的配置信息
docker-compose config -q  					        # 检查配置,有问题才有输出

2 示例

工具集toolset项目docker compose部署

GitHub - liangjiabao-5/toolset-dockercompose

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

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

相关文章

.env文件详解

.env配置文件 vue会根据 process.env.NODE_ENV 的值,自动加载对应的环境配置文件 .env 全局默认配置文件,在所有的环境中被载入;.env.production 生产环境文件 production;.env.development 开发环境文件 development;.env.test/.env.stagi…

从零开始完整实现-循环神经网络RNN

一 简介 使用 pytorch 搭建循环神经网络RNN,循环神经网络(Recurrent Neural Network,RNN)是一类用于 处理序列数据的神经网络架构。与传统神经网络不同,RNN 具有内部循环结构,可以在处理序列数据时保持状态…

MySQL基础篇:掌握数据库基本操作,轻松上手

查看和指定现有的数据库 mysql> show databases; -------------------- | Database | -------------------- | information_schema | | bjpowernode | | eladmin | | mysql | | performance_schema | | sqlalchemy | | s…

makefile之使用函数wildcard和patsubst

Makefile之调用函数 调用makefile机制实现的一些函数 $(function arguments) : function是函数名,arguments是该函数的参数 参数和函数名用空格或Tab分隔,如果有多个参数,之间用逗号隔开. wildcard函数:让通配符在makefile文件中使用有效果 $(wildcard pattern) 输入只有一个参…

Qt串口基本设置与协议收发

前言 1.一直都想要做一个Qt上位机,趁着这个周末有时间,动手写一下 2.comboBox没有点击的信号,所以做了一个触发的功能 3.Qt的数据类型很奇怪,转来转去的我也搞得很迷糊 4.给自己挖个坑,下一期做一个查看波形的上位…

Java输入-a,-b,geek,-c,888,-d,[hello,world]字符之后,如何将[hello,world]这个不分开

Java输入-a,-b,geek,-c,888,-d,[hello,world]字符之后,如何将[hello,world]这个不分开? 你可以使用命令行参数解析库来处理Java输入中的各个参数。在这种情况下,你可以使用Apache Commons CLI库来解析命令行参数。以下是一个示例代码片段&am…

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题实例 1、问题描述 已知配送中心和需求门店的地理位置,并且已经获得各个门店的需求量。关于送货时间的要求,门店都有规定的时间窗,对于超过规定时间窗外的配送时间会产生相应的惩罚成本。为保持生鲜农产品的…

2023.09.10 学习周报

文章目录 摘要文献阅读1-1 题目1-2 创新点1-3 本文工作2-1 题目2-2 什么是图2-3 图神经网络2-4 信息传递3-1 题目3-2 创新点3-3 本文工作 深度学习1.GNN的构建步骤2.构建图的方法3.GNN的简单样例 总结 摘要 本周阅读了三篇文章,第一篇是基于物理信息深度学习和激光…

【LeetCode题目详解】第九章 动态规划part11 ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV (day50补)

本文章代码以c为例! 一、力扣第123题:买卖股票的最佳时机 III 题目: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1…

基于springboot+vue的在线课程学习网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

unity实现Perlin噪声

Perlin噪声目的是为了生成连续变化的随机值。这里推荐一个使用unity实现的perlin噪声插件,包含源码,源码下载地址:https://download.csdn.net/download/hulinhulin/88323641https://download.csdn.net/download/hulinhulin/88323641 插件界面…

vscode 下载安装

vscode 下载安装常用插件 vscode 官网: https://code.visualstudio.com/ 点击右上角 Download 进入下载选择页面 选择自己使用操作对应 CPU 架构 下载 本文使用 x86 架构 64位 windows 系统为例 跳转下载页面 自动 开始下载 下载不开始?试试这个直…

关于黑马hive课程案例FineBI中文乱码的解决

文章目录 问题描述情况一的解决情况二的解决 ETL数据清洗知识社交案例参考代码结果展示 问题描述 情况1:FineBI导入表名中文乱码,字段内容正常情况2:FineBI导入表字段中文乱码,表名内容正常 情况一的解决 使用navcat等工具连接…

第九章 Linux实际操作——Linux磁盘分区、挂载

第九章 Linux实际操作——Linux磁盘分区、挂载 9.1 Linux分区9.1.1原理介绍9.1.2 硬盘说明9.1.3 查看所有设备搭载情况 9.2 挂载的经典案例9.2.1 说明9.2.2 如何增加一块硬盘9.2.3 虚拟机增加硬盘步骤 9.3 磁盘情况查询9.3.1 查询系统整体磁盘使用情况9.3.2 查询指定目录的磁盘…

TypeScript对象类型

废话不多说,还是挑点有营养的讲。 对象类型 1、匿名对象 匿名对象类型是在定义变量时直接使用花括号{},来定义一个对象类型。 const person: { name: string, age: number } { name: John, age: 25 }; 2、接口类型 使用接口来定义对象类型&#x…

二叉树的顺序结构以及堆的实现——【数据结构】

W...Y的主页 😊 代码仓库分享 💕 上篇文章,我们认识了什么是树以及二叉树的基本内容、表示方法……接下来我们继续来深入二叉树,感受其中的魅力。 目录 二叉树的顺序结构 堆的概念及结构 堆的实现 堆的创建 堆的初始化与…

LeetCode(力扣)455. 分发饼干Python

LeetCode20. 有效的括号 题目链接代码 题目链接 https://leetcode.cn/problems/assign-cookies/ 代码 从大遍历 class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()index len(s) - 1result 0for i in range(len(g) -…

老胡的周刊(第107期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 open-interpreter[2] 基于 LLM 为你提供一种…

车载软件架构——基础软件供应商开发工具链(一)

车载软件架构——基础软件供应商&开发工具链(一) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己…

创建 gstreamer 插件的几种方式

系列文章目录 创建 gstreamer 插件的几种方式 使用 gst-template 创建自己的gstreamer 插件 使用 gst-plugins-bad 里面的 gst-element-maker 工具创建gstreamer 插件 文章目录 系列文章目录前言一、gstreamer 官网提供创建插件的方法总结参考资料前言 本系列文章主要介绍如何…