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.pswp.cn/news/903235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903235.shtml
英文地址,請注明出處:http://en.pswp.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(…