Centos9安装docker

1. 卸载docker

  • 查看是否安装了docker
yum list | grep docker
  • 卸载老版本docker,拷贝自官网
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  • 卸载新版本
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2. 安装

  • 阿里的源好像不能用,这是清华的源
 yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+https://download.docker.com+http://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 启动docker
sudo systemctl start docker
  • 停止docker
sudo systemctl stop docker
  • 设置docker为自启动
sudo systemctl enable --now docker

3. 配置仓库

  • 如果没有daemon.json 文件,创建文件
 vim /etc/docker/daemon.json 
  • 配置
# 写入配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.1ms.run"]
}
EOF
  • 重启docker
# 重启docker服务
systemctl daemon-reload && sudo systemctl restart docker

5. 镜像与容器的常用命令

操作类型命令说明
镜像操作docker pull [镜像名称]:[标签]拉取指定镜像,若不指定标签,默认拉取latest标签镜像
docker images列出本地已有的镜像
docker rmi [镜像ID或镜像名称:标签]删除指定的镜像,支持镜像ID或镜像名称+标签
容器操作docker run [选项] [镜像名称] [命令]创建并运行容器,-itd表示交互、终端、后台运行;--name可指定容器名称
docker ps列出当前正在运行的容器
docker ps -a列出所有容器,包括已停止的容器
docker inspect [容器ID或容器名称] 查看容器详情
docker exec -it [容器ID或容器名称] /bin/bash进入正在运行的容器并执行指定命令,常搭配/bin/bash进入容器终端
docker stop [容器ID或容器名称]停止指定的容器
docker start [容器ID或容器名称]启动已停止的容器
docker rm [容器ID或容器名称]删除指定容器,若容器在运行需先停止;docker rm -f [容器ID或容器名称]可强制删除
docker rm $(docker ps -aq)删除所有未运行的容器
  1. 创建并运行容器
    -d:后台运行
    –name:起别名,如果不指定,会随机生成别名
    -p 81:80:端口映射
    tomcat后面没有跟标签,默认启动latest
docker run -d --name=mytomcat2 -p 6001:8080 tomcat
docker run -d --name=mynginx1 -p 81:80 nginx
  1. 从容器构建镜像并提交到仓库
    • 和ghost系统差不多
	# 1. 查看正在运行的容器列表,获取目标容器的CONTAINER IDdocker ps# 2. 提交容器为镜像(格式:docker commit [容器ID] [镜像名称:标签]),这里的容器是自己修改过后的docker commit your-container-id your-image-name:latest# 3. 为镜像添加仓库标签(格式:docker tag [本地镜像] [仓库地址/镜像名称:标签])docker tag your-image-name:latest your-username/your-repo:v1.0# 4. 登录Docker仓库(首次推送需要登录)docker login# 5. 推送镜像到仓库(格式:docker push [仓库地址/镜像名称:标签])docker push your-username/your-repo:v1.0

在这里插入图片描述

6. 数据卷

  • 宿主机目录不存在,容器内目录存在 :启动容器进行挂载时,Docker 会在宿主机上创建对应的目录,并将容器内该目录下的所有文件和子目录复制到宿主机新建的目录中。
  • 宿主机目录存在,容器内目录存在 :挂载时,容器内目录会被宿主机目录的内容覆盖。
  • 我理解就是给容器内的文件或目录做一个硬连接,连接到宿主机的某个目录或文件,以达到数据持久化的目的

1. 在启动容器时绑定挂载

特点: 允许将宿主机任意目录或文件挂载到容器中,灵活性高。

  • 这里省略了run命令的很多其他参数,例如:-p、-d
docker run -v [宿主机路径]:[容器内路径]:[权限] 镜像名 [命令]

示例:

  • 挂载目录
docker run -v /home/user/data:/app/data -it ubuntu bash
  • 挂载文件
docker run -v /home/user/config.txt:/app/config.txt -it ubuntu bash

2. 命名数据卷

特点: 创建容器时显式指定名称的数据卷。方便管理和识别,即使容器删除,也可通过名称访问、管理数据卷。

命令说明
docker volume create [数据卷名称]创建一个新的数据卷
docker volume ls列出所有已创建的数据卷
docker volume rm [数据卷名称]删除指定的数据卷
  • 创建数据卷
    默认会在:/var/lib/docker/volumes/ 下创建my_volume目录
docker volume create my_volume
  • 将其挂载到容器内的 /app/data 目录
docker run -v my_volume:/app/data -it ubuntu bash

7. 常用软件

  1. mysql
  2. 绑定挂载
docker run -itd \-p 33061:3306 \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/data:/var/lib/mysql \--name='mysql' \-e MYSQL_ROOT_PASSWORD=123456 \-e TZ=Asia/Shanghai \mysql:8.4 \--lower_case_table_names=1

解释

  • docker run:用于运行容器的命令。
  • -itd-i 表示交互式操作,-t 为容器分配伪终端,-d 使容器在后台运行。
  • -p 33061:3306:将宿主机 33061 端口映射到容器内 3306 端口,方便从外部访问容器内 MySQL 服务。
  • -v /root/mysql/conf:/etc/mysql/conf.d:把宿主机 /root/mysql/conf 目录挂载到容器内 /etc/mysql/conf.d 目录,用于存放 MySQL 配置文件。
  • -v /root/mysql/data:/var/lib/mysql:将宿主机 /root/mysql/data 目录挂载到容器内 /var/lib/mysql 目录,保存数据库数据。
  • --name='mysql':为容器命名为 mysql,方便后续管理和识别。
  • -e MYSQL_ROOT_PASSWORD=123456:设置容器内 MySQL 的 root 用户密码为 123456 ,创建mysql容器必须的。
  • -e TZ=Asia/Shanghai \:设置时区
  • mysql:8.4:指定使用的 MySQL 镜像及版本为 8.4 。
  • --lower_case_table_names=1:传递给 MySQL 服务的启动参数,设置表名不区分大小写,linux中严格区分大小写,所以设置不区分。
  1. 命名挂载
  • 创建命名数据卷
docker volume create mysql_conf_volume
docker volume create mysql_data_volume
  • 启动MySQL容器并挂载命名数据卷
docker run -itd \-p 33062:3306 \-v mysql_conf_volume:/etc/mysql/conf.d \-v mysql_data_volume:/var/lib/mysql \--name='mysql1' \-e MYSQL_ROOT_PASSWORD=123456 \mysql:8.4 \--lower_case_table_names=1
  1. tomcat
docker run -itd \--name=tomcat_8001 \-v /root/tomcat/8001:/usr/local/tomcat/webapps \-p 8001:8080 \tomcat:10.0-jdk17
  1. nginx
    先随便创建一个nginx的容器,并拷贝3个文件夹,拷贝后就删除这个容器
# 配置文件
docker cp nginx:/etc/nginx /root/nginx/conf
# 日志
docker cp nginx:/var/log/nginx /root/nginx/log
# 项目目录
docker cp nginx:/usr/share/nginx/html /root/nginx/html
docker run -itd \-p 81:80 \-v /root/nginx/conf/nginx:/etc/nginx \-v /root/nginx/log:/var/log/nginx \-v /root/nginx/html:/usr/share/nginx/html \--name=nginx_81 \nginx

-v /root/nginx/conf/nginx:/etc/nginx \:第一步拷贝出来的是一个名为nginx的目录,里面是配置文件,可以到/root/nginx/conf/nginx中查看一下

8. Dockerfile

命令说明
docker build -t [镜像名称]:[标签] .在包含Dockerfile的目录下,根据Dockerfile构建镜像,.表示当前目录

通过Dockerfile构建自己的镜像,文件内容像是将手动构建的过程转成代码

  1. 构建tomcat
# 基于centos镜像构建一个新的镜像
FROM centos:7
# 标记作者
LABEL author="zhaoyun"
# 把当前目录下的文件复制到容器的/user/local目录下
# ADD和COPY都可以复制文件,ADD兼有解压tar包的功能
ADD jdk-17.0.15_linux-aarch64_bin.tar.gz /usr/local
ADD apache-tomcat-10.1.40.tar.gz /usr/local
# 修改解压后目录的名字
RUN mv /usr/local/jdk-17.0.15 /usr/local/jdk
RUN mv /usr/local/apache-tomcat-10.1.40 /usr/local/tomcat
# 声明变量
ENV JAVA_HOME=/usr/local/jdk
ENV CATALINA_HOME=/usr/local/tomcat
# 声明环境变量
ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH=$JAVA_HOME:$CATALINA_HOME/bin:$CATALINA_HOME/lib:$PATH
# 指定工作目录(docker exec -it 进入容器后的目录)
WORKDIR /usr/local/tomcat
# 暴露端口
EXPOSE 8080
# 启动tomcat
CMD ["catalina.sh","run"]

执行构建指令

docker build -t mytomcat:10.1 .

运行镜像,在浏览器的8010端口就可以使用了

 docker run -itd --name=tomcat10.1 -p 8010:8080 mytomcat:10.1
  • docker build -t mytomcat:10.1 .:注意最后的.,意思就是Dockerfile在当前目录下;构建的镜像名:mytomcat,标签:10.1

  • 注意这两句代码ADD jdk-17.0.15_linux-aarch64_bin.tar.gz /usr/localRUN mv /usr/local/jdk-17.0.15 /usr/local/jdk,ADD是将tar包解压到local目录中,RUN中运行的是更改目录名字的命令,jdk的tar包解压后的名字不是:jdk-17.0.15_linux-aarch64_bin。tar包解压后的名字是什么需要自己解压看一下,RUN中的命令执行不了改名会报错

  • 目录结构:
    在这里插入图片描述
    两个目录不是必须得,这里是解压了两个tao包看解压后名字的。

  1. 在idea中构建镜像
    在这里插入图片描述
    在这里插入图片描述
    编辑Dockerfile文件
# OpenJDK 17 镜像作为基础镜像
FROM openjdk:17
# 创建工作目录
RUN mkdir -p /root/app
# 设置工作目录,后续操作都在该目录下进行
WORKDIR /root/app# 将当前目录下的 target 目录中的 jar 包复制到容器内的 /app 目录下
# 请将 your_application.jar 替换为实际的 JAR 包名称
COPY ./jar/hello.jar /root/app/app.jar# 暴露容器运行时的端口,根据实际 JAR 应用监听的端口修改
EXPOSE 8080# 定义容器启动时执行的命令,用于运行 JAR 包并指定配置文件位置
CMD ["java", "-jar", "/root/app/app.jar"]
  • 这里的配置比上一个tomcat的配置简单好多,因为tomcat是以centos为基础镜像,需要配置Path等环境变量,这里是以jdk为基础镜像,在基础镜像中已经配置好了环境变量,在本镜像中直接使用就可以了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. 网络

命令说明
docker network create [网络名称]创建一个新的Docker网络
docker network ls列出所有已创建的Docker网络
docker network connect [网络名称] [容器ID或容器名称]将指定容器连接到指定网络

dock的网络模式共有4种,这里介绍两种常用的模式

  1. 默认情况
  • 桥接网络(bridge)
    • 原理:这是 Docker 默认的网络驱动。当你创建一个新容器时,若不指定网络模式,它会自动连接到桥接网络。Docker 会创建一个名为 docker0 的虚拟网桥,容器通过虚拟网卡连接到该网桥,实现容器之间以及容器与宿主机的通信。
    • 特点:容器有独立的 IP 地址,可通过 IP 相互访问。不过,桥接网络是隔离的,不同的桥接网络之间默认无法直接通信。

通俗理解,Docker在启动时会创建一个类似路由器的东西,名为docker0,地址:172.17.0.1,每开一个容器,Docker会给容器分配一个ip地址,例如:172.17.0.2、172.17.0.3,可以通过docker inspect [容器名或ID]查看,容器直接可以通过此网络互相访问

在这里插入图片描述

  1. 将多个容器划分成一组,类似给网络划分vlan
  • 容器之间可以通过自定义的名字互相访问
  • 创建自定义桥接网络
docker network create my_custom_network

此命令会创建一个名为 my_custom_network 的自定义桥接网络。

  • 将容器连接到自定义网络
    创建容器时,通过 --network 参数指定要连接的网络。

  • 示例:启动多个容器并连接到自定义网络

# 启动一个 MySQL 容器并连接到自定义网络
docker run -d --name mysql_container --network my_custom_network -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0# 启动一个应用容器并连接到自定义网络
docker run -d --name app_container --network my_custom_network my_app_image

在上述示例中,mysql_container 是 MySQL 数据库容器,app_container 是应用程序容器,它们都连接到了 my_custom_network 网络。

容器间的访问方式

  1. 通过容器名称访问
    在自定义网络中,容器能够使用其他容器的名称作为主机名来进行访问。这是因为 Docker 会自动为每个容器创建 DNS 记录,使得容器间可以通过名称解析 IP 地址。

