Docker用法總結(一)Dockerfile

2021-10-04 16:58:08 字數 4475 閱讀 7988

最近在把伺服器上的應用盡量docker化,踩了不少坑……不過也正好學習dockerdocker-compose的用法。此篇文章記錄docker常用命令、使用方法,用於備忘。

主要是dockerfiledocker-compose.yml兩個檔案,這倆的關係,簡單的講:

映象一般只生成一次,而容器則可以啟動多個。

用於生成docker映象的配置檔案,簡單講就是初始化映象用的,比如拷貝檔案到映象、執行命令、暴露埠、設定使用者等等。

生成映象的常用命令如下:

$ docker build -t name:tag path
docker build [options] path | url | -

通過-t指定映象名/版本

path為dockerfile所在的目錄

乙個dockerfile大致長這個亞子:

from ubuntu

run useradd -m ctf

workdir /home/ctf

copy ./start.sh /start.sh

run chmod +x /start.sh

cmd ["/start.sh"]

user ctf

expose 9999

基本的書寫格式就是:指令+操作

使用dockerfile生成映象,就是對原始映象逐步執行dockerfile中指令

指令不多,列張**好了:

指令操作(例子)

功能from

from ubuntu:16.04指定初始映象

workdir

workdir /home/taqini切換工作目錄

user

user taqini切換預設使用者

argarg code_version=latest定義變數

envenv dalao=imagin定義環境變數

copy

copy test /opt/test/拷貝檔案至映象

runadduser taqini執行系統命令

expose

expose 80/tcp曝露埠

cmdcmd ["start.sh"]啟動時執行命令

enterpoint

entrypoint ["entrypoint.sh"]指定啟動時的入口點

指定初始映象( base image

),寫法有三種

from [as ]

from [:] [as ]

from [@] [as ]

一般直接from image:tag就行

相當於cd,用於切換工作目錄,例如:

workdir /dir
最後乙個workdir指定的路徑將作為docker啟動的預設路徑

切換到指定使用者,一般指定使用者名稱或是uid

user taqini

user 1001

預設使用者是root

用於定義臨時變數,例如:

arg  code_version=latest

from base:$

設定環境變數,有兩種格式:

env env =...
使用等於號可以同時設定多個環境變數

從本地複製檔案到映象,格式為copy 本地檔案 目標映象檔案

copy test relativedir/   # adds "test" to `workdir`/relativedir/

copy test /absolutedir/ # adds "test" to /absolutedir/

拷貝時可以使用相對路徑,前提是已經通過workdir指定了工作目錄

copy的同時修改檔案所有者:

copy --chown=user:group files* /somedir/
run就是執行系統命令,有兩種格式:

shell格式相當於把run後的command依次作為/bin/sh -c的引數(子命令)

exec格式則是直接執行括號中的命令

exec 格式使用的是json陣列,所以只能用雙引號,不能用單引號!

一般使用第一種,例子:

run apt-get update
執行命令的預設使用者是root

第二種格式很麻煩,因為它不會呼叫shell,所以環境變數什麼的就不會起作用,比如:

run [ "echo", "$home" ]
上面的用法是錯的,正確的用法應該是:

run [ "sh", "-c", "echo $home" ]
很麻煩是叭 _(:з」∠)

配置曝露的埠

expose [/...]
例如:

expose 80/tcp
曝露的埠用於在docker啟動時作埠對映,比如將docker的80埠對映到伺服器的8080埠:

docker run -p 80:80/tcp ...
有三種寫法:

cmd指定的命令/指令碼會在映象啟動時執行,是可執行容器預設的執行命令。

乙個dockerfile中只能有乙個cmd指令,如果存在多個,則只有最後乙個生效

映象啟動後的入口點。

和cmd不同,entrypoint先執行。

比如entrypoint指定了乙個啟動指令碼:

entrypoint ["entrypoint.sh"]
在映象啟動後,只會執行這個指令碼的內容(即使dockerfile中有cmd指令)。

但是cmd指令也是有用處的,比如這樣:

cmd ["2333"]

entrypoint ["echo"]

執行映象的結果是:

2333
也就是說,如果之前有cmd指令,cmd指令的運算元其實是用作entrypoint的引數的。

如果不指定entrypoint,cmd的運算元就會被全部用作entrypoint的引數

所以看起來的效果就是預設執行了cmd

感覺沒說明白……文章末尾有參考文章,講的十分清楚(´•灬•『)

給映象新增標籤(沒啥用)

label version="1.0"

label description="this text illustrates \

that label-values can span multiple lines."

copy差不多,但貌似只能在linux下用,不提了。

用於建立映象內的掛載點,例如:

volume ["/data"]
感覺沒啥用,一般操作是在docker-compose裡直接設定掛載點的資訊

官方| docker documentation

csdn|【docker】cmd entrypoint 區別 終極解讀!

Dock命令總結

1,停止所有容器 docker stop docker ps a q 2,刪除所有容器 docker rm docker ps a q 3,檢視所有容器的id docker ps a q 其中docker ps 列出容器,a 顯示所有的容器,包括未執行的,q 靜默模式,只顯示容器編號 4,刪除本地乙...

docker學習 centos安裝docker

1.更新yum源 yum update2.安裝依賴 3.設定yum源 使用ustc,也可以使用阿里雲的 yum config manager add repo4.安裝docker yum install y docker ce通過docker v檢視,如果檢視到版本號,說明安裝成功 5.設定ustc...

在linux建立docker,執行docker容器

安裝 1.依次執行以下命令新增yum源。yum update yum install epel release y yum clean all yum list2.安裝並執行docker。yum install docker io y systemctl start docker3.檢查安裝結果.d...