主頁 > 軟體設計 > 簡單使用Docker

簡單使用Docker

2021-10-16 08:33:11 軟體設計

1.Docker

  • CE 即社區版(免費,支持周期 7 個月)
  • EE 即企業版,強調安全,付費使用,支持周期 24 個月

2.centos安裝Docker

注意: CentOS 7 滿足最低內核的要求,所以我們在CentOS 7安裝Docker,

  1. 卸載(可選)
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce
  1. 安裝
    安裝yum工具
yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

更新本地鏡像源

# 設定docker鏡像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

最后,開始安裝

yum install -y docker-ce

通過命令啟動docker

systemctl start docker  # 啟動docker服務

systemctl stop docker  # 停止docker服務

systemctl restart docker  # 重啟docker服務
  1. 注意打開埠,我直接把我的全部打開了
  2. 查看docker版本:docker -v

3.docker的指令

  1. 拉取鏡像:docker pull xxx(參考:DockerHub)
    在這里插入圖片描述

  2. 查看拉取到的鏡像:docker images

  3. 使用docker save匯出鏡像到磁盤 docker save -o [保存的目標檔案名稱] [鏡像名稱] 例子:docker save -o nginx.tar nginx:latest
    在這里插入圖片描述

  4. 洗掉本地的xxx鏡像:docker rmi xxx:xxx 例子:docker rmi nginx:latest

  5. 加載本地檔案:docker load -i xxx.tar 例子:docker load -i nginx.tar
    小練習
    在這里插入圖片描述

4.創建并運行容器命令

在這里插入圖片描述

  1. 創建并運行xxx容器的命令:
docker run --name containerName -p 80:80 -d xxx:xxx(比如nginx:latest)

命令解讀:

  • docker run :創建并運行一個容器
  • –name : 給容器起一個名字,比如叫做mn
  • -p :將宿主機埠與容器埠映射,冒號左側是宿主機埠,右側是容器埠
  • -d:后臺運行容器
  • xxx:鏡像名稱,例如nginx
查看正在運行中的容器:docker ps
查看所有容器,包括暫停的:docker ps -a

在這里插入圖片描述
需求:進入Nginx容器,修改HTML檔案內容,添加“傳智教育歡迎您”

提示:進入容器要用到docker exec命令,

步驟

1)進入容器,進入我們剛剛創建的nginx容器的命令為:

docker exec -it mn bash

命令解讀:

  • docker exec :進入容器內部,執行一個命令

  • -it : 給當前進入的容器創建一個標準輸入、輸出終端,允許我們與容器互動

  • mn :要進入的容器的名稱

  • bash:進入容器后執行的命令,bash是一個linux終端互動命令(容器內沒有vi命令)

cd /usr/share/nginx/html
sed -i -e 's#Welcome to nginx#隨風歡迎你#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
  • Ctrl+P+Q:退出容器

  • 查看容器日志的命令:

    • docker logs xxx(自己起的容器名)
    • 添加 -f 引數可以持續查看日志docker logs -f xxx(自己起的容器名)
    • Ctrl+C退出(-f的)

5.資料卷(容器資料管理)

  • 資料卷的作用:

    • 將容器與資料分離,解耦合,方便操作容器內資料,保證資料安全
  • 什么是資料卷

    • 資料卷volume是一個虛擬目錄,指向宿主機檔案系統中的某個目錄,
      在這里插入圖片描述
      這樣,對容器的一切操作都會在資料卷對應的宿主機目錄了,
  • 資料集操作命令
    資料卷操作的基本語法如下:

docker volume [COMMAND]
  • docker volume命令是資料卷操作,根據命令后跟隨的command來確定下一步的操作:

    • create 創建一個volume
    • inspect 顯示一個或多個volume的資訊
    • ls 列出所有的volume
    • prune 洗掉未使用的volume
    • rm 洗掉一個或多個指定的volume
  • 掛載資料卷
    我們在創建容器時,可以通過 -v 引數來掛載一個資料卷到某個容器內目錄

  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \
移除自己停用的容器:docker rm -f id(可以通過docker ps -a 進行查看)

案例-給nginx掛載資料卷

需求:創建一個nginx容器,修改容器內的html目錄內的index.html內容

分析:上個案例中,我們進入nginx容器內部,已經知道nginx的html目錄所在位置/usr/share/nginx/html ,我們需要把這個目錄掛載到html這個資料卷上,方便操作其中的內容,

提示:運行容器時使用 -v 引數掛載資料卷

步驟:

① 創建容器并掛載資料卷到容器內的HTML目錄

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 進入html資料卷所在位置,并修改HTML內容

# 查看html資料卷的位置
docker volume inspect html
# 進入該目錄
cd /var/lib/docker/volumes/html/_data
# 修改檔案
vi index.html
  • 給MySQL掛載本地目錄
docker run \
    --name mysql \
    -e MYSQL_ROOT_PASSWORD=922815 \
    -p 3306:3306 \
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
    -v /tmp/mysql/data:/var/lib/mysql \
    -d \
    mysql:5.7.25

要是運行不起來可以嘗試洗掉之前資料卷conf檔案夾里面的東西

5.Dockerfile自定義鏡像

  • 鏡像結構
    在這里插入圖片描述
  • Dockerfile語法

構建自定義的鏡像時,并不需要一個個檔案去拷貝,打包,

我們只需要告訴Docker,我們的鏡像的組成,需要哪些BaseImage、需要拷貝什么檔案、需要安裝什么依賴、啟動腳本是什么,將來Docker會幫助我們構建鏡像,
Dockerfile就是一個文本檔案,其中包含一個個的指令(Instruction),用指令來說明要執行什么操作來構建鏡像,每一個指令都會形成一層Layer,
在這里插入圖片描述

  • 構建java專案
    1. 新建檔案夾demo
    2. 拷貝jar包到demo里面
    3. 放jdk8.tar.gz到demo里面
    4. 將Dockerfile放到demo里面
# 指定基礎鏡像
FROM ubuntu:16.04
# 配置環境變數,JDK的安裝目錄
ENV JAVA_DIR=/usr/local

# 拷貝jdk和java專案的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安裝JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置環境變數
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露埠
EXPOSE 8090
# 入口,java專案的啟動命令
ENTRYPOINT java -jar /tmp/app.jar
  1. 將demo放到我們的centos系統里面
  2. 運行:docker build -t javaweb:1.0

基于java8構建Java專案(重要)

雖然我們可以基于Ubuntu基礎鏡像,添加任意自己需要的安裝包,構建鏡像,但是卻比較麻煩,所以大多數情況下,我們都可以在一些安裝了部分軟體的基礎鏡像上做改造,

例如,構建java專案的鏡像,可以在已經準備了JDK的基礎鏡像基礎上構建,

需求:基于java:8-alpine鏡像,將一個Java專案構建為鏡像

實作思路如下:

  • ① 新建一個空的目錄,然后在目錄中新建一個檔案,命名為Dockerfile

  • ② 拷貝課前資料提供的docker-demo.jar到這個目錄中

  • ③ 撰寫Dockerfile檔案:

    • a )基于java:8-alpine作為基礎鏡像

    • b )將app.jar拷貝到鏡像中

    • c )暴露埠

    • d )撰寫入口ENTRYPOINT

      內容如下:

      FROM java:8-alpine
      COPY ./app.jar /tmp/app.jar
      EXPOSE 8090
      ENTRYPOINT java -jar /tmp/app.jar
      
  • ④ 使用docker build命令構建鏡像

  • ⑤ 使用docker run創建容器并運行

隨風

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317856.html

標籤:其他

上一篇:使用密碼學解碼后,Python從字串中獲取變數

下一篇:TongWeb之vue打包部署

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more