1. 程式人生 > >Docker Dockerfile

Docker Dockerfile

mail 指定 htm 而且 man 信息 volume 端口 mman

一、什麽是 Dockerfile

比如我想制作一個鏡像,這個鏡像安裝了 lnmp 、redis 、elk 等各種軟件,制作流程會是這樣:

① 先下載一個基礎鏡像,如 centos
② 使用這個鏡像啟動成一個容器
③ 在容器中安裝 lnmp 、redis 、elk 等各種軟件
④ 最後再把容器制作成一個鏡像

什麽是 Dockerfile:Dockerfile 相當於一個命令集 ( 命令的集合 ) 文件,我們可以把上面的步驟都寫到這個文件,然後執行這個文件就能生成一個鏡像


二、Dockerfile 常用指令

FROM          # 指定基於哪個鏡像,語法:FROM <image> 或 FROM <image>:<tag>,如 FROM centos:latest
MAINTAINER # 指定Dockerfile文件的作者信息,語法:MAINTAINER <name> <mail>,如 MAINTAINER xiaoming [email protected] RUN # 指定要操作的命令,語法:RUN <command>,如 RUN yum install redis,如果命令有選項必須寫成 RUN ["yum", "install", "-y", "redis"] CMD # 指定容器啟動時要執行的命令,語法:CMD <command>,如 CMD yum install redis,如果命令有選項必須寫成 CMD ["yum", "install", "-y", "redis"]
EXPOSE # 指定容器要開放的端口,以便外部能訪問,如 EXPOSE 22 80 443 表示開放 22 80 443 這三個端口,但必須結合 docker -p 80:80 這種形式來使用 ENV # 用於定義環境變量,如 ENV PATH /usr/local/bin:$PATH,也可以自定義用戶變量,如 EVN MySQL_Version 5.6,定義的變量可以讓 RUN 或 CMD 使用 ADD # 用於拷貝宿主機的文件到容器的某個目錄裏,語法:ADD <src> <dest>,如 ADD 1.txt /data 表示拷貝宿主機的1.txt到容器的/data目錄,<src>也可以是一個url
COPY # 用法與ADD一致,不同的是,ADD可以使用url,COPY不能使用url ENTRYPOINT # 指定容器啟動時要執行的命令,用法與CMD一致,不同的是,CMD的命令會被覆蓋,比如 docker run -itd centos bash 去啟動容器時,bash就是啟動容器時執行的命令 # 而如果我們寫了 CMD echo 123 是不會執行的,因為被bash命令覆蓋了,而我們使用ENTRYPOINT就不會被覆蓋,而且會優先執行ENTRYPOINT指定的命令再執行bash命令 # 另外一點,如果我們再Dockerfile文件中寫了多條CMD指令,那麽只有最後一條會執行,使用ENTRYPOINT則每一條都會執行 VOLUME # 指定掛載目錄,如 VOLUME ["/data"] 表示把宿主機的/data目錄掛載到容器裏,但不會指定掛載到容器裏的哪個目錄,需要使用 docker inspect 來查看,參考鏈接 USER # 指定啟動容器的用戶,如 USER root 表示使用 root 用戶來啟動容器 WORKDIR # 指定工作目錄,對 RUN,CMD,ENTRYPOINT,COPY,ADD 生效,比如 WORKDIR /data,那麽我執行 RUN echo 123 相當於執行 cd /data; echo 123


三、Dockerfile 實例:安裝 Nginx

Docker Dockerfile