02-Docker 使用

docker:快速構建、運行、管理應用的工具,可以幫助我們下載應用鏡像,創建并運行鏡像的容器,從而快速部署應用

1、部署mysql

先停掉虛擬機中的MySQL,確保你的虛擬機已經安裝Docker,且網絡開通的情況下,執行下面命令即可安裝MySQL(注意:若服務器上已經有mysql 占用了3306端口,可修改綁定服務器3307端口,如下)

docker run -d \--name mysql \-p 3307:3306 \          # 將主機端口從3306改為3307-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

運行完后,可以通過navicat 正常訪問 

如果想要集群部署,只需修改`宿主機端口映射`和`容器名稱`保證不同即可,因為容器之間環境是相互隔離的,所以都是3306不用變

# 如果想要集群部署只需修改docker容器內部的端口號和容器名稱即可# 節點1
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql# 節點2
docker run -d \--name mysql2 \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql# 節點3
docker run -d \--name mysql3 \-p 3308:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

大家可以發現,當我們執行命令后,Docker做的第一件事情,是去自動搜索并下載了MySQL,然后會自動運行MySQL,我們完全不用插手,非常方便。而且,這種安裝方式完全不用考慮運行的操作系統環境問題,它不僅僅在CentOS系統是這樣,在Ubuntu系統、macOS系統、甚至是裝了WSL的Windows下,都可以使用這條命令來安裝MySQL。

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

2、鏡像和容器

當我們利用Docker安裝應用時,Docker會自動搜索并下載應用鏡像(image)。

  • 鏡像:不僅包含應用本身,還包含應用運行所需要的環境、配置、系統函數庫
  • 容器:Docker會在運行鏡像時創建一個隔離環境,稱為容器(container)。
  • 鏡像倉庫:存儲和管理鏡像的平臺,Docker官方維護了一個公共倉庫:Docker Hub(目前國內已停止訪問)。

 3、命令解讀

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

解讀:

  • docker run -d:創建并運行一個容器,-d則是讓容器以后臺進程運行
  • --name mysql: 給容器起個名字叫mysql,你可以叫別的,要唯一
  • -p 3307:3306: 設置端口映射。格式: -p 宿主機端口:容器內端口,示例中將宿主機的3307映射到容器內的3306端口
  • -e TZ=Asia/Shanghai:配置容器內進程運行時的一些參數,此處是設置時區,格式:-e KEY=VALUE,KEY和VALUE都由容器內進程決定
  • -e MYSQL_ROOT_PASSWORD=123:是設置MySQL默認密碼
  • mysql : 設置鏡像名稱,Docker會根據這個名字搜索并下載鏡像,格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解為鏡像名,TAG是版本號,在未指定TAG的情況下,默認拉取最新版本鏡像,也就是mysql:latest

容器是隔離環境,外界不可訪問。但是可以將`宿主機端口`映射`容器內到端口`,當訪問宿主機指定端口時,就是在訪問容器內的端口了。
容器內端口往往是由容器內的進程決定,例如MySQL進程默認端口是3306,因此容器內端口一定是3306;而宿主機端口則可以任意指定,一般與容器內保持一致,但是這里為了防止與之前外部安裝的MySQL的3306沖突,改為3307映射容器內的3306。

鏡像的名稱不是隨意的,而是要到DockerRegistry中尋找,鏡像運行時的配置也不是隨意的,要參考鏡像的幫助文檔。

4、Docker基礎

4.1、常見命令

Docker最常見的命令就是操作鏡像、容器的命令,詳見官方文檔: https://docs.docker.com/

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

補充:默認情況下,每次重啟虛擬機我們都需要手動啟動Docker和Docker中的容器。通過命令可以實現開機自啟

# Docker開機自啟
systemctl enable docker# Docker容器開機自啟
docker update --restart=always [容器名/容器id]

5、部署Nginx容器

需求:

  • 在DockerHub中搜索Nginx鏡像,查看鏡像的名稱
  • 拉取Nginx鏡像
  • 查看本地鏡像列表
  • 創建并運行Nginx容器
  • 查看容器
  • 停止容器
  • 再次啟動容器
  • 進入Nginx容器
  • 刪除容器
# 第1步,查看nginx鏡像倉庫及相關信息
docker search 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}}"# 查看容器日志:docker logs 容器名
docker logs nginx
# 持續或動態查看容器日志:docker logs -f 容器名
docker logs -f nginx# 第6步,訪問網頁,地址:http://虛擬機IP地址:80# 第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步,進入容器,-it指的是可輸入終端,查看容器內目錄,輸入exit 退出容器
docker exec -it nginx bash
# 或者,可以進入容器的同時跟上執行的命令,之間一步進入容器內的MySQL
docker exec -it mysql mysql -uroot -p# 將鏡像打包下載到本地,.tar.gz是打壓縮包
docker save -o nginx.tar nginx:latest# 第13步,刪除容器
docker rm nginx
# 發現無法刪除,因為容器運行中,強制刪除容器
docker rm -f nginx
# 刪除鏡像
docker rmi nginx:latest# 將打包好的鏡像加載到本地,不用再去docker pull 對應鏡像了
docker load -i nginx.tar# 查看nginx鏡像
docker images# 創建并允許Nginx容器
docker run -d --name nginx -p 80:80 nginx

 可通過下面命令進行格式化信息:

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

http://192.168.56.10/,通過這個地址可以訪問nginx

 5.1、數據別名

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

# 修改/root/.bashrc文件
vim /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

# 修改/root/.bashrc文件 后,執行下面命令,使其生效
source ~/.bashrc

6、數據卷掛載

容器是隔離環境,容器內程序的文件、配置、運行時產生的容器都在容器內部,我們要讀寫容器內的文件非常不方便。大家思考幾個問題:

  • 如果要升級MySQL版本,需要銷毀舊容器,那么數據豈不是跟著被銷毀了?
  • MySQL、Nginx容器運行后,如果我要修改其中的某些配置該怎么辦?
  • 我想要讓Nginx代理我的靜態資源怎么辦?

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

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

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

相關文章

@DeclareParents 注解實現接口功能增強:Spring中通過接口引入實現功能增強的完整示例

以下是Spring中通過接口引入實現功能增強的完整示例: // 1. 目標接口及實現類 package com.example;public interface Service {void doSomething(); }Component class ServiceImp implements Service {Overridepublic void doSomething() {System.out.println(&qu…

HTML中數字和字母不換行顯示

HTML中數字和字母不換行顯示的默認行為及如何通過CSS的word-wrap和word-break屬性進行調整。 在HTML中標簽中的數字和字母默認是不換行的,如果要將他們換行,在CSS中添加”word-wrap: break-word;” 即可解決 語法:word-wrap: normal|break-w…

Git團隊開發命令總結

簡易Git工作流 myname: 團隊成員個人分支dev: 團隊公共分支 個人獨立分支開發 同步最新的【dev公共分支】到本地。【重要】基于最新的【dev公共分支】,創建【個人功能開發分支】。在此基礎上開發。【個人功能開發分支】開發完成,推送到遠程庫。如果【…

Python人工智能大模型入門教程:從零構建高性能預測模型

引言:AI大模型時代的技術革命 在AlphaGo戰勝人類棋手的里程碑事件后,人工智能技術進入爆發式發展階段。本教程將帶您從零開始,使用Python構建一個工業級神經網絡模型。通過本教程,您不僅能掌握GPU加速訓練、混合精度計算等前沿技…

python-leetcode 61.N皇后

題目: 按照國際象棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。 n 皇后問題 研究的是如何將 n 個皇后放置在 nn 的棋盤上,并且使皇后彼此之間不能相互攻擊 給你一個整數 n ,返回所有不同的 n 皇后問題 的解…

Mybatis_Plus中的常用注解

目錄 1、TableName TableId TableId的type屬性 TableField 1、TableName 經過以上的測試,在使用MyBatis-Plus實現基本的CRUD時,我們并沒有指定要操作的表,只是在 Mapper接口繼承BaseMapper時,設置了泛型User,而操…

JavaScript函數知識點總結

JavaScript函數是一種可重復使用的代碼塊,它接受輸入值(參數)、執行特定任務,并返回輸出值。 1. 聲明函數 function greet(name) {return "Hello, " + name + "!"; }console.log(greet("Alice")); // 輸出: Hello, Alice! console.log( t…

分布式計算Ray框架面試題及參考答案

目錄 簡述 Ray 的架構設計核心組件及其協作流程 全局控制存儲(GCS)在 Ray 中的作用是什么?如何實現高可用性? 對比 Ray 的任務(Task)與 Actor 模型,說明各自適用場景 解釋 Ray 的 Object Store 如何實現跨節點數據共享與零拷貝傳輸 Ray 的分布式調度器如何實現毫秒級…

