Docker的基本操作 及 容器与外部机互相通讯(持续更新中)

news2024/10/6 12:32:44

Docker入门:

  • Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)
  • docker入门,这一篇就够了。-CSDN博客
  • Docker 容器使用 | 菜鸟教程 (runoob.com)
  • Docker自定义网络和运行时指定IP_docker run ip-CSDN博客

基本命令

链接:docker入门,这一篇就够了。-CSDN博客

1、帮助命令

docker version     #显示docker详细信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker --help     #docker帮助命令手册

2、镜像命令

docker images  #查看所有本地主机的镜像
docker search 镜像名           #搜索镜像
docker pull 镜像名 [标签]      #下载镜像(如果不写tag,默认是latest)
docker rmi 镜像名 [标签]       #删除镜像    docker rmi -f $(docker images -aq)  删除全部镜像
docker tag  镜像名:版本   新镜像名:版本    #复制镜像并且修改名称
docker commit  -a "xxx"  -c "xxx" 镜像ID 名字:版本   #提交镜像 
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;

docker load -i    /xxx/xxx.tar         #导入镜像
docker save -o   /xxx/xxx.tar          #保存一个镜像为一个tar包

3、容器命令

docker run [可选参数] image 命令 #启动容器(无镜像会先下载镜像)
#参数说明
--name = "Name"   容器名字
-c   后面跟待完成的命令
-d   以后台方式运行并且返回ID,启动守护进程式容器
-i   使用交互方式运行容器,通常与t同时使用
-t   为容器重新分配一个伪输入终端。也即启动交互式容器
-p   指定容器端口    -p 容器端口:物理机端口  映射端口
-P   随机指定端口
-v   给容器挂载存储卷

docker build  #创建镜像        -f:指定dockerfile文件路径   -t:镜像名字以及标签
docker logs 容器实例的ID          #查看容器日志
docker rename 旧名字  新名字      # 给容器重新命名
docker top    容器实例的ID                  #查看容器内进程
docker ps -a                    #列出所有容器(不加-a就是在运行的)
docker rm      容器实例的ID                 #删除容器(正在运行容器不能删除,除非加-f选项)
docker kill  容器实例的ID        #杀掉容器
docker history   容器实例的ID    #查看docker镜像的变更历史
docker start 容器实例的ID        #启动容器
docker restart 容器实例的ID       #重启容器
docker stop 容器实例的ID         #停止正在运行的容器
docker attach /docker exec  容器实例的ID   #同为进入容器命令,不同的是attach连接终止会让容器退出后台运行,而exec不会。并且,docker attach是进入正在执行的终端,不会情动新的进程,而docker exec则会开启一个新的终端,可以在里面操作。
docker image inspect  容器名称:容器标签       #查看容器内源数据
docker cp  容器id:容器内路径   目的主机路径           #从容器内拷贝文件到主机(常用)或者从主机拷贝到容器(一般用挂载)
exit                           #直接退出容器 
crlt + P 再按 ctrl + Q                 #退出容器但是不终止运行

一、根据需要拉取需要的镜像

  • Ubuntu镜像:包含的是一个精简的Ubuntu操作系统,没有预装特定的应用程序。
  • Tomcat镜像:内置了Tomcat服务器,可能还包含了特定的Java运行时环境(JRE)或其他必要的组件,以便立即部署和运行Java Web应用。
docker pull ubuntu:latest  #获取Ubuntu的最新长期支持版本(LTS)
docker pull ubuntu:18.04   #如果你需要特定版本,比如18.04

docker pull tomcat:latest  #获取Tomcat的最新版本镜像
docker pull tomcat:8.5     #如果你需要特定版本的Tomcat,例如8.5版本

不知道需要什么则这样:

docker pull ubuntu

 二、创建及使用容器

2.1 容器的创建 

docker run -itd --name 容器名称 --network bridge ubuntu:latest /bin/bash
  • -i:表示以交互模式运行容器,保持标准输入(STDIN)打开,使得我们可以与容器进行交互,比如通过命令行输入命令。
  • -t: 表示为容器分配一个伪终端(pseudo-TTY),使得它看起来像一个终端界面,适合交互使用。
  • -d: 后台运行(-d),让容器在后台运行,即守护进程模式,不会直接把容器的输出显示到当前终端。

  • --name test1: 为创建的容器指定一个名字test1,便于后续管理和识别

  • --network bridge: 指定容器使用的网络模式为bridge,这是Docker的默认网络模式。容器会被连接到Docker默认的桥接网络(通常是docker0),并分配一个独立的IP地址。

  • --ip 172.17.0.10: 强制指定容器的IP地址为172.17.0.10。注意,如果该IP已经被其他容器占用或不符合子网规则,Docker可能会启动失败。通常情况下,Docker会自动为容器分配IP,除非有特殊需求才需要手动指定。

  • ubuntu:latest: 指定了要使用的镜像名称及标签。这里使用的是最新版本的ubuntu官方镜像,可以不用指定是最新版本,直接写ubuntu即可

  • /bin/bash: 指定容器启动后执行的命令,这里是启动bash shell。这意味着容器启动后会有一个交互式的bash终端等待用户输入命令。

2.2容器需要指定IP地址时

docker run -itd --name test1 --network bridge --ip 192.168.0.51 ubuntu /bin/bash

直接使用以上命令会出现的问题:

1、用户指定的IP地址仅在用户自定义网络上受支持:这意味着这试图在Docker的默认bridge网络上指定一个静态IP地址(192.168.0.51),但直接在Docker的默认网络上指定静态IP是不允许的。Docker允许在用户自定义的网络上指定静态IP地址

2、没有配置的子网或IP范围包含指定的IP地址:即便尝试在允许指定静态IP的自定义网络上操作,也需要确保您指定的IP地址位于该网络的子网范围内。在这种情况下,Docker指出没有网络配置能够包含IP地址192.168.0.51。

 正确做法如下:

1、需要创建一个自定义网络,并指定一个包含您希望分配给容器的IP地址(192.168.0.51)的子网,以下命令包含了:

  • 创建一个桥接网络(--driver bridge)。
  • 指定了子网为192.168.0.0/24,这覆盖了从192.168.0.1到192.168.0.254的地址。
  • --ip-range=192.168.0.48/29 指定了IP地址范围包含了从 192.168.0.48192.168.0.55 共8个地址(包括首尾地址)
  • 设置了网关为192.168.0.1
sudo docker network create \
  --driver bridge \
  --subnet=192.168.0.0/24 \
  --ip-range=192.168.0.48/29 \
  --gateway=192.168.0.1 \
  网络名称

 2、接下来,使用刚创建的自定义网络启动容器,并指定IP地址:

sudo docker run -itd \
  --name eric-ubuntu-1 \
  --network 要连接的网络名称 \
  --ip 192.168.0.51 \
  ubuntu:latest /bin/bash

2.3 容器的使用 

参考链接:Docker 容器使用 | 菜鸟教程 (runoob.com)

查看信息   --------------------------------------------------------------------------

docker ps   # 查看正在运行的容器
docker ps -a   # 查看所有容器

#查看容器相关信息(推荐使用这个)
#打印网络名称、容器名称、主机名及对应的IP地址
docker inspect --format '{{range $key, $value := .NetworkSettings.Networks}}{{$key}}: {{$.Name}} - {{$.Config.Hostname}} - {{$value.IPAddress}}{{println}}{{end}}' 容器名/ID

#查看存在的网络
docker network ls

#查看某个网络下连接的容器
docker network inspect 网络名或ID

#查看容器连接的网络
docker inspect  容器名/ID

ip addr show #列出系统中所有网络接口,包括IP地址、子网掩码、广播地址、网络接口的状态

