【云原生系列】Docker学习

目录

一、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 镜像的id4.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 imagesOptions:-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.rhkb.cn/news/128436.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode897. 递增顺序搜索树(java)

递增顺序搜索树 题目描述中序遍历代码演示 递归专题 题目描述 难度 - 简单 LC - 897. 递增顺序搜索树 给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子…

【Linux】进程间通信(匿名管道、命名管道、共享内存等,包含代码示例)

进程间通信 前言正式开始理解进程间通信一些标准管道原理管道演示匿名管道代码演示原理进程池管道大小 命名管道演示代码分配消息例子 systemV共享内存共享内存流程获取key值shm的创建shm的删除关联去关联完整流程演示开始通信 systemV 消息队列基于对共享内存的理解几个概念 前…

Kafka3.0.0版本——消费者(手动提交offset)

目录 一、消费者(手动提交 offset)的概述1.1、手动提交offset的两种方式1.2、手动提交offset两种方式的区别1.3、手动提交offset的图解 二、消费者(手动提交 offset)的代码示例2.1、手动提交 offset(采用同步提交的方式…

解决ul元素不能跟div同一行显示的办法

现象如下: html结构如下: 可以看到div和ul是同级元素。 为什么这里ul换行了呢! 这里要敲黑板了! 因为ul是块级元素!也就是独占一行,跟div一样。 如果需要ul跟div在同一行显示,则要求ul前面相…

基于改进二进制粒子群算法的含需求响应机组组合问题研究(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《A Modified Binary PSO to solve the Thermal Unit Commitment Problem》第五章内容,主要做的是一个考虑需求响应的机组组合问题,首先构建了机组组合问题的基本模型&#x…

一文了解Android App Bundle 格式文件

1. Android App Bundle 是什么? 从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布。 Android App Bundle是一种发布格式,打包出来的格式为aab,而之前我们打包出来的格式为apk。编写完代码之后&a…

vue3:5、组合式API-reactive和ref函数

<script setup> /* reactive接收一个对象类型的数据&#xff0c;返回一个响应式的对象 *//*** ref:接收简单类型或复杂类型&#xff0c;返回一个响应式对象* 本质&#xff1a;是在原有传入数据的基础上&#xff0c;外层报了一层对象&#xff0c;包成了复杂类型* 底层&…

Python小知识 - 如何使用Python进行机器学习

如何使用Python进行机器学习 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 机器学习是人工智能的一个分支&#xff0c;是让计算机自动“学习”。学习的过程是从经验E中获得知识K。经验E可以是一个数据集&#xff0c;比如一个图像数据集。知识K可以是计算机…

07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动

本系列教程配套出有视频教程&#xff0c;观看地址&#xff1a;https://www.bilibili.com/video/BV1gV4y1e7Sg 7. LVGL对接EC11旋转编码器驱动 本次实验我们向LVGL库中对接EC11旋转编码器驱动&#xff0c;让我们能通过EC11旋转编码器操作UI。 7.1 复制工程 上次实验得出的工…

景区AR虚拟三维场景沉浸式体验成为新兴的营销手段

科技的迅速崛起正在改变我们的世界&#xff0c;旅游业也在这股浪潮中掀起了一场全新的变革。增强现实(AR)技术正成为旅行中的一股强大力量&#xff0c;通过增添趣味和交互性&#xff0c;为旅程注入了前所未有的活力。本文将带您深入了解AR如何为旅游带来全新的体验&#xff0c;…

Docker 实现 MySQL 一主一从配置

1、新建主服务器容器实例&#xff0c;端口&#xff1a; 3307 docker run \ -p 3307:3306 \ --name mysql-master \ -v /var/docker/mysql-master/log:/var/log/mysql \ -v /var/docker/mysql-master/data:/var/lib/mysql \ -v /var/docker/mysql-master/conf:/etc/mysql \ --p…

【EI会议征稿】第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)

第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09; 第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09;将于2023年12月15-17日在江苏南京举行。本会议通过与业内众多平台、社会各团体协力&#xff0c;聚集机械自动…

【微信读书】数据内容接口逆向调试01

需求爬取微信读书的某一本书的整本书的内容 增强需求&#xff0c;大批量爬取一批书籍内容 众所周知微信读书是一个很好用的app&#xff0c;他上面书籍的格式很好&#xff0c;质量很高。 本人充值了会员但是看完做完笔记每次还得去翻很不方便&#xff0c;于是想把书籍内容弄下…

Visual Studio 线性表的链式存储节点输出引发异常:读取访问权限冲突

问题&#xff1a; 写了一个线性表的链式存储想要输出&#xff0c;能够输出&#xff0c;但是会报错&#xff1a;读取访问权限冲突 分析&#xff1a; 当我们输出到最后倒数第二个节点时&#xff0c;p指向倒数第二个节点并输出&#xff1b; 下一轮循环&#xff1a;p指向倒数第二…

027:vue中两列表数据联动,购物车添加、删除和状态更改

第027个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

javaee spring整合mybatis spring帮我们创建dao层

项目结构 pom依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

buuctf crypto 【RSA2】解题记录

1.打开文件 2.写脚本 3.16进制转字符串

【C++】动态内存管理

【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为&#xff1a; mallo…

UE5、CesiumForUnreal实现瓦片坐标信息图层效果

文章目录 1.实现目标2.实现过程2.1 原理简介2.2 cesium-native改造2.3 CesiumForUnreal改造2.4 运行测试3.参考资料1.实现目标 参考CesiumJs的TileCoordinatesImageryProvider,在CesiumForUnreal中也实现瓦片坐标信息图层的效果,便于后面在调试地形和影像瓦片的加载调度等过…

用于独立系统应用的光伏MPPT铅酸电池充电控制器建模(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…