Docker run 參考指南

docker運行在一個獨立的隔離的進程中。

當用戶執行docker run,它將啓動一個有着獨立的文件系統,獨立的網絡和獨立的進程樹的進程。

--rm:告訴Docker一旦運行的進程退出就刪除容器。這在進行測試時非常有用,可免除雜亂[圖片]

-ti:告訴Docker分配一個僞終端並進入交互模式。這將進入到容器內,對於快速原型開發或嘗試很有用,但不要在生產容器中打開這些標誌


基本的docker run命令的格式:

docker run  [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

 

[OPTIONS]分爲兩種:

1.對於用戶獨佔性的設置:

前臺、後臺運行

容器定義

網絡設定

容器在CPU和內存中的運行時間

運行權限和LXC配置

2.在操作者和開發者之間的共享設定,操作者可以覆蓋掉開發者在build鏡像的時候的默認設置。

 

前臺和後臺

後臺(-d)

在後臺模式(-d=true或者直接使用-d)

所有的IO操作都必須通過網絡連接或者共享捲來進行,因爲容器在後臺運行的時候就不能收到命令行。

當然也可以通過執行dockerattach重新連上在後臺執行的容器。

如果你選擇運行一個容器在後臺模式,那你就不能使用-rm選項了。

 

前臺

在前臺模式(默認的)

docker run可以在容器裏開啓一個進程同時

你可以通過控制檯來獲得進程的STDINSTDOUTSTDERR

可以作爲終端和傳遞信號。所有這些的配置方法如下:

-a, --attach=[]           連接容器的stdinstdoutstderr (默認連接這三個流)

-t, --tty=false           使用終端。經常和 -i一起使用。

--sig-proxy=true          代理所有收到的系統信息(測試了一下好像沒有作用)

-i, --interactive=false   打開STDIN和容器交互。經常和 -t一起使用。

 

docker run -a stdin -a stdout -i-t ubuntu /bin/bash

 

容器的標識

我們可以通過三種方式來定義一個容器

UUID長定義("f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778")

UUID短定義("f78375b1c487")

名字     ("evil_ptolemy")

UUID標識是來自於Docker後臺進程

如果你不通過-name來分配一個名字給容器,那麼後臺進程就會產生一個隨機的字段名。

 

PID等價爲了更自動化,你可以在容器啓動的時候將容器的進程ID寫入到一個指定的文件中

--cidfile=""                   寫入容器的進程ID到指定文件

 

網絡設定

--dns=[]              設置容器的DNS服務器

--net="bridge"        設置容器的網絡連接方式

                           'bridge':             橋接

                           'none':               不提供網絡連接

                          'Container:<name|id>':複用另一個容器的網絡連接,(共享一個網絡堆棧)

                           'host':               使用宿主機的網絡環境

 

$ docker run -d --name redisexample/Redis --bind 127.0.0.1

# use the redis container's network stack to access localhost

$ docker run --rm -ti --netcontainer:redis example/redis-cli -h 127.0.0.1

 

清理(-rm)

Docker容器會在運行結束之後繼續保留容器的文件系統。

如果你希望在退出的時候自動清理這些文件,可以加上--rm參數。(特別適合初學者隨便建容器)

    docker run -it --rm  mariadb:10.0.23 /bin/bash

容器的CPU和內存佔用

用戶可以調整容器的性能參數:

-m, --memory=""       內存限制(單位:b, k, m or g)

-c=0                  CPU優先級 (相對權重)

用戶可以通過docker run -m來方便的限定容器的內存使用。

默認所有容器都運行在相同優先級上,得到相同的比例的CPU週期。

但是你可以在docker啓動這些容器的時候告訴內核給予更多的cpu分配。

 

掛載目錄(直接給例子吧)

-v=[]:綁定掛載目錄

宿主機綁定: -v<host>:<container>:[rw|ro]

Docker中新建一個共享的卷: -v /<container>

sudo docker run --rm-i -t -v /home/hyzhou/docker:/data:rw ubuntu:14.04 /bin/bash

將本機的/home/hyzhou/docker,掛載到鏡像中的/data目錄

--volumes-from=""         從容器掛載共享目錄

sudo docker run --rm -i -t -v/valume --name test ubuntu:14.04 /bin/bash

sudo docker run --rm-i -t --volumes-fromtest buntu:14.04 /bin/bash

掛載test鏡像的/valume目錄

 

 

用戶

容器默認的用戶是root(id=0),但是如果開發者創建了其他的用戶,那些用戶也可以訪問。

開發者可以設置一個默認用戶來運行第一個進程通過Dockerfile USER命令,但是操作者可以覆蓋它:

-u=""                設置默認的用戶名或UID

 

 

工作目錄

一個容器內的默認工作目錄是根目錄(/)

-w=""                設置默認的工作目錄


docker run -h node1 --name=node1 --ulimit nofile=65535:655350 -m 512M --memory-swap=1024M --net=none -d -it centos:latest /root/run
  這個時候容器就已經啓動,但是不符合我的環境
  -h 主機名
  --name 給容器定義名字
  -ulimit 配置ulimit,當容器啓動後就無法更改
  -m 分配內存

  --net=none 不使用docker網絡,如果不配置會docker會自動分配ip地址給容器,但是每次重啓後ip地址會改變,導致不符合我的環境,也可以用-p把端口映射出去,這樣 端口不會改變,使用端口即可,但是正如我所說,不符合我的環境要求,後面採用腳本控制命名空間給容器配置靜態ip






7、docker run命令詳解

    Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]  
    Run a command in a new container  
    -a=map[]: 附加標準輸入、輸出或者錯誤輸出  
    -c=0: 共享CPU格式(相對重要)  
    -cidfile="": 將容器的ID標識寫入文件  
    -d=false: 分離模式,在後臺運行容器,並且打印出容器ID  
    -e=[]:設置環境變量  
    -h="": 容器的主機名稱  
    -i=false: 保持輸入流開放即使沒有附加輸入流  
    -privileged=false: 給容器擴展的權限  

    -m="": 內存限制 (格式:<number><optional unit>, unit單位 = b, k, m or 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章