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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

docker privileged作用_docker总结

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

docker基本命令

是一個開源的應(yīng)用容器引擎;是一個輕量級容器技術(shù);

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

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

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

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

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

docker引擎

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

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

    容器操作

    運行容器

    docker run [選項] 鏡像名 選項 -d 后臺運行 -it 提供容器交互 --name 設(shè)置容器名 --cpus 設(shè)置cpu個數(shù) --env 設(shè)置環(huán)境變量 --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 設(shè)置重啟策略on-failure,no,always --privileged 使用該參數(shù),container內(nèi)的root擁有真正的root權(quán)限。否則,container內(nèi)的root只是外部的一個普通用戶權(quán)限。privileged啟動的容器,可以看到很多host上的設(shè)備,并且可以執(zhí)行mount。甚至允許你在docker容器中啟動docker容器。

    volume bind-mount tmpfs-mount

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

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

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

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

    詳細區(qū)別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 開發(fā)鏡像作為基礎(chǔ)鏡像 FROM python:2.7-slim # 將工作目錄切換為 /app WORKDIR /app # 將當前目錄下的所有內(nèi)容復(fù)制到 /app 下 ADD . /app # 使用 pip 命令安裝這個應(yīng)用所需要的依賴 RUN pip install --trusted-host pypi.python.org -r requirements.txt # 允許外界訪問容器的 80 端口 EXPOSE 80 # 設(shè)置環(huán)境變量 ENV NAME World # 設(shè)置容器進程為:python app.py,即:這個 Python 應(yīng)用的啟動命令 CMD ["python", "app.py"]

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

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

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

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

    entrypoint : 是真正的容器啟動以后要執(zhí)行命令。不會被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 容器進程啟動所必需的參數(shù),完整執(zhí)行格式是:“ENTRYPOINT CMD”。

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

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

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

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

    $ ls Dockerfile app.py requirements.txt

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

    docker build -t helloworld .

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

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

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

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

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

    其他字段

    ARG 參數(shù)名 = 參數(shù)值

    構(gòu)建參數(shù)和 ENV 的效果一樣,都是設(shè)置環(huán)境變量。所不同的是,ARG 所設(shè)置的構(gòu)建環(huán)境的環(huán)境變量,在將來容器運行時是不會存在這些環(huán)境變量的。

    docker compose

    用于定義和運行多個Docker應(yīng)用程序的工具

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

    Compose 使用的三個步驟:

    • 使用 Dockerfile 定義應(yīng)用程序的環(huán)境。
    • 使用 docker-compose.yml 定義構(gòu)成應(yīng)用程序的服務(wù),這樣它們可以在隔離環(huán)境中一起運行。
    • 最后,執(zhí)行 docker-compose up 命令來啟動并運行整個應(yīng)用程序。

    quick start

    1、準備

    創(chuàng)建一個測試目錄:

    $ mkdir composetest $ cd composetest

    在測試目錄中創(chuàng)建一個名為 app.py 的文件,并復(fù)制粘貼以下內(nèi)容:

    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 是應(yīng)用程序網(wǎng)絡(luò)上的 redis 容器的主機名,該主機使用的端口為 6379。

    在 composetest 目錄中創(chuàng)建另一個名為 requirements.txt 的文件,內(nèi)容如下:

    flask redis

    2、創(chuàng)建 Dockerfile 文件

    在 composetest 目錄中,創(chuàng)建一個名為的文件 Dockerfile,內(nèi)容如下:

    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、創(chuàng)建 docker-compose.yml

    在測試目錄中創(chuàng)建一個名為 docker-compose.yml 的文件,然后粘貼以下內(nèi)容:

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

    4、使用 Compose 命令構(gòu)建和運行您的應(yīng)用

    在測試目錄中,執(zhí)行以下命令來啟動應(yīng)用程序:

    docker-compose up

    如果你想在后臺執(zhí)行該服務(wù)可以加上 -d 參數(shù):

    docker-compose up -d

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

    nvidia-docker

    運行容器

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

    /dev/shm/介紹:

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。