示例:应用容器访问 MySQL 容器
假设 app_container 是一个需要连接 MySQL 数据库的应用程序,它可以使用 mysql_container 作为主机名来连接数据库。以下是在 app_container 内使用命令行工具连接 MySQL 的示例:

docker exec -it app_container mysql -h mysql_container -u root -p123456

在应用程序代码里,配置数据库连接时也可以使用容器名称:

import mysql.connectormydb = mysql.connector.connect(host="mysql_container",user="root",password="123456",database="your_database"
)# 执行数据库操作
  1. 通过 IP 地址访问
    你也可以通过查看容器的 IP 地址,然后使用 IP 地址进行访问。

查看容器 IP 地址

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql_container

上述命令会输出 mysql_container 的 IP 地址。

使用 IP 地址访问

docker exec -it app_container mysql -h <mysql_container_ip> -u root -p123456

<mysql_container_ip> 替换为实际的 IP 地址。

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

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

相关文章

Pgvector+R2R搭建RAG知识库

背景 R2R是一个采用Python编写的开源AI RAG框架项目&#xff0c;与PostgreSQL技术栈集成度高&#xff0c;运行需求资源少&#xff08;主要是本人的Macbook air m1内存只有8G&#xff09;的特点&#xff0c;对部署本地私有化化AI RAG应用友好。 Resource Recommendations Whe…

go中redis使用的简单介绍

目录 一、Redis 简介 二、Go中Redis的使用 1. 安装Go Redis包 2. 单机模式 连接示例 3. 哨兵模式 依赖 连接示例 三、Redis集群 1. 集群模式 集群部署 部署结构 使用redis-cli创建集群 连接示例 四、常用数据结构与操作 1. 字符串&#xff08;String&#xff0…

北京工业大学25计专上岸经验分享

1.个人情况介绍 本科就读于河北双非&#xff0c;专业为计算机科学与技术&#xff0c;四级三次498&#xff0c;六级两次460&#xff0c;拿过几次校级奖学金&#xff0c;竞赛经历有蓝桥杯国三、数学竞赛省二。本科成绩排名靠前&#xff0c;保研保7排8&#xff0c;遗憾选择考研继…

在 Ubuntu 24.04 系统上安装和管理 Nginx

1、安装Nginx 在Ubuntu 24.04系统上安装Nginx&#xff0c;可以按照下面的步骤进行&#xff1a; 1.1、 更新系统软件包列表 在安装新软件之前&#xff0c;需要先更新系统的软件包列表&#xff0c;确保获取到最新的软件包信息。打开终端&#xff0c;执行以下命令&#xff1a; …

HarmonyOS4+NEXT星河版入门与项目实战(26)-----版本控制与代码托管

引言 随着移动应用开发技术的不断进步,华为推出的鸿蒙操作系统(HarmonyOS)以及其配套的集成开发环境DevEco Studio逐渐成为开发者关注的焦点。对于新手开发者来说,掌握版本控制和代码托管不仅是提高工作效率的关键,也是团队协作的重要基础。本文将介绍如何在使用DevEco S…

利用Arcgis自己绘制shp文件

1.选择自己想要创建的shp文件的位置 我是直接创建在连接文件夹中 2.右键-新建-shp 3.设置名称、要素类型、空间参考 4、点击创建要素 5、右侧选择图层、创建面 6、开始绘制&#xff0c;双击任意位置结束绘制 之后可以改一下shp文件的名字

【C/C++】深入理解指针(六)

文章目录 深入理解指针(六)1.sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof和strlen的对⽐ 2.数组和指针笔试题解析2.1 ⼀维数组2.2 字符数组代码1&#xff1a;代码2&#xff1a;代码3&#xff1a;代码4&#xff1a;代码5&#xff1a;代码6&#xff1a; 2.3 ⼆维数组 3.…

探索大语言模型(LLM):语言模型从海量文本中无师自通

文章目录 引言&#xff1a;当语言模型学会“自己教自己”一、自监督学习&#xff1a;从“无标签”中挖掘“有监督”信号二、语言模型的自监督训练范式&#xff1a;两大经典路径1. 掩码语言模型&#xff08;Masked Language Modeling, MLM&#xff09;——以BERT为例2. 自回归语…

2025.5.4机器学习笔记:PINN文献阅读

2025.5.4周报 文献阅读题目信息摘要创新点网络架构实验结论不足以及展望 文献阅读 题目信息 题目&#xff1a; Physics-Informed Neural Network Approach for Solving the One-Dimensional Unsteady Shallow-Water Equations in Riverine Systems期刊&#xff1a; Journal o…

