当前位置: 首页 > news >正文

docker容器学习笔记1

docker容器是干什么用的

docker就是一个轻量级的虚拟机,是一个容器,隔离性好,能够确保环境的统一,有效利用系统资源,轻松迁移和拓展。简单的可以理解为容器就是一个小型功能齐全的虚拟机。

 

 实际上是如何使用的呢?

开发的程序包里有创建容器的脚本,我们会根据测试环境的实际情况,修改创建容器的shell脚本,然后部署到服务器上进行测试。就是这么简单。一个程序一个容器,我们有四五十个容器。可以把这些放在一个容器里吗?可以,不过没必要。如果把所有程序放在一个容器里,当这个容器出了问题,整个系统就不能用了。一个程序一个容器的话,当一个容器出现问题,其他容器还是可以正常使用的。再说容器占不了多少系统资源。

 容器和镜像的关系

用了一段时间docker容器后,维护环境的时候,发现docker居然还有一个镜像。什么是docker容器的镜像呢?其实容器的创建是依赖镜像的,镜像跟java中类和对象的关系类似。通俗的来说,镜像和容器的关系就像月饼模型和月饼的关系一样。月饼是根据月饼模型做出来的,容器是根据镜像文件造出来的。一个镜像文件可以创建多个容器。一个月饼模式可以做出很多月饼一样。没有镜像,就没有容器。容器的名称不能重复,否则创建容器就会失败,你去看报错信息,会写:容器已经存在。我们也可以通过容器做一个镜像出来,拿着这个镜像到新的环境部署。

  •  查看镜像

  • 查看宿主机上所有的容器(包括停止的) docker ps -a

  • 创建容器

docker create -it 镜像名称

  • 拉取ubuntu镜像

docker pull python:3.8       #拉取python3.8镜像

docker pull redis                #拉取redis最新镜像

docker pull mysql:5.7        #拉取mysql5.7镜像

docker pull nginx               #拉取 nginx镜像

docker pull centos:centos7

docker pull ubuntu:20.04  #拉取 ubuntu:20.04镜像

  • 启动容器

docker start 容器id/名字   # id号只要能够区分即可无需写全部

  • 新建并启动容器

docker run -it 镜像名称

docker rm -f 容器ID

docker run nginx

docker run -d nginx    #后台运行nginx 

停止容器

docker stop 容器名字/id号

容器的日志

容器在启动和运行过程中是记录日志的。怎么查呢?通过以下命令先查容器列表,找到你要查的容器的id

查到容器的id后,就可以以下命令查看日志,下面的命令是查看2021-11-22容器id的日志

容器的日志在什么路径存放的呢?默认路径是:/var/lib/docker/overlay2这个下面。我一般都是通过命令查看日志,日志路径具体在哪我是不知道的。有一次,服务器的var路径可用空间满了,我一查,原来容器的日志给打满了。它要是不打满,我都不知道它在哪。阿弥陀佛,我是用到哪查到哪,多余的东西都赖得看,docker容器用的多了,越来越觉得不够用,觉得有必要系统的学习下docker了,然后就买了本书。不学不知道,一学吓一跳,东西还真不少。慢慢学吧。

docker是容器,容器就是docker吗?查了下,原来容器世界并不是只有docker,还有别的呢。

转载自:

docker容器的简单使用 (baidu.com)https://baijiahao.baidu.com/s?id=1765038448231587087&wfr=spider&for=pc

虚拟机的生命周期

img

容器的生命周期

img

 重点(容器一直运行的原因)

1.它有一条前台进程,一直在运行

2.以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令COMMAND

3.如果COMMAND该命令结束,该容器也就结束了

 # 当我们在后台启动的时候

1.比如:docker run -di --name=mycentos centos:centos7

2.这时他会自动启动一个 /bin/bash窗口

3.因为我们并没有关闭这个/bin/bash窗口,所以他会一直在后台运行 

4.我们在使用start或者直接run进入这个镜像的时候,就相当于运行的这个命令:/bin/bash,就进入了这个bash窗口,相当于进入了容器(其实不是进入了容器,可以把他看作是xshell一个远程连接,连接到这个容器。)这里我们看作是进入到了这个容器,当我们使用exit退出的时候,就相当于关闭了/bin/bash这个窗口。所以容器一直会在后台运行的原因就是这个/bin/bash窗口一直在启动这,没有关闭它
容器创建并启动 – docker run

# 创建并启动(run)

# 参数:

    -i:表示运行容器

    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

    --name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)

    -v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。(下述单独演示)

    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 (下述单独演示)

# 例子:run

    docker run -it --name=myredis redis  # 这时就会启动redis容器并进去redis容器 

    docker run -id --name=oursql mysql  # 这时就不会进入mysql容器,再后台运行

