docker安裝,鏡像,常用命令,Docker容器卷,Docker應用部署,自定義鏡像,Docker服務編排,創建私有倉庫

1.為什么使用docker

如果開發環境和測試環境的允許軟件版本不一致,可能會導致項目無法正常啟動

把環境和項目一起打包發送給測試環境

1.1docker的概念

開源的應用容器引擎,完全使用沙箱機制,相互隔離,容器性能開銷極低

一種容器技術,解決軟件跨環境遷移的問題

1.2安裝


#2、安裝需要的軟件包,yum-util提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、設置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4、安裝docker ,出現輸入的界面都按y ?ce社區版---學習夠了, ? ee版企業版收費
yum install -y docker-ce
# 5、查看docker版本,驗證是否驗證成功
docker -v

上面無法安裝可采取

# step 1: 安裝必要的一些系統工具
?yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
?yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
?sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安裝Docker-CE
?yum makecache fast


?yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

?

1.3設置docker鏡像地址

sudo tee /etc/docker/daemon.json <<-'EOF'
{
? ? "registry-mirrors": [
? ? ? ? "https://do.nark.eu.org",
? ? ? ? "https://dc.j8.work",
? ? ? ? "https://docker.m.daocloud.io",
? ? ? ? "https://dockerproxy.com",
? ? ? ? "https://docker.mirrors.ustc.edu.cn",
? ? ? ? "https://docker.nju.edu.cn"
? ? ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

2.常用命令

啟動docker服務? systemctl start docker

停止docker服務 systemctl stop docker 重啟docker服務 systemctl restart docker

查看docker服務狀態 systemctl status docker

開機啟動dockeh服務 systemctl enable docker

查看docker命令幫助文檔: docker 具體命令 --help

2.2鏡像命令

查看本地鏡像: ? docker images?

搜索鏡像 遠程倉庫的? ?docker search redis

拉取鏡像??docker pull redis:6.0 ?冒號后跟的是版本號,如果不跟默認latest

根據id刪除
docker rmi id
根據名稱:版本號刪除
docker rmi redis:6.0
-------------------------------------------------------
刪除沒有開啟容器的鏡像

刪除所有鏡像
docker images q --查詢所有鏡像的id
docker rmi (docker images q)

2.3容器命令

1.創建容器

-i :交互

-t:給容器分配偽終端接受命令? ? 如果使用exit則退出容器,容器會被關閉

--name:給容器起名字

redis:latest:鏡像加版本號

/bin/bash 進入容器的初始化指令? 這里相當打開了一個shell窗口

?2.查看容器

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

3.創建一個容器但不進入容器

docker run -id --name=c_redis02 redis:latest /bin/bash

這種創建的容器退出后不會自動關閉

4.進入正在運行的指定容器內

docker exec -it c_redis02 /bin/bash

5.啟動容器

docker start 容器名|id

6.關閉容器

docker stop 容器名

7.刪除容器

docker rm 容器id #只刪除未啟動的容器

docker rm -f 容器id||名稱 #刪除任何容器

docker ps -aq #查看所有容器的id

查看容器信息 docker inspect?容器名|id

輸出當前容器日志信息---知道容器啟動失敗的原因? docker logs 容器id

3.Docker容器卷

1.容器被刪除后,里面的數據不會存在

2.外界不能與容器直接交互,可以與宿主機交互,宿主機與容器交互

3.容器與容器之間可以共享文件

3.1數據卷的概念

數據卷是宿主機中的一個目錄或文件
當容器目錄和數據卷目錄綁定后對方的修改會立即同步
一個數據卷可以被多個容器同時掛載
一個容器也可以被掛載多個數據卷
作用:
1.解決數據持久化問題
2.解決外部機器和容器的間接通訊問題
3.解決容器之間的數據交換

3.2創建數據卷

docker run -id --name=容器名 -v /宿主機目錄:/容器中的目錄 鏡像名:版本號 /bin/bash

-v :掛載數據卷

docker run -id --name=c1 -v /aaa:/c_aaa redis:latest /bin/bash

4.Docker應用部署

4.1 Docker部署mysql

1. 拉取mysql鏡像---docker pull mysql:8.0
2. 創建一個mysql目錄。mkdir/root/mysql
3. 進入/root/mysql
4. 創建mysql容器。

?docker run -d --name=mysql01 -p 3307:3306 -v /usr/docker/mysql/log:/var/log/mysql \
?-v /usr/docker/mysql/data:/var/lib/mysql -v /usr/docker/mysql/conf:/etc/mysql/conf.d \

?-e MYSQL_ROOT_PASSWORD=123456 mysql:8.0


介紹參\數:

  • -p 3307:3306:將容器的 3306 端口映射到宿主機的 3307 端口。

    • -v /ykq/mysql/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄

    • -v /ykq/mysql/log:/var/log/mysql:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄

    • -v /ykq/mysql/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。數據目錄

    • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。

?4.2安裝tomcat

docker pull tomcat

創建容器,設置端口映射、目錄映射

mkdir ~/tomcat
cd ~/tomcat

docker run -id --name=c_tomcat --restart=always \
?-p 8089:8080 \
?-e TZ=Asia/Shanghai \
?-v /usr/docker/tomcat/webapps:/usr/local/tomcat/webapps \
?tomcat:10

4.3部署nginx

拉取鏡像docker pull nginx

創建容器,設置端口映射、目錄映射

# 在/root目錄下創建nginx目錄用于存儲nginx數據信息
mkdir /usr/docker/nginx
cd ?/usr/docker/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下創建nginx.conf文件,粘貼下面內容
vim nginx.conf

user ?nginx;
worker_processes ?1;

error_log ?/var/log/nginx/error.log warn;
pid ? ? ? ?/var/run/nginx.pid;


events {
worker_connections ?1024;
}


http {
include ? ? ? /etc/nginx/mime.types;
default_type ?application/octet-stream;

log_format ?main ?'$remote_addr - $remote_user [$time_local] "$request" '
? ? ? ? ? '$status $body_bytes_sent "$http_referer" '
? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

access_log ?/var/log/nginx/access.log ?main;

sendfile ? ? ? ?on;
#tcp_nopush ? ? on;

keepalive_timeout ?65;

#gzip ?on;

include /etc/nginx/conf.d/*.conf;
}

docker run -p 80:80 \
-d --name=nginx \
-v /usr/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/docker/nginx/html:/usr/share/nginx/html \
nginx:latest

4.4redis部署

docker pull redis

?docker run -id --name=redis01 -p 6379:6379 redis:latest

5.自定義鏡像

5.1 鏡像制作

自定義鏡像:提供了兩種方式: 第一種:基于容器來制作 第二種: 通過dockerfile文件來制作[重要]

操作系統組成部分:
進程調度子系統
進程通信子系統
內存管理子系統
設備管理子系統
文件管理子系統
網絡通信子系統
作業控制子系統

1. Docker鏡像本質是什么?
·是一個分層文件系統
2. Docker中一個centos鏡像為什么只有200MB,而一個centos操作系統的iso文件要幾個個G?
·Centos的iso鏡像文件包含bootfs和rootfs,而docker的centos鏡像復用操作系統的bootfs,只有rootfs和其他鏡像層
3. Docker中一個tomcat鏡像為什么有500MB,而一個tomcat按裝包只有70多MB?
·由于docker中鏡像是分層的,tomcat雖然只有70多MB,但他需要依賴于父鏡像和基礎鏡像,所有整個對外暴露的tomcat鏡像大小500多MB

拉jdk

docker pull openjdk:8

創建鏡像

?docker commit bb016ec9269e aaa_tomcat:1.0

打包鏡像

docker save -o aaa_tomcat.tar aaa_tomcat:1.0

刪除鏡像docker rmi aaa_tomcat:1.0

解壓打包的鏡像docker load -i aaa_tomcat.tar

創建容器?docker run -it --name=aaa_tomcat aaa_tomcat:1.0 /bin/bash

重新運行自定義的鏡像,掛載文件會失效,其他目錄下的文件還會存在

5.3dockerfile的概念[重要]

  • Dockerfile是一個文本---任意一個鏡像都是通過dockerfile來制作。MySQL redis tomcat等 項目

  • 文件包含了一條條的指令。

  • 每一條指令構建一層,基于基礎鏡像,最終構建出一個新的鏡像

  • 對于開發人員:可以為開發團隊提供一個完全一致的開發環境

  • 對于測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了

  • 對于運維人員:在部署時,可以實現應用的無縫跨平臺移植。

5.3.1Dockerfile關鍵字

案例1

準備

docker pull centos:7

docker run -id --name=centos7 centos:7

docker exec -it centos7 /bin/bash? ? ?容器中vim不可用

文件里面的內容

FROM centos:7
MAINTAINER xxx <xxx@qq.com>
RUN yum install -y vim
WORKDIR /usr
CMD ["/bin/bash"]

————————————————————————上面不能用的話使用下面的

FROM centos:7?
MAINTAINER xxx<xxxx@qq.com>
?
ENV MYPATH /usr
WORKDIR $MYPATH
?
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum makecache
?
RUN yum -y install vim
RUN yum -y install net-tools
?
EXPOSE 80
?
CMD echo $MYPATH
CMD echo "============"
CMD /bin/bash

構建鏡像

docker build -f centos_dockerfile -t abc_centos:1.0 .

-f:表示dockerfile文件
-t: 鏡像名稱版本號?
.? ?(點): 必須加上

創建容器vim可用

案例2

將打包好的jar文件拖進去,并創建

FROM openjdk:17
MAINTAINER xxx <xxxx@qq.com>
ADD demo05.jar app.jar
CMD java -jar app.jar

? 根據dockerfile制作鏡像

docker build -f demo_dockerfile -t app:1.0 .

啟動并做端口映射

docker run -id --name=app05 -p 9001:8080 app:1.0

6.Docker服務編排

6.1 概述

docker建議我們每一個容器中只運行一個服務,因為docker容器本身占用資源極少,所以最好是將每個服務單獨的分割開來但是這樣我們又面臨了一個問題?[微服務100---dockerfile----鏡像---運行為容器]

如果我需要同時部署好多個服務,難道要每個服務單獨寫Dockerfile然后在構建鏡像,構建容器,這樣累都累死了,所以docker官方給我們提供了docker-compose多服務部署的工具.--服務編排

Compose允許用戶通過一個單獨的docker-compose.yml模板文件[你寫](YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。

可以很容易地用一個配置文件定義一個多容器的應用,然后使用一條指令安裝這個應用的所有依賴,完成構建。Docker-Compose 解決了容器與容器之間如何管理編排的問題。

6.2?Docker Compose 安裝使用

?# Compose目前已經完全支持Linux、Mac OS和Windows,在我們安裝Compose之前,需要先安裝Docker。下面我 們以編譯好的二進制包方式安裝在Linux系統中。?
#curl -L https://mirrors.tuna.tsinghua.edu.cn/docker-compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 設置文件可執行權限?
chmod +x /usr/local/bin/docker-compose
# 查看版本信息?

docker compose version

springboot+nginx編排

1.創建docker-compose目錄

mkdir ~/docker-compose
cd ~/docker-compose

2.打包springboot工程

3編寫 docker-compose.yml 文件

services:
? nginx:
? ? image: nginx
? ? ports:
? ? ? - 80:80
? ? links:
? ? ? - app05
? ? volumes:
? ? ? - ./nginx/conf.d:/etc/nginx/conf.d
? app05:
? ? image: app:1.0
? ? expose:
? ? ? - "8080"
version: "3.9"

?4.mkdir -p nginx/conf.d

在里面加一個ngin.conf文件

server {
? ? ? ? listen ?80;
? ? ? ? access_log off;

? ? ? ? location / {
? ? ? ? ? ? proxy_pass http://app05:8080;
? ? ? ? }
}

5.啟動容器?

docker compose up

6.3創建私有倉庫

# 1、拉取私有倉庫鏡像?
docker pull registry
# 2、啟動私有倉庫容器?
docker run -id --name=registry -p 5000:5000 registry
# 3、打開瀏覽器 輸入地址http://私有倉庫服務器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有倉庫 搭建成功
# 4、修改daemon.json ??
vi /etc/docker/daemon.json ? ?
# 在上述文件中添加一個key,保存退出。此步用于讓 docker 信任私有倉庫地址;注意將私有倉庫服務器ip修改為自己私有倉庫服務器真實ip?
"insecure-registries":["ip:5000"]?
# 5、重啟docker 服務?
systemctl restart docker
docker start registry

輸入? ? ? http://ip:5000/v2/_catalog

6.3.1上傳到私有倉庫

# 1、標記鏡像為私有倉庫的鏡像 ? ??
docker tag centos:7 私有倉庫服務器IP:5000/centos:7
?
# 2、上傳標記的鏡像 ? ??
docker push 私有倉庫服務器IP:5000/centos:7

6.3.2拉取

docker pull 私有倉庫服務器ip:5000/centos:7

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73663.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73663.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73663.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES 字段的映射定義了字段的類型及其行為

在 Elasticsearch 中&#xff0c;字段的映射定義了字段的類型及其行為。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …

Manus的開源替代者之一:OpenManus通用AI智能體框架解析及產品試用

引言 在AI智能體領域&#xff0c;Monica團隊近期發布的Manus被譽為全球首個通用型AI智能體。該項目推出后迅速爆紅&#xff0c;邀請碼一號難求&#xff0c;隨之而來的是各路開發者快速構建了眾多類似的開源替代方案。其中&#xff0c;MetaGPT團隊的5位工程師僅用3小時就開發完…

Linux MariaDB部署

1&#xff1a;查看Linux系統版本 cat /etc/os-release#返回結果&#xff1a; NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI…

PHP MySQL 預處理語句

PHP MySQL 預處理語句 引言 在PHP中與MySQL數據庫進行交互時,預處理語句是一種非常安全和高效的方法。預處理語句不僅可以防止SQL注入攻擊,還可以提高數據庫查詢的效率。本文將詳細介紹PHP中預處理語句的用法,包括其基本概念、語法、優勢以及在實際開發中的應用。 預處理…

算法 | 2024最新算法:鳑鲏魚優化算法原理,公式,應用,算法改進研究綜述,matlab代碼

2024最新鳑鲏魚優化算法(BFO)研究綜述 鳑鲏魚優化算法(Bitterling Fish Optimization, BFO)是2024年提出的一種新型群智能優化算法,受鳑鲏魚獨特的繁殖行為啟發,通過模擬其交配、產卵和競爭機制進行全局優化。該算法在多個領域展現出優越性能,尤其在解決復雜非線性問題中…

HDR(HDR10/ HLG),SDR

以下是HDR&#xff08;HDR10/HLG&#xff09;和SDR的詳細解釋&#xff1a; 1. SDR&#xff08;Standard Dynamic Range&#xff0c;標準動態范圍&#xff09; ? 定義&#xff1a;SDR是傳統的動態范圍標準&#xff0c;主要用于8位色深的視頻顯示&#xff0c;動態范圍較窄&…

uni-app頁面怎么設計更美觀

頂部 頁面最頂部要獲取到手機設備狀態欄的高度&#xff0c;避免與狀態欄重疊或者被狀態欄擋住 // 這是最頂部的父級容器 <view :style"{ paddingTop: ${statusBarHeight extraPadding}px }">.... </view> export default {data() {return {statusBarH…

江西核威環保科技:打造世界前沿的固液分離設備高新企業

隨著市場經濟的不斷發展&#xff0c;消費者的需求越來越大&#xff0c;為了更好的服務廣大新老客戶&#xff0c;作為知名品牌的“江西核威環保科技有限公司&#xff08;以下簡稱江西核威環保科技&#xff09;”&#xff0c;將堅持以“服務為企業宗旨&#xff0c;全力打造世界前…

Ethernet(以太網)詳解

一、Ethernet的定義與核心特性 以太網&#xff08;Ethernet&#xff09;是一種 基于IEEE 802.3標準的局域網&#xff08;LAN&#xff09;技術&#xff0c;用于設備間通過有線或光纖介質進行數據通信。其核心特性包括&#xff1a; 標準化&#xff1a;遵循IEEE 802.3系列協議&am…

JBDev - Theos下一代越獄開發工具

JBDev - Theos下一代越獄開發工具 自越獄誕生以來&#xff0c;Theos一直是越獄開發的主流工具&#xff0c;大多數開發者使用Theos編譯代碼&#xff0c;再用lldb手動調試。JBDev簡化了這個過程&#xff0c;項目地址https://github.com/lich4/JBDev 簡介 JBDev用于Xcode越獄開…

黑蘋果及OpenCore Legacy Patcher

黑蘋果及OpenCore Legacy Patcher OpenCoreUnable to resolve dependencies, error code 71 OpenCore Unable to resolve dependencies, error code 71 黑蘋果升級后打補丁不成功&#xff0c;比如提示以下錯誤&#xff0c;可參考官方文檔進行修復。 Open TerminalType sudo …

el-table + el-pagination 前端實現分頁操作

el-table el-pagination 前端實現分頁操作 后端返回全部列表數據&#xff0c;前端進行分頁操作 html代碼 <div><el-table :data"tableData" border><el-table-column label"序號" type"index" width"50" /><el…

PTA 1097-矩陣行平移

給定一個&#x1d45b;&#x1d45b;nn的整數矩陣。對任一給定的正整數&#x1d458;<&#x1d45b;k<n&#xff0c;我們將矩陣的奇數行的元素整體向右依次平移1、……、&#x1d458;、1、……、&#x1d458;、……1、……、k、1、……、k、……個位置&#xff0c;平移…

C++藍橋杯實訓篇(一)

片頭 嗨~小伙伴們&#xff0c;大家好&#xff01;現在我們來到實訓篇啦~本篇章涉及算法知識&#xff0c;比基礎篇稍微難一點&#xff0c;我會盡量把習題講的通俗易懂。準備好了嗎&#xff1f;咱們開始咯&#xff01; 第1題 遞歸實現指數型枚舉 我們先畫個圖~ 從圖中&#xff…

#C8# UVM中的factory機制 #S8.5# 對factory機制的重載進一步思考

前面的重載,我們已經談了很多,為什么還需要進一步聊聊呢。作為碼農,我們喜歡拿來多種相近語言,進行對比理解,相信這是一種加深對問題理解的方式。 一 C++ 重載 在 C++ 中,重載 和 多態 的英文術語分別是:重載 → Overloading ;多態 → Polymorphism 重載的定義:在…

CentOS(最小化)安裝之后,快速搭建Docker環境

本文以VMware虛擬機中安裝最小化centos完成后開始。 1. 檢查網絡 打開網卡/啟用網卡 執行命令ip a查看當前的網絡連接是否正常&#xff1a; 如果得到的結果和我一樣&#xff0c;有ens網卡但是沒有ip地址&#xff0c;說明網卡未打開 手動啟用&#xff1a; nmcli device sta…

力扣刷題第一遍

https://leetcode.cn/problemset/algorithms/ 棧 有效的括號 接雨水&#xff08;單調遞減棧&#xff09; 柱狀圖中最大的矩形&#xff08;單調遞減棧&#xff09; 逆波蘭表達式求值 基本計算器 最小棧 每日溫度&#xff08;單調遞減棧&#xff09; 用棧實現隊列 驗證棧…

藍橋杯經典題解:班級活動分組問題的深度解析與優化實現

目錄 一、問題背景與描述 二、問題分析與核心思路 2.1 問題本質&#xff1a;統計與配對優化 2.2 關鍵觀察 2.3 數學建模 三、算法設計與實現步驟 3.1 算法步驟 3.2 代碼實現&#xff08;Python&#xff09; 3.3 優化點分析 四、關鍵細節與常見誤區 4.1 細節處理 4.…

軟考《信息系統運行管理員》- 5.3 信息系統數據資源備份

文章目錄 數據資源備份類型按數據備份模式分按備份過程中是否可接收用戶響應和數據更新分按數據備份策略分按備份的實現方式分按數據備份的存儲方式分 常用備份相關技術磁盤陣列技術雙機熱備 某公司數據備份管理制度實例 數據資源備份類型 數據備份系統由硬件和軟件兩部分組成…

【藍橋杯】3月27日筆記

1.暴力枚舉 給定一個正整數n&#xff0c;請找出所有滿足a b n的整數對(a, b)&#xff0c;其中a和b都是正整數&#xff0c;且a ≤ b。 輸入格式&#xff1a;一個正整數n (1 ≤ n ≤ 10?) 輸出格式&#xff1a;所有符合條件的(a, b)對&#xff0c;每行一對&#xff0c;按a的…