Unity Post Processing 小记 【使用泛光实现灯光亮度效果】

一、前言 本篇适用于Unity 2018 - 2019及以上版本&#xff0c;以默认渲染管线为例。文章内容源于个人研究尝试与网络资料收集&#xff0c;可能存在不准确之处。初衷是因新版本制作时老的Bloom插件失效&#xff0c;经研究后分享开启Bloom效果的方法。若在项目中使用Post Proces…

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例

目录 一、开发环境与框架搭建 二、地图数据加载与文档管理 1. 加载地图文档&#xff08;MXD&#xff09; 2. 动态添加数据源 三、地图浏览与交互操作 1. 基础导航功能 2. 书签管理 3. 量测功能 四、要素选择与属性查询 1. 属性查询 2. 空间查询 五、视图同步与鹰眼…

Qt指ModbusTcp协议的使用

Modbus 是一套通信“语言”&#xff08;协议&#xff09;&#xff0c;而 RS485 / RS232 / TCP 是通信“管道”&#xff08;物理接口&#xff09;。 编写modubusTcp程序&#xff0c;避免不了调试&#xff0c;首先用到的两个工具助手 poll是主机,slave是从机。主机也就是发送数据…

探索大语言模型(LLM):自监督学习——从数据内在规律中解锁AI的“自学”密码

文章目录 自监督学习&#xff1a;从数据内在规律中解锁AI的“自学”密码一、自监督学习的技术内核&#xff1a;用数据“自问自答”1. 语言建模&#xff1a;预测下一个单词2. 掩码语言模型&#xff08;MLM&#xff09;&#xff1a;填补文本空缺3. 句子顺序预测&#xff08;SOP&a…

CentOS7.9安装Python 3.10.11并包含OpenSSL1.1.1t

1. 安装编译 Python 所需的依赖包 yum -y install gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel wget2. 安装 OpenSSL 1.1.1 或更新版本 &#xff08;自定义路径安装的 OpenSSL 1.1.1 不会影响系统原有的…

qt事件过滤与传递机制

当点击 QLabel 时&#xff0c;正常情况下并不会直接触发 MyWidget 的 mousePressEvent 函数&#xff0c;原因在于事件的传递机制和事件过滤器的存在。下面详细分析这个过程&#xff1a; 事件传递机制 在 Qt 里&#xff0c;事件的传递是从子控件往父控件冒泡的。不过&#xff…

ubuntu 安装ollama后,如何让外网访问?

官网下载linux版本&#xff1a;https://ollama.com/download/linux 1、一键安装和运行 curl -fsSL https://ollama.com/install.sh | sh 2、下载和启动deepseek-r1大模型 ollama run deepseek-r1 这种方式的ollama是systemd形式的服务&#xff0c;会随即启动。默认开启了 …

kotlin与MVVM结合使用总结(三)

1. MVVM 架构详细介绍及源码层面理解 整体架构 MVVM&#xff08;Model - View - ViewModel&#xff09;架构是为了解决视图和数据模型之间的耦合问题而设计的。它通过引入 ViewModel 作为中间层&#xff0c;实现了视图和数据的分离&#xff0c;提高了代码的可维护性和可测试性…

A系统使用iframe嵌套B系统时登录跨域问题!

我这边两个项目都是独立的&#xff0c;问题是做了跨域配置之后点击登录接口调用成功但是页面没有跳转进去 显示以下报错 这个错误明确指出了问题的核心原因&#xff1a;由于跨站点Cookie设置未正确声明SameSiteNone&#xff0c;导致浏览器拦截了Cookie。这是现代浏览器&#x…

消息唯一ID算法参考

VUE // src/utils/idGenerator.js/*** 雪花算法风格的 ID 生成器**//*** 前缀 w代表web端,m代表手机端**/ const DEFAULT_PREFIX = w; const DEFAULT_TOTAL_LENGTH = 16; const CHARS

《WebGIS之Vue零基础教程》(5)计算属性与侦听器

1 计算属性 1) 什么是计算属性 :::info 计算属性就是基于现有属性计算后的属性 ::: 2) 计算属性的作用 计算属性用于对原始数据的再次加工 3) 案例 :::warning **需求** 实现如下效果 ::: 使用表达式实现 html Document 请输入一个字符串: 反转后的字符串: {{msg.split(…