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

2018年7月18日11:31:59 發表評論 4,436 ℃

Docker鏡像加速

Ubuntu 16.04+、Debian 8+、CentOS 7

對于使用 systemd 的系統,請在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件)(http://hub-mirror.c.163.com)

{

   "registry-mirrors": [

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

   ]

}

Dockerfile 指令詳解

#docker build [選項] <上下文路徑/URL/-> 構建鏡像

#docker build -t nginx:v3 .

COPY 復制文件

格式:

       COPY <源路徑>... <目標路徑>

       COPY ["<源路徑1>",... "<目標路徑>"]

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

CMD 容器啟動命令

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

      shell 格式: CMD <命令>

      exec 格式: CMD ["可執行文件", "參數1", "參數2"...]

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

ENV 設置環境變量

格式有兩種:

    ENV <key> <value>

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

ARG 構建參數

    格式: ARG <參數名>[=<默認值>]

HEALTHCHECK 健康檢查

格式:

    HEALTHCHECK [選項] CMD <命令> :設置檢查容器健康狀況的命令

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

        HEALTHCHECK 支持下列選項:

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

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

        --retries=<次數> :當連續失敗指定次數后,則將容器狀態視為 unhealthy ,默認 3

次。

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

保存鏡像

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

加載鏡像

利用 Linux 強大的管道,我們可以寫一個命令完成從一個機器將鏡像遷移到另一個機器,并且帶進度條的功能:

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

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

使用 docker tag 將 ubuntu:latest 這個鏡像標記為  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 上傳標記的鏡像

#docker push  192.168.100.2:5000/ubuntu:latest

Docker 默認不允許非 HTTPS 方式推送鏡像

Ubuntu 16.04+, Debian 8+, centos 7

對于使用 systemd 的系統,請在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件)

{

"registry-mirror": [

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

   ],

"insecure-registries": [

"192.168.100.2:5000"

   ]

}

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

用 curl 查看倉庫中的鏡像

#curl 192.168.100.2:5000/v2/_catalog

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

數據卷

#docker volume create my-vol

創建一個數據卷

docker run -d -P \

--name web \

# -v my-vol:/wepapp \

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

training/webapp \

python app.py

創建一個名為 web 的容器,并加載一個 數據卷 到容器的 /webapp 目錄

# docker volume rm my-vol  刪除數據卷

rm -v :刪除容器的同時移除數據卷

#docker volume prune

清理無主的數據卷空間

掛載主機目錄

--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

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

容器互聯

#docker network create -d bridge my-net    創建一個新的 Docker 網絡

 -d 參數指定 Docker 網絡類型,有 bridge  overlay 。

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

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

 運行一個容器并連接到新建的 my-net 網絡

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

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