Docker 入門

Docker 入門

基礎

不同操作系統下其安裝包、運行環境是都不相同的!如果是手動安裝,必須手動解決安裝包不同、環境不同的、配置不同的問題

而使用Docker,這些完全不用考慮。就是因為Docker會自動搜索并下載MySQL。注意:這里下載的不是安裝包,而是**鏡像(image)鏡像中不僅包含了MySQL本身,還包含了其運行所需要的環境、配置、系統級函數庫。因此它在運行時就有自己獨立的環境,就可以跨系統運行,也不需要手動再次配置環境了。這套獨立運行的隔離環境我們稱為容器(container)**

💡 Docker安裝軟件的過程,就是自動搜索下載鏡像,然后創建并運行容器的過程

Docker本身包含一個后臺服務,我們可以利用Docker命令告訴Docker服務,幫助我們快速部署指定的應用。Docker服務部署應用時,首先要去搜索并下載應用對應的鏡像,然后根據鏡像創建并允許容器,應用就部署完成

在這里插入圖片描述

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

解讀:

  • docker run -d :創建并運行一個容器,d則是讓容器以后臺進程運行
  • -name mysql : 給容器起個名字叫mysql,你可以叫別的
  • p 3306:3306 : 設置端口映射。
    • 容器是隔離環境,外界不可訪問。但是可以將宿主機端口映射容器內到端口,當訪問宿主機指定端口時,就是在訪問容器內的端口了。
    • 容器內端口往往是由容器內的進程決定,例如MySQL進程默認端口是3306,因此容器內端口一定是3306;而宿主機端口則可以任意指定,一般與容器內保持一致。
    • 格式: p 宿主機端口:容器內端口,示例中就是將宿主機的3306映射到容器內的3306端口
  • e TZ=Asia/Shanghai : 配置容器內進程運行時的一些參數
    • 格式:e KEY=VALUE,KEY和VALUE都由容器內進程決定
    • 案例中,TZ=Asia/Shanghai是設置時區;MYSQL_ROOT_PASSWORD=123是設置MySQL默認密碼
  • mysql : 設置鏡像名稱,Docker會根據這個名字搜索并下載鏡像
    • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解為鏡像名,TAG是版本號
    • 在未指定TAG的情況下,默認是最新版本,也就是mysql:latest

Docker 常見命令

命令說明文檔地址
docker pull拉取鏡像https://docs.docker.com/engine/reference/commandline/pull/
docker push推送鏡像到DockerRegistryhttps://docs.docker.com/engine/reference/commandline/push/
docker images查看本地鏡像https://docs.docker.com/engine/reference/commandline/images/
docker rmi刪除本地鏡像https://docs.docker.com/engine/reference/commandline/rmi/
docker run創建并運行容器(不能重復創建)https://docs.docker.com/engine/reference/commandline/run/
docker stop停止指定容器https://docs.docker.com/engine/reference/commandline/stop/
docker start啟動指定容器https://docs.docker.com/engine/reference/commandline/start/
docker restart重新啟動容器https://docs.docker.com/engine/reference/commandline/restart/
docker rm刪除指定容器https://docs.docker.com/engine/reference/commandline/rm/
docker ps查看容器https://docs.docker.com/engine/reference/commandline/ps/
docker logs查看容器運行日志https://docs.docker.com/engine/reference/commandline/logs/
docker exec進入容器https://docs.docker.com/engine/reference/commandline/exec/
docker save保存鏡像到本地壓縮文件https://docs.docker.com/engine/reference/commandline/save/
docker load加載本地壓縮文件到鏡像https://docs.docker.com/engine/reference/commandline/load/
docker inspect查看容器詳細信息https://docs.docker.com/engine/reference/commandline/inspect/

在這里插入圖片描述

💡 docker run 相當于 docker create 和 docker start,啟動鏡像時不要使用 docker run

Nginx為例演示上述命令

