docker 簡要學習

来源:https://www.cnblogs.com/casonol/archive/2019/04/15/10711638.html
-Advertisement-
Play Games

一、Docker的安裝和啟動 使用環境centos7 1. yum包更新到最新 2. 安裝需要的軟體包,yum util提供yum config manager功能 3. 設置yum源為阿裡雲 4. 安裝docker 5. 安裝查看docker版本 6. 設置 docker鏡象拉取提供者 7. 啟動 ...


一、Docker的安裝和啟動

使用環境centos7

  1. yum包更新到最新

    sudo yum update
  2. 安裝需要的軟體包,yum-util提供yum-config-manager功能

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 設置yum源為阿裡雲

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安裝docker

    sudo yum install docker-ce
  5. 安裝查看docker版本

    docker -v
  6. 設置 docker鏡象拉取提供者

    編輯文件:vi  /etc/docker/daemon.json
    在該文件中輸入:
       {
      "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
       }
  7. 啟動、重啟、停止、加入服務

      systemctl start docker  啟動
      systemctl status docker 查看狀態
      systemctl enable docker 開機自啟動
  8. 鏡像相關的命令

      查看鏡像
      docker images
      搜索
      docker search nginx
      拉取
      docker pull  nginx
      刪除 (有運行的容器不能刪除)
      docker rmi  鏡像ID
      刪除所有
      docker rmi `docker imgaes -q`

    二、容器相關的命令

  9. 查看運行中的容器

    docker ps
    docker ps -a 查看沒有運行和運行的
  10. 創建與啟動容器
    2.1 創建容器命令:

    docker run
    -i : 表示運行容器
    -t :表示容器啟動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個偽終端
    --name:為創建的容器命名
    -v : 表示目錄映射關係(前者是宿主機器目錄,後者是映射到宿主機上的目錄)可以使用多個 -v做多個目錄或文件映射
      註意:最好做目錄映射,在宿主機上做修改然後共用到容器上
    -d : 在run後面加上-d參數,則會創建一個守護式容器運行在後臺(這樣創建的容器不會自動登錄到容器)
    -p : 表示埠映射,前者是宿主機器埠。後者是容器內的映射埠,可以使用多個 -p 做多個埠映射

    2.2 互動式方式創建容器

    docker run -it --name=容器名稱 鏡像名稱:標簽 /bin/bash
    例:docker run -it --name=mycentos centos:7 /bin/bash
    退出當前容器 exit

    2.3 守護式方式創建容器

    docker run -id --name=容器名稱 鏡像名稱:標簽
    例如: docker run -id --name=mycentos2 centos:7
    進入容器
    docker exec -it 容器名稱  /bin/bash
    退出當前容器 exit
    例如:docker exec -it mycentos2 /bin/bash

    2.4 啟動容器與停止容器

    停止容器: docker stop 容器名稱(或者容器ID)
    啟動容器: docker start 容器名稱 (或者容器Id)

    2.5 文件拷貝( 如果我們需要將宿主機文件拷貝到容器裡面 )

    宿主機 ---> 容器
    docker  cp  需要拷貝的文件或目錄  容器名稱:容器目錄
    例:docker cp anaconda-ks.cfg mycentos2:/usr/local
    容器文件 ----> 宿主機器
    docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
    例:docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks.cfg

    2.6 目錄掛載(將宿主的目錄與容器內目錄進行映射,這樣我們就可以通過修改宿主機器某個目錄的文件去影響容器的文件)

    創建容器 添加-v參數 後邊為 宿主機器目錄:容器目錄,
    例: docker run -di --name=mycentos3 -v /home/myhtml:/home/myhtml centos:7
    如果許可權不足提示:
    因為centos7的安全模塊selinux把許可權禁止掉了。我們需要添加參數 -privileged=true來解決目錄沒有許可權的問題

    2.7 查看容器的IP

    查看容器信息:
    例:docker inspect  mycentos3
    查看容器的ip信息:(格式化提取)
    例:docker inspect --format="{{.NetworkSettings.IPAddress}}" mycentos3
    移除容器 (不能移除正在運行的)
    例:docker rm mycentos3

    三、docker應用部署

  11. mysql部署
    1.1 拉取mysql鏡像
    docker pull centos/mysql-57-centos7
    1.2 創建容器
    docker run -di --name=cason_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql centos/mysql-57-centos7 -p 代表埠映射,格式為 宿主機映射埠:容器運行埠 -e 代表添加環境變數, MYSQL_ROOT_PASSWORD 是root用戶的登陸密碼
    1.3 進入mysql容器
    docker exec -it cason_mysql /bin/bash
    1.4 登陸mysql
    mysql -u root -p
    1.5 遠程登陸mysql
    連接宿主機的IP,指定埠為33306
  12. tomcat部署
    2.1 拉取鏡像
    docker pull tomcat:7-jre7
    2.2 創建容器
    docker run -di --name=cason_tomcat -p 10001:8080 -v /home/local/webapps:/usr/local/tomcat/webapps tomcat:8-jre8
    • /home/local/webapps 代表宿主機目錄
    • /usr/local/tomcat/webapps 容器tomcat的部署目錄
  13. 部署nginx
    3.1 拉取鏡像 docker pull nginx
    3.2 創建鏡像 docker run -di --name=mynginx -p 80:80 nginx
  14. 部署redis
    4.1 拉取鏡像 docker pull redis
    4.2 創建鏡像 docker run -di --name=myredis -p 6379:6379 redis