GitHub熱門RAG框架:讓大語言模型更智慧

檢索增強生成(RAG):提升大型語言模型能力的全新思路 隨著人工智能應用的不斷深入發展,如何讓大型語言模型(LLM)具備更強的上下文理解和實時響應能力成為了關鍵問題。檢索增強生成(Retrieval-Augmented Generation,RAG)正是在這一背景下應運而生的技術,它巧妙地結合了…

HTTP協議講解

概念: Hyper Text Transfer Protocol 超文本傳輸協議,規定了瀏覽器和服務器之間的數據傳輸規則 特點 基于TCP協議,面向連接,安全基于請求-響應模型的,一次請求對應一次響應無狀態的,對于事物沒有記憶能力…

全國節能宣傳周線上知識競賽

線上知識競賽|節能降碳知識知多少 引言 全國節能宣傳周舉辦的主題是“綠色低碳,節能先行”。國家節能中心會同相關單位共同打造了一款線上知識競賽小程序,學習節能知識,爭做節能達人。 1.小程序規則: 體力規則:每位…

【區塊鏈安全 | 第十八篇】類型之引用類型(二)

文章目錄 引用類型數組切片結構體 引用類型 數組切片 數組切片是對數組中連續部分的一個視圖。它的語法為 x[start:end],其中 start 和 end 是表達式,結果類型為 uint256(或者可以隱式轉換為 uint256)。切片的第一個元素是 x[st…

GitHub上免費學習工具的精選匯總

以下是GitHub上免費學習工具的精選匯總,涵蓋編程語言、開發框架、數據科學、面試準備等多個方向,結合工具的功能特點、社區活躍度及適用場景進行分類推薦: 一、編程語言與開發框架 Web Developer Roadmap 簡介:為開發者提供全棧學…

[leetcode]2685. 統計完全連通分量的數量

題目鏈接 題意 給定無向圖,求完全連通分量 連通分量就是一個連通塊的意思 完全連通分量:就是一個連通塊中 ,所有點之間都兩兩有邊相連 思路 一個完全聯通分量有n個點 那么應該有 C n 2 C_n^2 Cn2?條邊 并查集維護連通塊 檢查每個聯通分量…

使用LangChain Agents構建Gradio及Gradio Tools(3)——使用Langchain agents構建Gradio UI

使用LangChain Agents構建Gradio及Gradio Tools(3)——使用Langchain agents構建Gradio UI 本篇摘要16. 使用LangChain Agents構建Gradio及Gradio Tool16.3 使用Langchain agents構建Gradio UI16.3.1 創建代理16.3.2 創建Gradio UI16.3.3 運行demo參考文獻本章目錄如下: 《使…

項目實戰 - 用戶列表

用戶列表想要實現這樣的效果: 渲染數據: import React,{useState,useEffect} from react; import { Button,Table, Tag,Modal,Popover, Switch } from antd; import { EditOutlined,DeleteOutlined,ExclamationCircleOutlined } from ant-design/icons…

吾愛破解安卓逆向學習筆記(4p)

學習目標,了解安卓四大組件,activity生命周期,同時了解去除部分廣告和更新提示。 廣告類型 1.啟動頁廣告 2.更新廣告 3.橫幅廣告 安卓四大組件 組件描述Activity(活動)在應用中的一個Activity可以用來表示一個界面,意思可以…

【目標檢測】【深度學習】【Pytorch版本】YOLOV1模型算法詳解

【目標檢測】【深度學習】【Pytorch版本】YOLOV1模型算法詳解 文章目錄 【目標檢測】【深度學習】【Pytorch版本】YOLOV1模型算法詳解前言YOLOV1的模型結構YOLOV1模型的基本執行流程YOLOV1模型的網絡參數YOLOV1模型的訓練方式 YOLOV1的核心思想前向傳播階段網格單元(grid cell)…

Vue項目中Vuex在util引入,斷點存在default

示例代碼 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 導入默認導出的 store export async function getDict() {store.state.userInf…

FALL靶機滲透實戰:從信息收集到特權升級的完整鏈分析

1.下載靶機,并在虛擬機中打開 2.用kali來確定該靶機的IP kali的IP:192.168.139.152 arp-scan -l 3.掃描端口 nmap -O 192.168.139.172 4.掃目錄 gobuster dir -u http://192.168.139.172 -x php,txt,html -w /usr/share/dirbuster/wordlists/directo…