主頁 >  其他 > Docker基本用法

Docker基本用法

2021-05-03 09:55:30 其他

docker

docker

  • 一、docker安裝
  • 二、docker 啟動和停止
  • 三、docker 基本使用
  • 四、docker應用
    • 一、通過 tomcat 部署 war 包
  • 五、docker 自定義鏡像
    • 一、簡單定制 nginx 鏡像
    • 二、通過 nginx 鏡像介紹各個指令的使用

一、docker安裝

1、在 CentOS 7安裝docker要求系統為64位、系統內核版本為 3.10 以上,可以使用以下命令查看

cat /etc/redhat-release #查看本版和系統的位數
uname -r

在這里插入圖片描述在這里插入圖片描述
2、安裝docker

yum [-y] install docker # -y 如果使用yum install xxxx,會找到安裝包之后,詢問你Is this OK[y/d/N],需要你手動進行選擇,但是如果加上引數-y,就會自動選擇y,不需要你再手動選擇

安裝報錯

在這里插入圖片描述

我導致出現這個錯誤的原因是我使用的是公司網路,應該是公司網路有什么限制所有報錯了,我切換到手機熱點就沒問題了,

# 擴展
# service network restart #重啟網網關
# cd /etc/sysconfig/network-scripts/ifcfg-ens33

3、重新執行第 2 步

4、添加 Docker 鏡像加速

國內從 DockerHub 拉取鏡像有時由于網路問題會出現下載太慢的情形,這是我們可以給 docker 配置鏡像加速器,例如:

  • Docker官方提供的中國鏡像庫:https://registry.docker-cn.com
  • 七牛云加速器:https://reg-mirror.qiniu.com

在 /etc/docker/daemon.json 中寫入如下內容,如果檔案不存在就新建該檔案

{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}

載入組態檔并重啟服務

# 載入配置
sudo systemctl daemon-reload
# 重啟 docker
sudo systemctl restart docker

查看 docker 資訊,檢查加速器是否生效

docker info

輸出

[root@bogon sysconfig]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: 66aedde759f33c190954815fb765eedc1d782dd9 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
Kernel Version: 3.10.0-1127.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 1
Total Memory: 972.3 MiB
Name: bogon
ID: NJC4:KRVS:JDHK:Q27Q:L5FL:Y7P5:MLCM:FISW:IVWH:5AWB:OTFE:3GJT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://reg-mirror.qiniu.com/	# 出現這條說明配置的加速鏡像生效了
Live Restore Enabled: false
Registries: docker.io (secure)

二、docker 啟動和停止

  1. 查看版本

    docker -v
    
  2. docker 啟動

    systemctl start docker
    
  3. 查看是否啟動成功

    ps -ef | grep docker
    
  4. docker 停止

    systemctl stop docker
    
  5. docker 重啟

    systemctl restart docker
    
  6. 查看 docker 資訊

    docker info
    

三、docker 基本使用

  1. 查看本地的鏡像

    docker images [OPTIONS] [REPOSITORY[:TAG]]
    # OPTIONS說明:
    # -a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
    # --digests :顯示鏡像的摘要資訊;
    # -f :顯示滿足條件的鏡像;
    # --format :指定回傳值的模板檔案;
    # --no-trunc :顯示完整的鏡像資訊;
    # -q :只顯示鏡像ID,
    docker image ls [OPTIONS] [REPOSITORY[:TAG]]
    
  2. 在從倉庫拉取鏡像前,現在 docker 倉庫中搜索想要安裝的軟體包

    docker search tomcat  
    

    在這里插入圖片描述

  3. 通過上一步查出來的 name 拉取鏡像

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    # OPTIONS說明:
    # -a :拉取所有 tagged 鏡像
    # --disable-content-trust :忽略鏡像的校驗,默認開啟
    
    docker pull docker.io/tomcat
    

    查看拉取的鏡像
    在這里插入圖片描述

  4. 洗掉本地鏡像

    docker rmi docker.io/tomcat
    
  5. 將本地鏡像匯出

    docker save -o 匯出路徑 鏡像ID 
    # -o :輸出到的檔案
    docker save -o /home/tomcat.tar c0e850d7b9bb
    # 或者
    docker save > /home/tomcat.tar c0e850d7b9bb
    

    在這里插入圖片描述

    下文參考:https://www.cnblogs.com/zhuochong/p/10064350.html

    docker save和docker export的區別

    • 對于Docker Save方法,會保存該鏡像的所有歷史記錄
    • 對于Docker Export 方法,不會保留歷史記錄,即沒有commit歷史
    • docker save保存的是鏡像(image),docker export保存的是容器(container);
    • docker load用來載入鏡像包,docker import用來載入容器包,但兩者都會恢復為鏡像;
    • docker load不能對載入的鏡像重命名,而docker import可以為鏡像指定新名稱,
  6. 匯入使用 docker save 命令匯出的鏡像,

    docker load -i /home/tomcat.tar
    # docker load < /home/tomcat.tar
    

    其中-i和<表示從檔案輸入,會成功匯入鏡像及相關元資料,包括tag資訊

  7. 修改鏡像名稱

    # docker tag 鏡像ID 新的鏡像名稱
    docker tag c0e850d7b9bb yourarepigs
    

    在這里插入圖片描述

  8. 運行容器

    docker run 鏡像的標識|鏡像名稱[tag]
    docker run -d -p  宿主機埠:容器埠 --name 容器名稱 鏡像的標識|鏡像名稱[tag]
    # -d: 代表后臺運行容器
    # -p: 宿主機埠:容器埠: 為了映射當前Linux的埠和容器的埠
    # --name 容器名稱: 指定容器的名稱
    # docker run 命令的 -i -t -d選項的作用:https://blog.csdn.net/claram/article/details/104228727
    
     docker run -d -p 8080:8080 --name myTomcat docker.io/tomcat tail -f /dev/null 
    
  9. 查看正在運行的容器

    docker ps [OPTIONS]
    # OPTIONS說明:
    # -a: 代表查看全部的容器,包括沒有運行
    # -q: 只查看容器的標識
    # -f: 根據條件過濾顯示的內容
    # --format: 指定回傳值的模板檔案
    # -l: 顯示最近創建的容器
    # -n: 列出最近創建的n個容器
    # --no-trunc: 不截斷輸出
    # -s: 顯示總的檔案大小
    
  10. 查看容器日志

    # docker logs -f 容器ID
    # -f: 可以滾動查看日志的最后幾行
    docker logs -f myTomcat
    
  11. 進入容器內部執行命令

    1. 執行單條命令

    通過 docker ps 獲取 CONTAINER ID

    # docker exec -it `CONTAINER ID` ls
    docker exec -it f01e64b6a710 ls
    

    在這里插入圖片描述

    1. 進入容器終端并且保留容器終端的輸入形式
    # docker exec -it 容器id bash
    docker exec -it f01 bash # CONTAINER ID 不用輸全,只要能唯一標識某個容器就可以
    # 或者
    # docker exec -it f01 /bin/bash
    

    在這里插入圖片描述
    3. 使用 exit 或者按鍵 Ctrl + C 退出 container

  12. 洗掉容器

    1. 洗掉容器需要先停止容器

      # docker stop 容器ID
      docker stop f01e64b6a710
      # 停止全部的容器
      # docker stop $(docker ps -qa)
      

      在這里插入圖片描述

    2. 洗掉容器

      # docker rm 容器ID
      docker rm f01e64b6a710
      # 洗掉全部的容器
      # docker rm $(docker ps -qa)
      

      在這里插入圖片描述

  13. 啟動容器

    docker start f01e64b6a710
    

四、docker應用

一、通過 tomcat 部署 war 包

  1. 準備 tomcat 容器

    # 進入容器內部bash
    docker exec -it f01 /bin/bash
    # 獲取 tomcat/webapps 路徑
    # /usr/local/tomcat/webapps
    

    在這里插入圖片描述

  2. 通過命令將 war 包匯入 docker 下的 tomcat 中

    1. 上傳 war 存盤到 /home 路徑下,openapi-web-master.war
      在這里插入圖片描述

    2. 將 war 匯入 docker 下的 tomcat 中

      # 通過命令將宿主機的內容復制到容器內部
      # docker cp 檔案名稱 容器id:容器內部路徑
      docker cp /home/openapi-web-master.war f01e64b6a710:/usr/local/tomcat/webapps
      

      在這里插入圖片描述

    3. 通過瀏覽器訪問專案

      http://IP:PORT/openapi-web-master/
      
    4. 資料卷

      將宿主機的一個目錄映射到容器的一個目錄中,可以在宿主機中操作目錄中的內容,那么容器內部映射的檔案,也會跟著一起改變,

      1. 創建資料卷

        # docker volume create 資料卷名稱
        # 創建資料卷之后默認會存放在一個目錄下 /var/lib/docker/volumes/資料卷名稱/_data
        docker volume create customVolume
        # 創建資料卷的默認路徑
        # /var/lib/docker/volumes/customVolume/_data
        
      2. 查看資料卷的詳細資訊

        # docker volume inspect 資料卷名稱
        docker volume inspect customVolume
        

        在這里插入圖片描述

      3. 查看全部資料卷

        docker volume ls
        

        在這里插入圖片描述

      4. 洗掉資料卷

         docker volume rm 資料卷名稱
        
      5. 應用資料卷

        # 當你映射資料卷時,如果資料卷不存在,Docker會幫你自動創建
        # docker run -v 資料卷名稱:容器內部路徑 鏡像id
        # 直接指定一個路徑作為資料卷的存放位置,這個路徑下是空的,
        # docker run -v 路徑:容器內部的路徑 鏡像id
        docker run -d -p 8080:8080 -v customVolume:/usr/local/tomcat tomcat
        

        在這里插入圖片描述

    五、docker 自定義鏡像

    參考鏈接:https://www.runoob.com/docker/docker-dockerfile.html

    一、簡單定制 nginx 鏡像

    1. 創建一個Dockerfile檔案,并且指定自定義鏡像資訊,

      cd /home
      touch Dockerfile
      vi Dockerfile
      

      在其中加入

      FROM nginx
      RUN echo '這是一個本地構建的nginx鏡像' > /usr/share/nginx/html/index.html
      

      FROM 和 RUN 指令的作用

      • FROM:定制的鏡像都是基于 FROM 的鏡像,這里的 nginx 就是定制需要的基礎鏡像,后續的操作都是基于 nginx,如果沒有指定 taglatest 將會被指定為要使用的基礎鏡像版本,
      • RUN:用于執行后面跟著的命令列命令,有以下倆種格式:

      shell 格式:

      RUN <命令列命令>
      # <命令列命令> 等同于,在終端操作的 shell 命令,
      

      exec 格式:

      RUN ["可執行檔案", "引數1", "引數2"]
      # 例如:
      # RUN ["./test.php", "dev", "offline"] 等價于 RUN ./test.php dev offline
      

      注意:Dockerfile 的指令每執行一次都會在 docker 上新建一層,所以過多無意義的層,會造成鏡像膨脹過大,例如:

      FROM centos
      RUN yum install wget
      RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
      RUN tar -xvf redis.tar.gz
      以上執行會創建 3 層鏡像,可簡化為以下格式:
      FROM centos
      RUN yum install wget \
          && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
          && tar -xvf redis.tar.gz
      

      如上,以 && 符號連接命令,這樣執行后,只會創建 1 層鏡像,

    2. 構建鏡像

      在 Dockerfile 檔案的存放目錄下,執行構建動作,

      以下示例,通過目錄下的 Dockerfile 構建一個 nginx:v3(鏡像名稱:鏡像標簽),

      :最后的 . 代表本次執行的背景關系路徑,下一節會介紹,

      docker build -t nginx:v3 .
      

      在這里插入圖片描述

    3. 背景關系路徑

      上一節中,有提到指令最后一個 . 是背景關系路徑,那么什么是背景關系路徑呢?

      docker build -t nginx:v3 .
      

      背景關系路徑,是指 docker 在構建鏡像,有時候想要使用到本機的檔案(比如復制),docker build 命令得知這個路徑后,會將路徑下的所有內容打包,

      決議:由于 docker 的運行模式是 C/S,我們本機是 C,docker 引擎是 S,實際的構建程序是在 docker 引擎下完成的,所以這個時候無法用到我們本機的檔案,這就需要把我們本機的指定目錄下的檔案一起打包提供給 docker 引擎使用,

      如果未說明最后一個引數,那么默認背景關系路徑就是 Dockerfile 所在的位置,

      注意:背景關系路徑下不要放無用的檔案,因為會一起打包發送給 docker 引擎,如果檔案過多會造成程序緩慢,

    二、通過 nginx 鏡像介紹各個指令的使用

    1. FROM:指定新鏡像所基于的鏡像,第一條指令必須為FROM指令,每創建一個鏡像就需要一條FROM指令,

      執行步驟:

      • FORM 命令會判斷本地的 docker 倉庫中是否存在我們所指定的鏡像名稱和版本
        • 如果找到我們所指定的鏡像名稱,則直接使用,
        • 如果本地本有找到,會通過網路將鏡像先下載到本地的鏡像倉庫中
          • 然后再從本地鏡像倉庫中進行讀取
      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      
    2. COPY:復制指令,從背景關系目錄中復制檔案或者目錄到容器里指定路徑

      1. 除了指定完整的檔案名外,COPY 命令還支持 Go 風格的通配符,比如:

        COPY check* /testdir/           # 拷貝所有 check 開頭的檔案
        COPY check?.log /testdir/       # ? 是單個字符的占位符,比如匹配檔案 check1.log
        
      2. 修改檔案

        # FROM (<image>:<tag>]|NAMEID)
        FROM docker.io/nginx:latest
        # 從背景關系中將 war 包復制到容器中去
        COPY openapi-web-master.war /usr/share/nginx/html/
        
    3. ADD: 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY),功能也類似,不同之處如下:

      • ADD 的優點:在執行 <源檔案> 為 tar 壓縮檔案的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動復制并解壓到 <目標路徑>,
      • ADD 的缺點:在不解壓的前提下,無法復制 tar 壓縮檔案,會令鏡像構建快取失效,從而可能會令鏡像構建變得比較緩慢,具體是否使用,可以根據是否需要自動解壓來決定,
    4. CMD:類似于 RUN 指令,用于運行程式,但二者運行的時間點不同:

      • CMD 在docker run 時運行,

      • RUN 是在 docker build

        注意:不要再Dockerfiles中多次定義CMD,不然,只會有最后一次定義的值會生效,

      1. 運行一個可執行檔案

        CMD ["/usr/share/nginx/html/testShell.sh", "this is a echo test"]
        

        修改檔案

        # FROM (<image>:<tag>]|NAMEID)
        FROM docker.io/nginx:latest
        # 從背景關系中將 war 包復制到容器中去
        COPY openapi-web-master.war usr/share/nginx/html/
        # 運行一個可執行檔案并提供引數
        # 將檔案拷貝到容器中
        COPY testShell.sh /usr/share/nginx/html/
        CMD ["/usr/share/nginx/html/testShell.sh", "this is a echo test"]
        

        輸出:

        [root@bogon Dockerfile2]# docker build -t mynginx:v1 .
        Sending build context to Docker daemon 18.09 MB
        Step 1/4 : FROM docker.io/nginx:latest
         ---> 62d49f9bab67
        Step 2/4 : COPY openapi-web-master.war /usr/share/nginx/html/
         ---> Using cache
         ---> c12a20753c50
        Step 3/4 : COPY testShell.sh /usr/share/nginx/html/
         ---> fe2c978c7791
        Removing intermediate container 471920622c45
        Step 4/4 : CMD bash -c /usr/share/nginx/html/testShell.sh this is a testShell file
         ---> Running in 867524fcec47
         ---> 029ab1561a8a
        Removing intermediate container 867524fcec47
        Successfully built 029ab1561a8a
        [root@bogon Dockerfile2]# docker run mynginx:v1
        進入測驗腳本testShell
        輸入內容為: this
        [root@bogon Dockerfile2]# 
        

        在這里插入圖片描述

      2. 為ENTRYPOINT指定引數

        修改檔案

        # FROM (<image>:<tag>]|NAMEID)
        FROM docker.io/nginx:latest
        # 從背景關系中將 war 包復制到容器中去
        COPY openapi-web-master.war /usr/share/nginx/html/
        # 運行一個可執行檔案
        # 將檔案拷貝到容器中
        COPY testShell.sh /usr/share/nginx/html/
        ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
        CMD ["this is a 為ENTRYPOINT指定引數 file"]
        

        在這里插入圖片描述

        錯誤的寫法:

        # 為ENTRYPOINT指定引數
        ENTRYPOINT ["bash","-c","/usr/share/nginx/html/testShell.sh"]
        CMD ["this is a 為ENTRYPOINT指定引數 file"]
        

        面這個方式將不會把 CMD 中的值作為 ENTRYPOINT 的引數,所以改為一下方式

        # 為ENTRYPOINT指定引數
        ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
        CMD ["this is a 為ENTRYPOINT指定引數 file"]
        
      3. 是以 /bin/bash -c 的方法執行的命令,

        # FROM (<image>:<tag>]|NAMEID)
        FROM docker.io/nginx:latest
        # 從背景關系中將 war 包復制到容器中去
        COPY openapi-web-master.war usr/share/nginx/html/
        # 運行一個可執行檔案并提供引數
        # 將檔案拷貝到容器中
        COPY testShell.sh /usr/share/nginx/html/
        CMD ["bash","-c","/usr/share/nginx/html/testShell.sh this is a testShell file"]
        
    5. ENTRYPOINT

      指令用于設定容器啟動時第一個運行的命令及其引數,

      任何使用docker run <image>命令傳入的引數都會附加在entrypoint指令之后,并且用此命令傳入的引數會覆寫在Dockerfile中使用CMD指令設定的值,比如docker run <image> bash命令會將bash命令附加在entrypoint指令設定的值的后面,

      但是, 如果運行 docker run 時使用了 --entrypoint 選項,將覆寫 CMD 指令指定的程式,

      優點:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的引數,

      注意:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最后一個生效,

      修改檔案

      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      # 從背景關系中將 war 包復制到容器中去
      COPY openapi-web-master.war /usr/share/nginx/html/
      # 運行一個可執行檔案
      # 將檔案拷貝到容器中
      COPY testShell.sh /usr/share/nginx/html/
      ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
      CMD ["this is a 為ENTRYPOINT指定引數 file"]
      
      1. 不傳參

        docker run mynginx:v1
        

        在這里插入圖片描述

      2. 傳參

        docker run mynginx:v1 "我是豬"
        

        在這里插入圖片描述

    6. ENV

      設定環境變數,定義了環境變數,那么在后續的指令中,就可以使用這個環境變數,

      格式:

      ENV <key> <value>
      ENV <key1>=<value1> <key2>=<value2>...
      

      啟動容器后,在容器實體中,可以通過env命令查看環境變數

      env
      

      注意:在Dockerfile檔案中自定義的 ENV 是不會在這里面顯示出來的,

      在這里插入圖片描述

      [root@bogon Dockerfile2]# docker exec -it 3cb bash
      root@3cb2db6e3b8a:/# env
      HOSTNAME=3cb2db6e3b8a
      PWD=/
      PKG_RELEASE=1~buster
      HOME=/root
      NJS_VERSION=0.5.3
      TERM=xterm
      SHLVL=1
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      NGINX_VERSION=1.19.10
      _=/usr/bin/env
      root@3cb2db6e3b8a:/# 
      

      修改檔案

      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      # 從背景關系中將 war 包復制到容器中去
      COPY openapi-web-master.war /usr/share/nginx/html/
      # 運行一個可執行檔案
      # 將檔案拷貝到容器中
      COPY testShell.sh /usr/share/nginx/html/
      ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
      CMD ["this is a 為ENTRYPOINT指定引數 file"]
      # 定義了環境變數
      ENV name1=/bin/echo name2="一朵小紅花"
      # 不能寫成 CMD[$name1],這樣寫不正確
      CMD $name1 $name2
      

      在這里插入圖片描述

      通過 ENV 查看環境變數

      [root@bogon Dockerfile2]# docker run mynginx:v1
      一朵小紅花
      [root@bogon Dockerfile2]# docker exec -it 3cb bash
      root@3cb2db6e3b8a:/# env
      HOSTNAME=3cb2db6e3b8a
      PWD=/
      PKG_RELEASE=1~buster
      HOME=/root
      NJS_VERSION=0.5.3
      TERM=xterm
      SHLVL=1
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      NGINX_VERSION=1.19.10
      _=/usr/bin/env
      root@3cb2db6e3b8a:/#
      root@3cb2db6e3b8a:/# env $PATH
      env: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin': No such file or directory
      root@3cb2db6e3b8a:/# env name1
      env: 'name1': No such file or directory
      root@3cb2db6e3b8a:/# env name2
      env: 'name2': No such file or directory
      root@3cb2db6e3b8a:/# 
      

      在這里插入圖片描述

    7. ARG (存在問題)

      構建引數,與 ENV 作用一至,不過作用域不一樣,ARG 設定的環境變數僅對 Dockerfile 內有效,也就是說只有 docker build 的程序中有效,構建好的鏡像內不存在此環境變數,

      構建命令 docker build 中可以用 --build-arg <引數名>=<值> 來覆寫,

      格式:

      ARG <引數名>[=<默認值>]
      

      為什我我用 ENV 定義的環境變數,進入容器后也看不見,也獲取不到呢?????

    8. VOLUME

      定義匿名資料卷,在啟動容器時忘記掛載資料卷,會自動掛載到匿名卷,

      作用:

      • 避免重要的資料,因容器重啟而丟失,這是非常致命的,
      • 避免容器不斷變大,

      格式:

      VOLUME ["<路徑1>", "<路徑2>"...]
      VOLUME <路徑>
      

      在啟動容器 docker run 的時候,我們可以通過 -v 引數修改掛載點,

      Dockerfile 中 VOLUME 和 -v 的區別參考:https://blog.csdn.net/fangford/article/details/88873104

      修改檔案

      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      # 從背景關系中將 war 包復制到容器中去
      COPY openapi-web-master.war /usr/share/nginx/html/
      # 運行一個可執行檔案
      # 將檔案拷貝到容器中
      COPY testShell.sh /usr/share/nginx/html/
      ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
      CMD ["this is a 為ENTRYPOINT指定引數 file"]
      # 定義了環境變數
      ENV name1=/bin/echo name2="一朵小紅花"
      # 不能寫成 CMD[$name1],這樣寫不正確
      CMD $name1 $name2
      # 定義匿名資料卷
      VOLUME /usr/share/nginx/html
      
      1. 運行容器前

        在這里插入圖片描述

      2. 運行容器后

        在這里插入圖片描述

      3. 停止容器后

        在這里插入圖片描述

      4. 每次重啟都會生成新的

        在這里插入圖片描述

    9. EXPOSE

      僅僅只是宣告埠,

      作用:

      • 幫助鏡像使用者理解這個鏡像服務的守護埠,以方便配置映射,
      • 在運行時使用隨機埠映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的埠,

      格式:

      EXPOSE <埠1> [<埠2>...]
      

      修改檔案

      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      # 從背景關系中將 war 包復制到容器中去
      COPY openapi-web-master.war /usr/share/nginx/html/
      # 運行一個可執行檔案
      # 將檔案拷貝到容器中
      COPY testShell.sh /usr/share/nginx/html/
      ENTRYPOINT ["/usr/share/nginx/html/testShell.sh"]
      CMD ["this is a 為ENTRYPOINT指定引數 file"]
      # 定義了環境變數
      ENV name1=/bin/echo name2="一朵小紅花"
      # 不能寫成 CMD[$name1],這樣寫不正確
      # CMD $name1 $name2
      # 定義匿名資料卷
      VOLUME /usr/share/nginx/html
      EXPOSE 80
      
    10. WORKDIR

      Dockerfile中的WORKDIR指令用于指定容器的一個目錄, 容器啟動時執行的命令會在該目錄下執行,

      格式:

      WORKDIR <作業目錄路徑>
      

      修改檔案

      # FROM (<image>:<tag>]|NAMEID)
      FROM docker.io/nginx:latest
      # 創建并指定作業目錄
      RUN mkdir -p /usr/share/nginx/html/workDir \
                      && echo "hello world" > /usr/share/nginx/html/workDir/test.txt
      WORKDIR /usr/share/nginx/html/workDir
      RUN pwd
      RUN ls -halt
      CMD ["more" ,"test.txt"]
      

      在這里插入圖片描述

    11. USER

      參考:https://www.cntofu.com/book/139/image/dockerfile/user.md

    12. HEALTHCHECK

      用于指定某個程式或者指令來監控 docker 容器服務的運行狀態,

      格式:

      HEALTHCHECK [選項] CMD <命令>:設定檢查容器健康狀況的命令
      HEALTHCHECK NONE:如果基礎鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指令
      
      HEALTHCHECK [選項] CMD <命令> : 這邊 CMD 后面跟隨的命令使用,可以參考 CMD 的用法,
      
    13. ONBUILD

      用于延遲構建命令的執行,簡單的說,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次構建鏡像的程序中不會執行(假設鏡像為 test-build),當有新的 Dockerfile 使用了之前構建的鏡像 FROM test-build ,這是執行新鏡像的 Dockerfile 構建時候,會執行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令,

      格式:

      ONBUILD <其它指令>
      

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

標籤:其他

上一篇:分布式系統監控Zabbix的介紹以及原始碼安裝

下一篇:解決騰訊云重置之后ssh連接失敗問題

標籤雲
其他(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)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more