# 注意,docker run  镜像

使用该命令:如果本地没有,会先pull,再run

5.进入容器内部和退出容器

5.1进入容器

1.查询机器上运行的容器 docker ps

2.进入容器

docker exec -it 容器id/bin/bash

docker exec -it 427 /bin/bash

 #  exec真正的作用是在容器内执行命令,而不是真正的进入到容器内部

1.因为 /bin/bash这个命令,就相当于与这个容器建立了连接,所以我们可以和容器做交互,当我们关闭这个连接的时候,就会自动结束掉这个容器。

2.执行exec命令:

    docker exec -it 容器id ls  # 查询根路径所有文件

5.2退出容器
# 命令:exit

    1.使用exit退出容器

    2.如果不是则会自动退出容器
-it 进入容器退出) 与 (-id 进入容器退出)区别:
# -it 进入容器退出(前台容器自动结束【后台停止运行】)

1.在我们使用 -it 参数直接进入该容器的时候,使用exit退出的时候这个容器就会自动结束。

    - 此时后台就没有该运行中的容器。

# -id 进入容器退出(前台容器自动结束【后台正常运行】)   

2.如果使用 -id 后台运行容器的时候,使用 docker exec进入该容器,此时使用exit退出该容器的话,只是退出该容器,并没有从后台结束该容器,该容器还会在后台运行这。

文件拷贝(宿主机和容器互相拷贝文件)

# 1.从宿主机拷贝到容器内部

    docker cp 宿主机文件 容器id:容器路径

    docker cp /home/a.txt 427:/home     

# 2.从容器中拷贝到宿主机

    docker cp 容器id:容器路径 宿主机路径(起别名)

    docker cp 427:home/a.txt a.txt

设置容器的IP地址:

  • 使用 Docker 网络命令创建一个自定义的网络,并指定子网和网关。然后,您可以在运行容器时使用 --net 和 --ip 参数来分配静态 IP 地址。例如,您可以执行以下命令1:
docker network create --subnet=192.168.56.0/24 --gateway=192.168.56.1 mynetwork
docker run --net mynetwork --ip 192.168.56.40 -it ubuntu bash

  • 使用 Docker Compose 工具来定义和运行多个容器,并在 docker-compose.yml 文件中配置网络和 IP 地址。例如,您可以使用以下配置2:
version: '3'
services:ubuntu:image: ubuntunetworks:mynetwork:ipv4_address: 192.168.56.40
networks:mynetwork:driver: bridgeipam:driver: defaultconfig:- subnet: 192.168.56.0/24gateway: 192.168.56.1

然后,您可以使用 docker-compose up 命令来启动容器。

在dicker ubuntu容器中如何查看IP地址

查看在docker ubuntu容器中的IP地址,有以下几种方法:

  1. 进入容器内部后,使用`cat /etc/hosts`命令,会显示自己以及(--link)软连接的容器IP¹。
  2. 使用`docker inspect <container id>`或者`docker inspect --format ' { { .NetworkSettings.IPAddress }}' <container id>`或者`docker inspect -f ' { {range .NetworkSettings.Networks}} { {.IPAddress}} { {end}}' container_name_or_id`命令,可以查看容器详细信息,里面包含IP地址信息²³⁴。
  3. 使用`docker inspect -f ' { {.Name}} - { {.NetworkSettings.IPAddress }}' $ (docker ps -aq)`或者`docker inspect -f ' { {.Name}} - { {range .NetworkSettings.Networks}} { {.IPAddress}} { {end}}' $ (docker ps -aq)`或者`docker inspect --format=' { {.Name}} - { {range .NetworkSettings.Networks}} { {.IPAddress}} { {end}}' $ (docker ps -aq)`命令,可以获取所有容器名称及其IP地址²³⁵。

参考链接:

(1) 获取/显示docker容器的ip地址 - CSDN博客. https://bing.com/search?q=%e5%9c%a8docker+ubuntu%e5%ae%b9%e5%99%a8%e4%b8%ad%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8bIP%e5%9c%b0%e5%9d%80.
(2) 如何获取 Docker 容器的 IP 地址 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/474638529.
(3) 查看docker 容器中的IP地址 - halberd.lee - 博客园. https://www.cnblogs.com/halberd-lee/p/12519294.html.
(4) 查看docker 容器的ip地址_查询docker ip_我是大头鸟的博客-CSDN博客. https://blog.csdn.net/datouniao1/article/details/103856583.
(5) docker ubuntu 查看ip_51CTO博客. https://blog.51cto.com/topic/docker-ubuntu-chakanip.html.
(6) 获取/显示docker容器的ip地址 - CSDN博客. https://blog.csdn.net/HaroldPQHaroldPQ/article/details/123459871.
(7)https://blog.csdn.net/2201_75529678/article/details/128113610

如何往dicker ubuntu容器里传文件? 

往docker ubuntu容器里传文件。根据我的搜索结果,有以下几种方法:

  1. 使用`docker cp`命令,可以在宿主机和容器之间复制文件。格式如下:
  2. 宿主机向容器传送文件:`docker cp 本地文件的路径 container_id:容器内的路径`²³⁴。
  3. 容器向宿主机传送文件:`docker cp container_id:容器内的路径 本地保存文件的路径`²³⁴。
  4. 进入容器内部后,使用`rz`命令,可以把本地电脑文件传到容器。输入`rz`就会弹出文件选项框,选择文件上传¹⁵⁶。


(1) 传输文件到docker容器 - 五毛钱的饼 - 博客园. https://www.cnblogs.com/fsong/p/11335251.html.
(2) 将文件从Ubuntu本机上传至Docker容器中_ubuntu传文件到docker容器_鹰KING的博客-CSDN博客. https://blog.csdn.net/weixin_51589360/article/details/122069045.
(3) Docker和Ubuntu主机互传复制文件_软件工程小施同学的博客-CSDN博客. https://blog.csdn.net/u013288190/article/details/103223824.
(4) docker学习13-docker容器的文件导入和导出 - 上海-悠悠 - 博客园. https://bing.com/search?q=%e5%a6%82%e4%bd%95%e5%be%80docker+ubuntu%e5%ae%b9%e5%99%a8%e9%87%8c%e4%bc%a0%e6%96%87%e4%bb%b6.
(5) docker学习13-docker容器的文件导入和导出 - 上海-悠悠 - 博客园. https://www.cnblogs.com/yoyoketang/p/12131002.html.
(6) docker学习13-docker容器的文件导入和导出 - 腾讯云. https://cloud.tencent.com/developer/article/1574278.

相关文章:

docker容器学习笔记1

docker容器是干什么用的 docker就是一个轻量级的虚拟机&#xff0c;是一个容器&#xff0c;隔离性好&#xff0c;能够确保环境的统一&#xff0c;有效利用系统资源&#xff0c;轻松迁移和拓展。简单的可以理解为容器就是一个小型功能齐全的虚拟机。 实际上是如何使用的呢&…...

线程魔法:用Spring Boot的@Async注解开启异步世界

在现代的应用程序开发中&#xff0c;异步调用已成为提高性能和响应性的重要策略之一。通过使用Spring Boot框架&#xff0c;我们可以轻松地实现异步调用&#xff0c;从而在处理请求时能够同时执行耗时的操作&#xff0c;如发送电子邮件、处理文件等&#xff0c;而不会阻塞主线程…...

面试热题(接雨水问题)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 我们看到题的第一步&#xff0c;永远是对入参进行判断 public int trap(int[] height) {if (height null) {return 0;}...} 但是我们想想看&#xff0c;接…...

Meta AI研究团队新AI模型: Llama 2 大语言模型

Llama是Facebook Research团队开发的基础语言模型集&#xff0c;旨在提供广泛的语言理解能力。它基于转换器架构&#xff0c;参数范围从7B到65B。通过使用Llama模型&#xff0c;研究人员和开发人员可以构建更先进的自然语言处理系统。您可以在GitHub上找到相关的代码和资源&…...

CSS水平垂直居中

