Dockerfile詳解
1.FROM:引入和開始
#從頭製作baseImage
FROM scratch
#使用已有的baseImage
FROM centos
#指定使用的版本
FROM ubuntu:14.04
2.LABEL:定義一些說明信息
LABEL [email protected]
LABEL version=”1.0”
LABEL description=”xxx”
3.RUN:執行命令,每執行一條RUN,多一個分層,一般用&&合併語句,反斜槓換行
RUN yum -y update && yum -y install lrzsz \
net-tools
RUN apt-get -y update && apt-get -y install lrzsz\
net-tools
RUN /bin/bash -c ‘source $HOME/.bashrc;echo $HOME’
4.WORKDIR:進入或創建目錄,儘量不要使用相對路徑
#進入/root目錄
WORKDIR /root
#如果沒有會自動創建
WORKDIR /test
WORKDIR demo
#輸出:/test/demo
RUN pwd
5.ADD和COPY:將本地的文件,添加到image裏
#將hello添加到根目錄下
ADD hello /
#將tar包直接解壓到根目錄
ADD test.tar.gz /
#最終hello應該在 /root/test/hello
WORKDIR /root
COPY hello test/
6.ENV:增加Dockerfile的可讀性
#設置常量
ENV MYSQL_MAJOR 5.5
#使用常量
$MYSQL_MAJOR
RUN apt-get -y install mysql-server=”${MYSQL_VERSION}”
CMD和ENTRYPOINT
#shell格式
RUN apt-get -y install lrzsz
CMD echo “hello docker”
ENTRYPOINT echo “hello docker”
#exec格式
RUN [“apt-get”,”-y”,”install”,”lrzsz”]
CMD [“/bin/echo”,”hello docker”]
ENTRYPOINT [“/bin/echo”,”hello docker”]
ENTRYPOINT使用的比CMD多一些
ENTRYPOINT:設置容器啓動時運行的命令,一定會執行,不會被忽略
1.編寫Dockerfile
2.構建image
3.分別運行兩個image看效果
4.修改Dockerfile如下
5.重新構建和運行
CMD:設置容器啓動後默認執行的參數和命令,若docker指定了其他命令,CMD可以被忽略,CMD若指定多個,只運行最後一個
1.編寫file
2.構建和運行
CMD和ENTRYPOINT對比
1.再構建一個ENTRYPOINT
2.構建
3.運行CMD的image
4.運行ENTRYPOINT的image
CMD命令可能被覆蓋,ENTRYPOINT命令一定會執行
分享docker image
分享的image一定要以自己docker用戶名開頭,例如:zhangsan/centos
1.登錄
2.上傳自己得image
3.下載自己的image
分享自己得Dockerfile
分享image不太安全,一般分享Dockerfile
1.點擊
2.與gitHub關聯,鏈接一個賬戶
3.link到github
4.點擊
搭建私有的docker registry
1.docker hub裏搜
2.開啓另一臺虛擬機,執行安裝運行registry
3.在之前機器安裝telnet,測試連通信
4.構建image,IP是倉庫機器的IP
5.直接push會報錯
6.編寫json文件,目錄和文件名如下,IP是倉庫機器的IP
7.修改文件,添加一行即可
8.重啓docker
9.查看docker私有倉庫的內容,此時沒有東西,路徑如下
10.上傳自己的image到docker私有倉庫
11.再次查看私有倉庫
12.刪掉本地的image
13.從私有倉庫下東西
Dockerfile案例
用py寫一個web應用
1.編寫py文件
2.安裝wget
3.安裝pip,直接複製運行.txt中的命令
4.安裝
5.用pip安裝flask
6.搭建web服務成功
7.編寫Dockerfile
8.構建image
9.運行