ip route #展示系统的路由表。路由表是决定数据包在网络中如何转发


删除    ------------------------------------------------------------------------------

#将容器从指定网络断开
docker network disconnect my_network my_container

#删除网络(无容器连接时才可删除)
docker network rm my_network -f  (-f表示强制删除)


#删除容器
docker rm  容器名/ID      #(正在运行容器不能删除,除非加-f选项)


进入和退出容器   ------------------------------------------------------------------------

#进入容器前要先启动
docker start 容器名/ID       #启动容器
docker restart 容器名/ID       #重启容器
docker stop 容器名/ID         #停止正在运行的容器

# 进入容器,推荐exec        进入容器前要先启动容器
docker attach  容器名/ID  #使用attach进入后退出,容器停止运行
docker exec 容器名/ID   #使用exec进入后退出,容器不会停止

# 退出容器
exit    #直接退出
crlt + P 再按 ctrl + Q     #退出容器但是不终止运行


docker相关服务   ------------------------------------------------------------------------
systemctl start docker   #启动服务
systemctl status docker   #查看状态  active(runing)表示已启动
systemctl stop docker   #停止服务

三、Docker的主要网络模式

3.1 Bridge (默认)

解释:Bridge模式是Docker的默认网络配置。每个使用此模式的容器都会得到一个独立的Network Namespace,Docker会为容器分配一个内部IP地址,并将其连接到一个名为docker0的虚拟网桥上。这意味着容器间可以相互通信,同时也能够通过宿主机的网络栈访问外部网络。

适用情况:当你需要容器之间能够直接通信,且容器需要访问互联网或者被外部网络访问时,使用Bridge模式最为常见。

3.2 Host

解释:在Host模式下,容器不会获得自己的Network Namespace,而是直接使用宿主机的网络堆栈。这意味着容器将共享宿主机的网络接口和端口,容器内的网络服务可以直接使用宿主机的IP地址和端口号对外提供服务。

适用情况:如果你的应用需要直接绑定到宿主机的网络接口,或者需要极低的网络延迟,可以考虑使用Host模式。但需要注意,这样做可能会导致安全风险和端口冲突问题。

3.3 None

解释:None模式下,Docker不会为容器配置任何网络设施,容器将只有一个lo(loopback)接口,无法访问外部网络,也无法和其他容器通信,除非你手动配置网络。

适用情况:如果你的容器不需要网络连接,或者你计划完全自定义网络配置(例如,使用自定义网络接口或复杂的网络拓扑),可以选择None模式。

3.4 Container (或Container:<name/id>)

解释:这种模式允许一个容器共享另一个容器的Network Namespace,而不是创建新的或使用宿主机的。这意味着两个容器将共享相同的网络配置,包括IP地址和端口空间。

适用情况:当多个容器需要共享相同的网络环境时,比如在Kubernetes中的Pods,所有容器需要共享同一套网络资源和配置时,这种模式非常有用。

四、将自己的代码放入容器中

4.1 将本地代码复制到容器中

 可以使用docker cp命令将本地代码复制到容器中,或者在Dockerfile中使用COPY指令构建包含代码的新镜像。例如,若要将本地的code1目录复制到test1容器的/app目录下:

docker cp code1 test1:/app

或者在Dockerfile中使用:

COPY code1 /app

 然后重新构建镜像并运行新容器。

4.2 卷(volume)挂载

如果您需要频繁修改代码并实时查看效果,考虑使用卷(volume)挂载,将宿主机上的代码目录映射到容器内。这样,对宿主机上代码的任何更改都会即时反映到容器中:

卷挂载可以通过 -v--volume 参数在 docker run 命令中指定。例如:

docker run -v /host/path:/container/path your-image