# 第1步,去DockerHub查看nginx鏡像倉庫及相關信息# 第2步,拉取Nginx鏡像
docker pull nginx# 第3步,查看鏡像
docker images
# 結果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 第4步,創建并允許Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步,查看運行中容器
docker ps
# 也可以加格式化方式訪問,格式會更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第6步,訪問網頁,地址:http://虛擬機地址# 第7步,停止容器
docker stop nginx# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第9步,再次啟動nginx容器
docker start nginx# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第11步,查看容器詳細信息
docker inspect nginx# 第12步,進入容器,查看容器內目錄
docker exec -it nginx bash
# 或者,可以進入MySQL
docker exec -it mysql mysql -uroot -p# 第13步,刪除容器
docker rm nginx
# 發現無法刪除,因為容器運行中,強制刪除容器
docker rm -f nginx

給常用Docker命令起別名,方便訪問:

# 修改/root/.bashrc文件
vi /root/.bashrc
內容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi

數據卷

容器提供程序的運行環境,但是程序運行產生的數據、程序運行依賴的配置都應該與容器解耦

數據卷(volume)是一個虛擬目錄,是容器內目錄宿主機目錄之間映射的橋梁

在這里插入圖片描述

在上圖中:

  • 我們創建了兩個數據卷:confhtml
  • Nginx容器內部的conf目錄和html目錄分別與兩個數據卷關聯。
  • 而數據卷conf和html分別指向了宿主機的/var/lib/docker/volumes/conf/_data目錄和/var/lib/docker/volumes/html/_data目錄

這樣以來,容器內的confhtml目錄就 與宿主機的confhtml目錄關聯起來,我們稱為掛載。此時,我們操作宿主機的/var/lib/docker/volumes/html/_data就是在操作容器內的/usr/share/nginx/html/_data目錄。只要我們將靜態資源放入宿主機對應目錄,就可以被Nginx代理了

💡 /var/lib/docker/volumes這個目錄就是默認的存放所有容器數據卷的目錄,其下再根據數據卷名稱創建新目錄,格式為/數據卷名/_data

為什么不讓容器目錄直接指向宿主機目錄呢

  • 因為直接指向宿主機目錄就與宿主機強耦合了,如果切換了環境,宿主機目錄就可能發生改變了。由于容器一旦創建,目錄掛載就無法修改,這樣容器就無法正常工作了
  • 但是容器指向數據卷,一個邏輯名稱,而數據卷再指向宿主機目錄,就不存在強耦合。如果宿主機目錄發生改變,只要改變數據卷與宿主機目錄之間的映射關系即可
  • 一般數據卷目錄比較深,不好尋找,通常讓容器直接與宿主機目錄掛載而不使用數據卷

數據卷的相關命令有:

命令說明文檔地址
docker volume create創建數據卷https://docs.docker.com/engine/reference/commandline/volume_create/
docker volume ls查看所有數據卷https://docs.docker.com/engine/reference/commandline/volume_ls/
docker volume rm刪除指定數據卷https://docs.docker.com/engine/reference/commandline/volume_prune/
docker volume inspect查看某個數據卷的詳情https://docs.docker.com/engine/reference/commandline/volume_inspect/
docker volume prune清除數據卷https://docs.docker.com/engine/reference/commandline/volume_prune/

容器與數據卷的掛載要在創建容器時配置,對于創建好的容器,是不能設置數據卷的。而且創建容器的過程中,數據卷會自動創建

數據卷的目錄結構較深,如果操作數據卷目錄會不太方便。在很多情況下,會直接將容器目錄與宿主機指定目錄掛載。掛載語法與數據卷類似:

# 掛載本地目錄
-v 本地目錄:容器內目錄
# 掛載本地文件
-v 本地文件:容器內文件

💡 本地目錄或文件必須以 /./開頭,如果直接以名字開頭,會被識別為數據卷名而非本地目錄名