四、docker遷移與備份

  1. 容器保存為鏡像
    docker commit cason_nginx caosn_nginx_1
  2. 鏡像備份(cason_nginx.tar文件導出在當前目錄)
    docker save -o cason_nginx.tar cason_nginx_2
  3. 鏡像回覆
    docker load -i cason_nginx.tar

六、Dockerfile

  1. 概念:Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於 基礎鏡像並最終創建一個新的鏡像
    1、對於開發人員:可以為開發團隊提供一個完全一致的開發環境
    2、對於測試人員:可以直接拿開發時構建的鏡像或通過Dockerfile構建一個新鏡像
    3、對於運維人員:在部署時,可以實現應用的無縫一致

  2. 常用命令:
    命令 作用
    FROM image_name:tag 定義了使用哪個基礎鏡像啟動構建流程
    MAINTAINER user_name 聲明鏡像的創建者
    ENV key value 設置環境變數(可以寫多條)
    RUN command 是Dockerrfile的核心部分(可以寫多條)
    ADD source_dir/file 將宿主機的文件複製到容器。如果是一個壓縮文件,將會複製到容器中自動解壓
    COPY source_dir/file 和ADD像是 。但如果有壓縮文件並不能解壓
    WORKDIR path_dir 設置工作目錄
  3. 使用腳本創建鏡像的
    例如構建一個jdk8的centos7鏡像:
    Dockerfile腳本如下:
    ```
    FROM centos:7
    MAINTAINER cason
    WORKDIR /usr
    RUN mkdir /usr/local/java
    ADD jdk-8u172-linux-x64.tar.gz /usr/local/java/

     ENV JAVA_HOME /usr/local/java/jdk1.8.0_172
     ENV JRE_HOME $JAVA_HOME/jre
     ENV CLASSPATH $JAVA_HOME/bin/dt.jar$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
     ENV PATH $JAVA_HOME/bin:$PATH

    ```
    同時在當前目錄添加 jdk-8u172-linux-x64.tar.gz 安裝包

  4. 腳本完成後執行構建: docker build -t='jdk1.8' .
    -t 代表指定構建後的docker的名稱
    . 點代表指定當前目錄

  5. docker 啟動 web 示例報錯如下:
    Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797 -j DNAT --to-destination 172.17.0.30:5000 ! -i docker0: iptables: No chain/target/match by that name.
    解決辦法:重建docker0網路恢復

    pkill docker  # 殺死docker進程
    iptables -t nat -F  # 清空規則鏈的(註意每個鏈的管理許可權)
    ifconfig docker0 down # 停止docker0的ip連接
    brctl delbr docker0 # 重新橋接docker0的網路
    docker -d      # 開啟Daemon模式。
    service docker restart # 重啟docker
    

    七、Docker私有庫

  6. 私有倉庫的搭建與配置
    1.1 拉取私有倉庫鏡像 docker pull registry
    1.2 創建私有倉庫容器 docker run -di --name=registry -p 5000:5000 registry
    1.3 創建成功後 在瀏覽器輸入:宿主機IP+5000埠 例如 http://192.168.110.141:5000/v2/_catalog
    查看到了 {"repositories":[]} 表示成功並且內容為空
    1.4 修改daemon.json
    vi /etc/docker/daemon.json 添加內容
    {"insecure-registries":["192.168.110.141:5000"]}
    1.5 重啟docker
    systemctl restart docker

  7. 鏡像上傳至私有倉庫
    2.1 標記鏡像為私有倉庫的鏡像
    docker tag jdk1.8 192.168.110.141:5000/jdk1.8
    2.2 上傳標記的鏡像 (要保證私庫的容器正在運行著)
    docker push 192.168.110.141:5000/jdk1.8