这里,/host/path 是宿主机上的目录路径,/container/path 是容器内的目录路径。当容器运行时,任何对/container/path下的更改都会反映到宿主机的/host/path下,反之亦然。这不仅方便开发调试,也利于数据的备份和迁移,因为数据不再绑定于容器生命周期。

五、在ubuntu修改docker0地址

1、停止docker服务:

sudo systemctl stop docker

2、删除现有的docker0接口:

sudo ip link delete docker0

3、创建一个新的docker0接口,并配置你想要的IP地址。例如,如果你想将docker0的地址 设置为192.168.5.1,子网为255.255.255.0,可以使用下列命令:

sudo ip link add docker0 type bridge
sudo ip addr add 192.168.5.1/24 dev docker0
sudo ip link set dev docker0 up

4、重启docker服务:

sudo systemctl start docker

        注意,修改docker0地址可能会影响正在运行的docker容器的网络连接,因此在执行这些操作之前,请确保已经停止所有相关容器或者已经进行了适当的网络配置。

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

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

相关文章

MVC 框架安全

在现代 Web 开发中&#xff0c;使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写&#xff0c;它将 Web 应用分为三层&#xff0c;View 层负责用户视图、页面展示等工作&#xff1b;Controller 负责应 用的逻辑实现&#xff0c;接收 View 层传入的用户请求&…

Luma AI如何注册:文生视频领域的新星

文章目录 Luma AI如何注册&#xff1a;文生视频领域的新星一、Luma 注册方式二、Luma 的效果三、Luma 的优势四、Luma 的功能总结 Luma AI如何注册&#xff1a;文生视频领域的新星 近年来&#xff0c;Luma AI 凭借其在文生视频领域的创新技术&#xff0c;逐渐成为行业的新星。…

【如何保持专注】

今日&#x1f4d2;&#xff0c;看博主分享下保持专注的新方法&#xff0c;有点意思 &#xff0c; 怎么保持专注&#xff0c;给大家分享两个极客的方法啊。 第一个呢是来自于一个非常著名的程序员啊&#xff0c;叫做这个尼克温特&#xff0c;大家有兴趣可以查一下&#xff0c;就…

Linux源码学习笔记01-Linux内核源码结构

Linux内核特性 是一个类Unix操作系统&#xff0c;但不是简化的Unix&#xff1b;不仅继承了Unix的特征&#xff0c;还有其他特性。 Linux内核的组织形式&#xff1a;整体式的结构&#xff0c;方便每个领域的开发人员参与开发&#xff1b;Linux进程调度方式简单高效&#xff1a…

结构设计模式 - 桥接设计模式 - JAVA

桥接设计模式 一. 介绍二. 桥接模式示例2.1 定义实现部分和具体实现2.2 定义抽象部分和细化抽象部分2.3 测试2.4 解释 三. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一.…

串口触摸屏分割字符串

分割字符串的方法1、split2、indexOf()3、substr(start,length) 分割字符串的方法 1、split&#xff1a;将一个字符串分割为子字符串&#xff0c;然后将结果作为字符串数组返回。 2、indexOf() &#xff1a;返回某个指定的字符串值在字符串中首次出现的位置&#xff08;从左向右…

Vue55-TodoList案例-本地存储

一、TodoList案例-本地存储 此时&#xff0c;修改对象里面的属性&#xff0c;watch监视不到&#xff01; 需要深度监视&#xff0c;就不能用简写形式&#xff01; 二、jeecg-boot中的本地存储 jeecg-boot中&#xff0c;浏览器的本地存储&#xff0c;存储的是token&#xff01;…

Vue56-组件的自定义事件

一、什么是自定义事件 二、子组件—【传值】—>父组件 2-1、prop属性 2-2、自定义事件 v-on在谁身上&#xff0c;就给谁绑定事件&#xff01; 给谁绑定的事件&#xff0c;想触发就找谁&#xff01; 2-3、prop属性VS自定义属性 2-4、简写形式 2-5、ref属性实现 加了ref属性…

Matlab自学笔记三十一:结构数组的创建、索引和预分配内存

1.概念 结构&#xff08;structure array&#xff09;是一种具有容器特性的数据类型&#xff0c;它使用称为字段的数据容器对相关数据进行分组&#xff0c;每个字段可以包含任何类型或大小的数据&#xff0c;所有元素都具有相同数量的字段和相同的字段名称。&#xff08;与元胞…

【安装笔记-20240616-Windows-Gpg4win 证书管理器】

安装笔记-系列文章目录 安装笔记-20240616-Windows-Gpg4win 证书管理器 文章目录 安装笔记-系列文章目录安装笔记-20240616-Windows-Gpg4win 证书管理器 前言一、软件介绍名称&#xff1a;Gpg4win主页官方介绍 二、安装步骤测试版本&#xff1a;Gpg4win 4.3.1下载链接安装界面…

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…

课设--学生成绩管理系统(三)

欢迎来到 Papicatch的博客 文章目录 &#x1f349;报告目的 &#x1f349;总体设计 &#x1f348; 模块处理逻辑 &#x1f349;数据库设计 &#x1f348;总览表 &#x1f348;表设计 &#x1f34d;管理员信息表 &#x1f34d;课程基本信息表 &#x1f34d;课程扩展信息…

浙大版PTA Python程序设计 题目与知识点整理(综合版)

目录 第一章 一、高级语言程序的执行方式 二、变量赋值与内存地址 三、字符编码 3.1 Unicode 3.2 ASCII&#xff08;American Standard Code for Information Interchange&#xff09; 四、编程语言分类按照编程范式分类 4.1 面向过程语言 4.2 面向对象语言 五、原码…

LabVIEW电子类实验虚拟仿真系统

开发了基于LabVIEW开发的电子类实验虚拟仿真实验系统。该系统通过图形化编程方式&#xff0c;实现了复杂电子实验操作的虚拟化&#xff0c;不仅提高了学生的操作熟练度和学习兴趣&#xff0c;而且通过智能评价模块提供即时反馈&#xff0c;促进教学和学习的互动。 项目背景 在…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

多种方案图文并茂分分钟教你解决Kubernetes(k8s)容器安全问题(不断更新中)

文章目录 Kubernetes&#xff08;k8s&#xff09;Secrets in clear text environment variables 明文中的秘密环境变量问题详解 解决方案一STEP1: 创建Kubernetes Secret - 编写一个yaml文件STEP2: 部署执行上述yamlSTEP3: 将Secret作为卷挂载到Pod中-在项目部署K8S.yaml中挂载…

【Perl】与【Excel】

引言 perl脚本语言对于文本的处理、转换很强大。对于一些信息量庞大的文本文件&#xff0c;看起来不直观&#xff0c;可以将信息提取至excel表格中&#xff0c;增加数据分析的可视化。perl语言的cpan提供了大量模块。对于excel文件的操作主要用到模块&#xff1a; Spreadshee…

1970python高校教室管理系统mysql数据库Django框架bootstrap布局计算机软件工程网页

一、源码特点 python Django 高校教室管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解python编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 python Django 高校教室管理系统 开发环境pycharm mys…

2.华为配置静态路由

通过配置静态路由让PC1和PC2互通 AR1 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]ip add 1.1.1.1 24 [Huawei]ip route-static 192.168.2.0 24 1.1.1.2AR2 [Huawei]int g0/0/0 [Huawei-Gig…

ARM Linux 设备树详细介绍(2)共二篇

承接上文&#xff0c;第一篇 3. Device&Tree 引发的 BSP 和驱动变更 有了 Device Tree 后&#xff0c;大量的板级信息都不再需要&#xff0c;譬如过去经常在 arch/arm/plat-xxx 和 arch/arm/mach-xxx 实施的如下事情&#xff1a; 1. 注册 platform_device&#xff0c;绑定 …