1.利用定位 margin:auto 2.flex布局 3.grid布局 一、利用positionmargin:auto <style>.outer {position: relative; /*父亲相对定位*/width: 200px;height: 200px;background-color: red;}.inner {position: absolute; /*儿子绝对定位*/top: 0;bottom: 0;left: 0;ri…...

Yolov8-pose关键点检测:模型部署篇 | yolov8-pose.onnx python推理

💡💡💡本文解决什么问题:Yolov8-pose关键点训练得到的模型转换成onnx格式在python下完成推理 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集; 🚀🚀�…...

Linux中提示No such file or directory解决方法

说明&#xff1a; 在linux下&#xff0c;./xxx.sh执行shell脚本时会提示No such file or directory。但shell明明存在&#xff0c;为什么就是会提示这个呢&#xff1f; 这种其实是因为编码方式不对&#xff0c;如你在win下编辑sh&#xff0c;然后直接复制到linux下面 实现&…...

Sklearn-使用SVC对iris数据集进行分类

Sklearn-使用SVC对iris数据集进行分类 iris数据集的加载训练svc模型输出混淆矩阵和分类报告使用Pipeline管道完成固定操作不使用Pipeline使用Pipeline 使用SVC对iris数据集进行分类预测 涉及内容包含&#xff1a; 数据集的加载,训练集和测试集的划分训练svc模型,对测试集的预测…...

项目经理必读:领导风格对项目成功的关键影响

引言 项目经理作为一个领导者的角色&#xff0c;他们需要协调各方资源&#xff0c;管理团队&#xff0c;推动项目的进行。为了完成这些任务&#xff0c;项目经理必须具备各种领导风格的灵活性&#xff0c;以应对项目中的各种变数和挑战。在这篇文章中&#xff0c;我们将讨论领…...

行业追踪,2023-08-04

自动复盘 2023-08-04 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

双链表(带哨兵位头节点)

目录 ​编辑 双链表的初始化&#xff1a; 双链表的打印&#xff1a; 双链表的尾插&#xff1a; 双链表的头插&#xff1a; 双链表的尾删&#xff1a; 双链表的头删&#xff1a; 双链表pos位置之前的插入&#xff1a; 双链表pos位置的删除&#xff1a; 关于顺序表和链表…...

MySQL - LOAD DATA LOCAL INFILE将数据导入表中和 INTO OUTFILE (速度快)

文章目录 一、语法介绍二、数据分隔符介绍 :换行符说明&#xff1a; 三、示例LOAD DATA LOCAL INFILEINTO OUTFILE 总结 一、语法介绍 LOAD DATA[LOW_PRIORITY | CONCURRENT] [LOCAL]INFILE file_name[REPLACE | IGNORE]INTO TABLE tbl_name[PARTITION (partition_name [, par…...

String ,StringBulider ,StringBuffer

面试指北149 知乎 StringBuffer和StringBuilder区别详解&#xff08;Java面试&#xff09;_stringbuffer和stringbuilder的区别_辰兮要努力的博客-CSDN博客...

阶段总结(linux基础)

目录 一、初始linux系统 二、基本操作命令 三、目录结构 四、文件及目录管理命令 查看文件内容 创建文件 五、用户与组管理 六、文件权限与压缩管理 七、磁盘管理 八、系统程序与进程管理 管理机制 文件系统损坏 grub引导故障 磁盘资源耗尽 程序与进程的区别 查…...

HTTP(超文本传输协议)学习

关于HTTP补学 一、HTTP能干什么 通过下图能够直观的看出&#xff1a;“交换数据 ” 二、HTTP请求例子 一个 HTTP 方法&#xff0c;通常是由一个动词&#xff0c;像 GET、POST 等&#xff0c;或者一个名词&#xff0c;像 OPTIONS、HEAD 等&#xff0c;来定义客户端执行的动作。…...

23年7月工作笔记整理(前端)

目录 一、js相关二、业务场景学习 一、js相关 1.js中Number类型的最大值常量&#xff1a;Number.MAX_VALUE&#xff0c;最小值常量&#xff1a;Number.MIN_VALUE 2.巩固一下reduce语法&#xff1a;reduce(function(初始值或方法的返回值,当前值,当前值的索引,要累加的初始值))…...

pytorch学习——正则化技术——权重衰减

一、概念介绍 权重衰减&#xff08;Weight Decay&#xff09;是一种常用的正则化技术&#xff0c;它通过在损失函数中添加一个惩罚项来限制模型的复杂度&#xff0c;从而防止过拟合。 在训练参数化机器学习模型时&#xff0c; 权重衰减&#xff08;weight decay&#xff09;是…...

iTOP-RK3588开发板Ubuntu 系统交叉编译 Qt 工程-命令行交叉编译

使用源码 rk3588_linux/buildroot/output/rockchip_rk3588/host/bin/qmake 交叉编译 QT 工程。 最后烧写编译好的 buildroot 镜像&#xff0c;将编译好的 QT 工程可执行程序在 buildroot 系统上运行。 交叉编译 QT 工程如下所示&#xff0c;首先进入 QLed 的工程目录下。 然后…...

Java进阶——数据结构与算法之哈希表与树的入门小结(四)

文章大纲 引言一、哈希表1、哈希表概述2、哈希表的基本设计思想3、JDK中的哈希表的设计思想概述 二、树1、树的概述2、树的特点3、树的相关术语4、树的存储结构4.1、双亲表示法4.2、孩子兄弟表示法&#xff1a;4.3、孩子表示法&#xff1a;4.4、双亲孩子表示法 三、二叉树1、二…...

DataFrame中按某字段分类并且取该分类随机数量的数据

最近有个需求&#xff0c;把某个df中的数据&#xff0c;按照特定字段分类&#xff0c;并且每个分类只取随机数量数据&#xff0c;这个随机数量需要有范围限制。写出来记录下。 def randomCutData(self, df, startNum):grouped df.groupby(classify_label)df_sampled pd.Data…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...