Dockerfile指令詳解以及docker私有倉庫

2018年7月18日11:31:59 發(fā)表評論 4,323 ℃

Docker鏡像加速

Ubuntu 16.04+、Debian 8+、CentOS 7

對于使用 systemd 的系統(tǒng),請?jiān)?nbsp;/etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)(http://hub-mirror.c.163.com)

{

   "registry-mirrors": [

 https://uf3mgws6.mirror.aliyuncs.com"

   ]

}

Dockerfile 指令詳解

#docker build [選項(xiàng)] <上下文路徑/URL/-> 構(gòu)建鏡像

#docker build -t nginx:v3 .

COPY 復(fù)制文件

格式:

       COPY <源路徑>... <目標(biāo)路徑>

       COPY ["<源路徑1>",... "<目標(biāo)路徑>"]

 僅在需要自動解壓縮的場合使用 ADD 命令

CMD 容器啟動命令

CMD 指令的格式和 RUN 相似,也是兩種格式:

      shell 格式: CMD <命令>

      exec 格式: CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...]

            參數(shù)列表格式: CMD ["參數(shù)1", "參數(shù)2"...] 。在指定了 ENTRYPOINT 指令后,用 CMD 指定具體的參數(shù)。

ENV 設(shè)置環(huán)境變量

格式有兩種:

    ENV <key> <value>

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

ARG 構(gòu)建參數(shù)

    格式: ARG <參數(shù)名>[=<默認(rèn)值>]

HEALTHCHECK 健康檢查

格式:

    HEALTHCHECK [選項(xiàng)] CMD <命令> :設(shè)置檢查容器健康狀況的命令

    HEALTHCHECK NONE :如果基礎(chǔ)鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指

        HEALTHCHECK 支持下列選項(xiàng):

        --interval=<間隔> :兩次健康檢查的間隔,默認(rèn)為 30 秒;

        --timeout=<時長> :健康檢查命令運(yùn)行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認(rèn) 30 秒;

        --retries=<次數(shù)> :當(dāng)連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy ,默認(rèn) 3

次。

# docker save alpine | gzip > alpine-latest.tar.gz

保存鏡像

#docker load -i alpine-latest.tar.gz

加載鏡像

利用 Linux 強(qiáng)大的管道,我們可以寫一個命令完成從一個機(jī)器將鏡像遷移到另一個機(jī)器,并且?guī)нM(jìn)度條的功能:

#docker save <鏡像名> | bzip2 | pv | ssh <用戶名>@<主機(jī)名> 'cat | docker load'

在私有倉庫上傳、搜索、下載鏡像

使用 docker tag 將 ubuntu:latest 這個鏡像標(biāo)記為  192.168.100.2:5000/ubuntu:latest 

    格式為 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

 docker tag ubuntu:latest   192.168.100.2:5000/ubuntu:latest

使用 docker push 上傳標(biāo)記的鏡像

#docker push  192.168.100.2:5000/ubuntu:latest

Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像

Ubuntu 16.04+, Debian 8+, centos 7

對于使用 systemd 的系統(tǒng),請?jiān)?nbsp;/etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)

{

"registry-mirror": [

"https://registry.docker-cn.com"

   ],

"insecure-registries": [

"192.168.100.2:5000"

   ]

}

注意:該文件必須符合 json 規(guī)范,否則 Docker 將不能啟動。

用 curl 查看倉庫中的鏡像

#curl 192.168.100.2:5000/v2/_catalog

    可以看到 {"repositories":["ubuntu"]} ,表明鏡像已經(jīng)被成功上傳了

數(shù)據(jù)卷

#docker volume create my-vol

創(chuàng)建一個數(shù)據(jù)卷

docker run -d -P \

--name web \

# -v my-vol:/wepapp \

--mount source=my-vol,target=/webapp \

training/webapp \

python app.py

創(chuàng)建一個名為 web 的容器,并加載一個 數(shù)據(jù)卷 到容器的 /webapp 目錄

# docker volume rm my-vol  刪除數(shù)據(jù)卷

rm -v :刪除容器的同時移除數(shù)據(jù)卷

#docker volume prune

清理無主的數(shù)據(jù)卷空間

掛載主機(jī)目錄

--mount type=bind 掛載類型 bind、volume 或 tmpfs

docker run -d -P \

--name web \

# -v /src/webapp:/opt/webapp \

--mount type=bind,source=/src/webapp,target=/opt/webapp \

training/webapp \

python app.py

上面的命令加載主機(jī)的 /src/webapp 目錄到容器的 /opt/webapp 目錄

容器互聯(lián)

#docker network create -d bridge my-net    創(chuàng)建一個新的 Docker 網(wǎng)絡(luò)

 -d 參數(shù)指定 Docker 網(wǎng)絡(luò)類型,有 bridge  overlay 。

#docker run -it --rm --name busybox1 --network my-net busybox sh

#docker run -it --rm --name busybox2 --network my-net busybox sh

 運(yùn)行一個容器并連接到新建的 my-net 網(wǎng)絡(luò)

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: