日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker privileged作用_docker总结

發布時間:2025/3/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker privileged作用_docker总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

docker基本命令

是一個開源的應用容器引擎;是一個輕量級容器技術;

docker主機(Host):安裝了Docker程序的機器(Docker直接安裝在操作系統之上);

docker客戶端(Client):連接docker主機進行操作;

docker倉庫(Registry):用來保存各種打包好的軟件鏡像;

docker鏡像(Images):軟件打包好的鏡像;放在docker倉庫中;

docker容器(Container):鏡像啟動后的實例稱為一個容器;容器是獨立運行的一個或一組應用

docker引擎

  • docker daemon process docker后臺服務直接執行dockerd啟動后臺服務
  • rest接口 程序可以通過rest接口來訪問后臺服務
  • docker cil 交互式命令行界面 docker開頭的所有命令都與docker cil交互
  • 鏡像操作

    知乎不支持表格所以只能這樣

    容器操作

    運行容器

    docker run [選項] 鏡像名 選項 -d 后臺運行 -it 提供容器交互 --name 設置容器名 --cpus 設置cpu個數 --env 設置環境變量 --mount type=bind,source=/root/target,target=/app或者--mount type=tmpfs,destination=/app --volume <host>:<container>:[rw|ro]掛載一個磁盤卷 例如 --volume /home/hyzhou/docker:/data:rw --restart 設置重啟策略on-failure,no,always --privileged 使用該參數,container內的root擁有真正的root權限。否則,container內的root只是外部的一個普通用戶權限。privileged啟動的容器,可以看到很多host上的設備,并且可以執行mount。甚至允許你在docker容器中啟動docker容器。

    volume bind-mount tmpfs-mount

    Volumes和Bind mounts模式使我們能夠在宿主機和容器間共享文件從而我們能夠將數據持久化到宿主機上,以避免寫入容器存儲層帶來的容器停止后數據的丟失的問題。

    tmpfs mounts,顧名思義,是一種非持久化的數據存儲。它僅僅將數據保存在宿主機的內存中,一旦容器停止運行,tmpfs mounts會被移除,從而造成數據丟失。

    一個簡單區分volumes,bind mounts和tmpfs mounts不同點的方法是:思考數據在宿主機上是如何存在的。

    • Volumes由Docker管理,存儲在宿主機的某個地方(在linux上是/var/lib/docker/volumes/)。非Docker應用程序不能改動這一位置的數據。Volumes是Docker最好的數據持久化方法。
    • Bind mounts的數據可以存放在宿主機的任何地方。數據甚至可以是重要的系統文件或目錄。非Docker應用程序可以改變這些數據。
    • tmpfs mounts的數據只存儲在宿主機的內存中,不會寫入到宿主機的文件系統。

    詳細區別https://michaelyou.github.io/2017/09/17/Docker%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86-Volume%EF%BC%8C-bind-mount%E5%92%8Ctmpfs-mount/

    Dockerfile

    DockerFile

    # 使用官方提供的 Python 開發鏡像作為基礎鏡像 FROM python:2.7-slim # 將工作目錄切換為 /app WORKDIR /app # 將當前目錄下的所有內容復制到 /app 下 ADD . /app # 使用 pip 命令安裝這個應用所需要的依賴 RUN pip install --trusted-host pypi.python.org -r requirements.txt # 允許外界訪問容器的 80 端口 EXPOSE 80 # 設置環境變量 ENV NAME World # 設置容器進程為:python app.py,即:這個 Python 應用的啟動命令 CMD ["python", "app.py"]

    其中,RUN 原語就是在容器里執行 shell 命令的意思。

    而 WORKDIR,意思是在這一句之后,Dockerfile 后面的操作都以這一句指定的 /app 目錄作為當前目錄。

    Dockerfile中的ENTRYPOINT指令和CMD指令都可以設置容器啟動時要執行的命令,但用途是有略微不同的。

    cmd : cmd給出的是一個容器的默認的可執行體。也就是容器啟動以后,默認的執行的命令。重點就是這個“默認”。意味著,如果docker run沒有指定任何的執行命令或者dockerfile里面也沒有entrypoint,那么,就會使用cmd指定的默認的執行命令執行。可以被docker run 語句覆蓋。

    entrypoint : 是真正的容器啟動以后要執行命令。不會被docker run 語句覆蓋。

    所以,到了最后的 CMD,意思是 Dockerfile 指定 python app.py 為這個容器的進程。這里,app.py 的實際路徑是 /app/app.py。所以,CMD [“python”, “app.py”] 等價于 "docker run python app.py"。另外,在使用 Dockerfile 時,你可能還會看到一個叫作 ENTRYPOINT 的原語。實際上,它和CMD 都是 Docker 容器進程啟動所必需的參數,完整執行格式是:“ENTRYPOINT CMD”。

    但是,默認情況下,Docker 會為你提供一個隱含的 ENTRYPOINT,即:/bin/sh -c。所以,在不指定 ENTRYPOINT 時,比如在我們這個例子里,實際上運行在容器里的完整進程是:/bin/sh -c “python app.py”,即 CMD 的內容就是 ENTRYPOINT 的參數。

    備注:基于以上原因,我們后面會統一稱 Docker 容器的啟動進程為ENTRYPOINT,而不是 CMD。

    需要注意的是,Dockerfile 里的原語并不都是指對容器內部的操作。就比如ADD,它指的是把當前目錄(即 Dockerfile 所在的目錄)里的文件,復制到指定容器內的目錄當中。

    讀懂這個 Dockerfile 之后,我再把上述內容,保存到當前目錄里一個叫“Dockerfile”的文件中:

    $ ls Dockerfile app.py requirements.txt

    接下來,我就可以讓 Docker 制作這個鏡像了,在當前目錄執行:

    docker build -t helloworld .

    其中,-t 的作用是給這個鏡像加一個 Tag,即:起一個好聽的名字。docker build 會自動加載

    當前目錄下的 Dockerfile 文件,然后按照順序,執行文件中的原語。而這個過程,實際上可以

    等同于 Docker 使用基礎鏡像啟動了一個容器,然后在容器中依次執行 Dockerfile 中的原語。

    需要注意的是,Dockerfile 中的每個原語執行后,都會生成一個對應的鏡像層。即使原語本身

    并沒有明顯地修改文件的操作(比如,ENV 原語),它對應的層也會存在。只不過在外界看來,這個層是空的。

    其他字段

    ARG 參數名 = 參數值

    構建參數和 ENV 的效果一樣,都是設置環境變量。所不同的是,ARG 所設置的構建環境的環境變量,在將來容器運行時是不會存在這些環境變量的。

    docker compose

    用于定義和運行多個Docker應用程序的工具

    #啟動相關服務 docker-compose up -d #編譯服務 docker-compose build . #停止相關服務 docker-compose down #刪除服務 docker-compose rm 服務名 #運行單個服務(容器) docker-compose run 服務名

    Compose 使用的三個步驟:

    • 使用 Dockerfile 定義應用程序的環境。
    • 使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
    • 最后,執行 docker-compose up 命令來啟動并運行整個應用程序。

    quick start

    1、準備

    創建一個測試目錄:

    $ mkdir composetest $ cd composetest

    在測試目錄中創建一個名為 app.py 的文件,并復制粘貼以下內容:

    import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/') def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.n'.format(count)

    在此示例中,redis 是應用程序網絡上的 redis 容器的主機名,該主機使用的端口為 6379。

    在 composetest 目錄中創建另一個名為 requirements.txt 的文件,內容如下:

    flask redis

    2、創建 Dockerfile 文件

    在 composetest 目錄中,創建一個名為的文件 Dockerfile,內容如下:

    FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]

    3、創建 docker-compose.yml

    在測試目錄中創建一個名為 docker-compose.yml 的文件,然后粘貼以下內容:

    # yaml 配置 version: '3' services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

    4、使用 Compose 命令構建和運行您的應用

    在測試目錄中,執行以下命令來啟動應用程序:

    docker-compose up

    如果你想在后臺執行該服務可以加上 -d 參數:

    docker-compose up -d

    (目錄下要有Dockerfile,docker-compose.yml,其他需要用到的文件)

    nvidia-docker

    運行容器

    # --shm-size 16G將tmpfs的大小改為16G(內存空間) docker run --runtime=nvidia --gpus all --shm-size 16G -it -d --name 容器名 鏡像名

    /dev/shm/介紹:

    /dev/shm/是linux下一個非常有用的目錄,因為這個目錄不在硬盤上,而是在內存里。默認系統就會加載/dev/shm ,它就是所謂的tmpfs

    總結

    以上是生活随笔為你收集整理的docker privileged作用_docker总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。