八、DockerMaven插件

Maven插件自動部署步驟:(配置:https://www.cnblogs.com/atliwen/p/6101946.html

  1. 修改宿主機器的docker的配置,讓其可以遠程訪問
    vi /lib/systemd/system/docker.service
    添加部分是:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    修改為:
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  2. 刷下docker配置

    systemctl daemon-reload
    systemctl restart docker
    docker start registry
  3. 在pom.xml文件添加 docker配置

     <build>
         <finalName>app</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
             <!-- docker的maven插件,官網 https://github.com/spotify/docker-maven-plugin  -->
             <plugin>
                 <groupId>com.spotify</groupId>
                 <artifactId>docker-maven-plugin</artifactId>
                 <version>0.4.13</version>
                 <configuration>
                     <imageName>192.168.110.141:5000/${project.artifactId}:${project.version}</imageName>
                     <!--<dockerDirectory>src/main/docker</dockerDirectory>-->
                     <baseImage>java:8</baseImage>
                     <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                     <resources>
                         <resource>
                             <targetPath>/</targetPath>
                             <directory>${project.build.directory}</directory>
                             <include>${project.build.finalName}.jar</include>
                         </resource>
                     </resources>
                     <dockerHost>http://192.168.110.141:2375</dockerHost>
                 </configuration>
             </plugin>
         </plugins>
     </build>
  4. 以上配置會自動生成Dockerfile

      FROM jdk1.8
      ADD aap.jar /
      ENTRYPOINT ["java","-jar","/app.jar"]
  5. 在windows的命令提示符下,進入當前工程的目錄 ,輸入以下命令 打包上傳鏡像
    命令:mvn clean package docker:build -DpushImage

        I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: Broken pipe
       導致這個錯誤的原因是 project.artifactId 可能包含了大寫
  6. 創建容器
    docker run -di --name=base -p 8088:8088 192.168.110.141:5000/springboot-demo:1.0.0-SNAPSHOT
    埠8088 因為springboot-demo項目的埠就是8088
  7. 直接瀏覽器輸入 http://192.168.110.141:8088/user/1 這就是訪問docker裡面的boot項目


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇文章以 ADO.NET 訪問SQL SERVER 資料庫為例, 其中需用System.Data.SqlClient; 資料庫連接字元串寫法為:server=數據源(伺服器名稱);uid=用戶名;pwd=密碼;database=資料庫名稱 ...
  • 原文鏈接:https://www.entityframeworktutorial.net/code-first/entity-framework-power-tools.aspx 大家好,這裡就是EF 6 Code-First 系列的最後一篇文章了。沒有辜負大家的期望,都更新完了,2015年很早的時 ...
  • 原文鏈接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 Code-First系列文章目錄: 1 翻譯系列:什麼是Code First(EF 6 Code F ...
  • 原文鏈接:https://www.entityframeworktutorial.net/entityframework6/custom-conventions-codefirst.aspx EF 6 Code-First系列文章目錄: 1 翻譯系列:什麼是Code First(EF 6 Code ...
  • 原文鏈接:https://www.entityframeworktutorial.net/code-first/cascade-delete-in-code-first.aspx EF 6 Code-First系列文章目錄: 1 翻譯系列:什麼是Code First(EF 6 Code First ...
  • Windows Server MySQL 遠程訪問 工作主要為兩部分, 一部分是 Windows 防火牆, 一部分是 MySQL 自身 Windows 埠遠程訪問 其實就是在 Windows 防火牆中加一條特定埠的入站規則 1. 控制面板→系統和安全→Windows防火牆 2. 點擊左側菜單中的 ...
  • 什麼是版本庫?什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裡面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原” 創建一個版本庫 添加文件到git倉庫 ...
  • 本篇文章作為Linux 入門的必備篇,主要簡述Linux系統目錄結構和Linux 基本Shell命令,大致內容如下: ​ ​ 一 Linux目錄及其概述 如下目錄為CentOS 7目錄結構 ​ 1.建立目錄 mkdir 該命令用來創建目錄。 (1)一次性創建一個目錄 mkdir mydir ​ (2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...