-v mysql:/var/lib/mysql # 會被識別為一個數據卷叫mysql,運行時會自動創建這個數據卷
-v ./mysql:/var/lib/mysql # 會被識別為當前目錄下的mysql目錄,運行時如果不存在會創建目錄

參考

黑馬程序員Docker快速入門到項目部署,MySQL部署+Nginx部署+docker自定義鏡像+DockerCompose項目實戰

day02-Docker — 張虎翼

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

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

相關文章

【C++】輸入輸出流 ⑥ ( cout 標準輸出流對象 | cout 常用 api 簡介 | cout.put(char c) 函數 )

文章目錄 一、cout 標準輸出流對象1、cout 標準輸出流對象簡介2、cout 常用 api 簡介 二、cout.put(char c) 函數1、cout.put(char c) 函數 簡介2、代碼示例 - cout.put(char c) 函數 一、cout 標準輸出流對象 1、cout 標準輸出流對象簡介 cout 是 標準輸出流 對象 , 是 ostrea…

端口被占用 --- 解決方案

問題描述 加速服務啟動失敗,443端口被magentproc(1576)占用。請關掉占用443端口的程序或者嘗試使用系統代理模式。 問題解決 按下 win R 打開 輸入cmd 輸入命令 netstat -ano | findstr 443 找到 0.0.0.0:443 對應的端口 (1576) 按下 ctrl shift esc, 打開任務管…

綜述 2023-IEEE-TCBB:生物序列聚類方法比較

Wei, Ze-Gang, et al. "Comparison of methods for biological sequence clustering." IEEE/ACM Transactions on Computational Biology and Bioinformatics (2023). https://ieeexplore.ieee.org/document/10066180 被引次數:1;研究背景&am…

力扣題:數字與字符串間轉換-12.13

力扣題-12.13 [力扣刷題攻略] Re:從零開始的力扣刷題生活 力扣題1:442. 數組中重復的數據 解題思想:直接相除即可 class Solution(object):def optimalDivision(self, nums):""":type nums: List[int]:rtype: str"&qu…

Transformer 簡介

Transformer 是 Google 在 2017 年底發表的論文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 機制,能夠處理輸入序列中的每個元素,并能計算其與序列中其他元素的交互關系的方法,從而能夠更…

再見了Future,圖解JDK21虛擬線程的結構化并發

Java為我們提供了許多啟動線程和管理線程的方法。在本文中,我們將介紹一些在Java中進行并發編程的選項。我們將介紹結構化并發的概念,然后討論Java 21中一組預覽類——它使將任務拆分為子任務、收集結果并對其進行操作變得非常容易,而且不會不…

Unity中Shader黑白閥值后處理效果

文章目錄 前言一、我們先來PS看一下黑白閥值的效果二、使用step(a,b)函數實現效果三、實現腳本控制黑白閥值1、在Shader屬性面板定義控制閥值變量2、把step的a改為_Value3、在后處理腳本設置公共成員變量,并且設置范圍為(0,1)4、在Graphics.B…

Cocos Creator:創建棋盤

Cocos Creator:創建棋盤 創建地圖三部曲:1. 創建layout組件2. 創建預制體Prefab,做好精靈貼圖:3. 創建腳本LayoutSprite.ts收尾工作: 創建地圖三部曲: 1. 創建layout組件 使用layout進行布局,…

優化瑞芯微rk3566 tf卡速度uhs SDR104

環境 開發板:orangepi3B CPU:rk3566 TF卡速度標識:C10,U3,V30 起因 對于tf卡啟動的系統來說,io會成為一個很關鍵的瓶頸,所以總希望系統能跑得快一點。我手頭用的是一張金士頓的高性能tf卡,開…

四十三、Redis基礎

目錄 一、認識NoSql 1、定義: 2、常見語法 3、與關系型數據庫(SQL)的區別: 二、認識Redis 1、定義: 2、特征: 3、Key的結構: 三、安裝Redis 四、Redis常見命令 1、數據結構介紹 2、…

關于DNS服務器地址總是127.0.0.1且無法解析域名地址

問題 筆者嘗試nslookup解釋域名時,出現服務器變成本地環回口地址,導致無法解析域名 C:\Users\Zsy>nslookup www.baidu.com 服務器: UnKnown Address: 127.0.0.1*** UnKnown 找不到 www.baidu.com: Server failed排查思路 嘗試關閉虛擬網卡&#…

CSS的邏輯組合偽類

CSS 的邏輯組合偽類有 4 種,分別是::not()、:is()、:where()和:has()。 否定偽類:not() :not 偽類選擇器用來匹配不符合一組選擇器的元素。由于它的作用是防止特定的元素被選中,它也被稱為反選偽類(negation pseudo-…

Torch2TRT編譯和使用踩坑

前言 Torch2TRT是英偉達提供的開源Pytorch到TensorRT模型的轉化工具。相對于其他Pytorch模型轉TensorRT的方式,我認為這是最簡單和容易上手的方式。但是該工具并不成熟,在安裝和使用過程中有一些坑。 遇到的問題 1. fatal error: xxxxxx.h: No such f…

自動化測試框架 —— pytest框架入門篇

今天就給大家說一說pytest框架。 今天這篇文章呢,會從以下幾個方面來介紹: 01、pytest框架介紹 pytest 是 python 的第三方單元測試框架,比自帶 unittest 更簡潔和高效,支持非常豐富的插件,同時兼容 unittest 框架。…

【C++】:AVL樹

朋友們、伙計們,我們又見面了,本期來給大家解讀一下有關多態的知識點,如果看完之后對你有一定的啟發,那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數據結…

用python 網絡自動化統計交換機有多少端口UP

用python統計交換機有多少端口UP 用python統計交換機有多少端口UP,可以間接的反饋有多少個用戶在線。我們使用上次的腳本將可達的網絡設備ip統計到reachable_ip.txt中,這次我們使用reachable_ip.txt來登陸設備來統計多少端口是UP的 云配置 拓撲 交換機…

使用fcl庫做碰撞檢測

fcl庫是真難用,導入自己的項目的時候遇到各種坑。 第一個坑就是git clone并build fcl庫后生成的fcl-config.cmake里面有問題,需要在這里進行相應修改 set_and_check(FCL_INCLUDE_DIRS "/home/xxxx/fcl/build/include") set(FCL_LIBRARIES fc…

【Cisco Packet Tracer】VLAN通信 多臂/單臂路由/三層交換機

在進行本文的實驗之前,請確保掌握以下內容: 【Cisco Packet Tracer】交換機 學習/更新/泛洪/VLAN實驗 【Cisco Packet Tracer】路由器實驗 靜態路由/RIP/OSPF/BGP 【Cisco Packet Tracer】路由器 NAT實驗 本文介紹VLAN間的通信方法, 包括…

FreeRTOS的任務優先級、Tick以及狀態講解(尊敬的嵌入式工程師,不妨進來喝杯茶)

任務優先級和Tick 在FreeRTOS中,任務的優先級和Tick是兩個關鍵的概念,它們直接影響任務的調度和執行。 任務優先級 每個任務都被分配一個優先級,用于決定任務在系統中的調度順序。 優先級是一個無符號整數,通常從0開始&#xff0…

Mysql- 流程函數-(If, CASE WHEN)的使用及練習

目錄 4.1 If函數語法格式 4.2 CASE WHEN 條件表達式格式 4.3 update與 case when 4.4 練習題1 4.5 練習題2 4.6 練習題3-行轉列 4.7 牛客練習題 4.8 LeetCode練習題 4.1 If函數語法格式 IF(expr1,expr2,expr3) 解釋&#xff1a; 如果表達式expr1true(expr1 <>…