1. 程式人生 > >鏡像上傳和Dockerfile

鏡像上傳和Dockerfile

基礎 必須 遠程文件 update dex nginx .rpm tar.gz inspect

一.鏡像上傳

1.在https://hub.docker.com 註冊一個賬號

2.創建一個倉庫

3.取到containerID

#docker ps

  

4.commit容器

#docker commit {containerID} rorshach/nginx:v1

  

5.登錄hub docker

#docker login

  

ps:
輸入賬密

6.push鏡像:

#docker push rorshach/nginx:v1

7.push完成後就可以在hub.docker.com中看到你的鏡像了

二.Dockerfile

1.常用指令:
(1).FROM
指定基礎鏡像,必須放在Dockerfile第一行,表示從哪個鏡像構建

如:FROM centos
FROM scratch // 表示從空白鏡像開始構建

(2).RUN
執行命令
a.shell 格式: RUN <命令>
如:

RUN echo ‘hello world‘ > /usr/share/nginx/html/index.html

  

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

RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"

每一個 RUN 的行為,就和剛才我們手工建立鏡像的過程一樣:新建立一層,在其上執行這些命令,執行結束後, commit 這一層的修改,構成新的鏡像。
對於多個命令,我們可以使用&&將命令串聯起來

RUN 命令1 && 命令2 && 命令3

  

(3).CMD
功能為容器啟動時要運行的命令,不會創建新的鏡像層
格式為以下三種:

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

  

如:

CMD nginx -g ‘daemon off;‘

  

(4).ADD 和 COPY
可以將本地的文件復制到容器中
格式:

COPY <src>... <dest>
COPY ["<src>",... "<dest>"]

  

ADD可以是遠程文件,但COPY只能是本地文件;相當於scp;只是免賬密

(5).EXPOSE
指定鏡像程序將會在哪個端口提供服務,可以通過docker inspect <container-id>指令檢索出來,EXPOSE指令實際上只是一個約定,需要在docker run 發布時以-p標誌的方式暴露,上述的是小寫的p需要指定主機到到虛擬到主機端口之間的映射,而大寫的P是將鏡像中的端口暴露到主機的隨機端口,具體暴露到哪個端口可以通過docker ps查看.
如:
EXPOSE 80

(6).MAINTAINER(可選)
指定作者
如:
MAINTAINER 作者

(7).ENV
用於配置環境變量
如:
ENV JAVA_HOME=/opt/jdk-9

示例Dockerfile文件:

# base image
FROM centos:7
# MAINTAINER
MAINTAINER rorshach [email protected]

RUN yum update && rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm && yum install -y nginx
CMD nginx -g ‘daemon off;‘ #鏡像啟動後運行nginx

EXPOSE 80

  


2.構建

#docker build -t <鏡像名稱> <目錄> -f <Dockerfile文件名>


如果Dockerfile的文件名為Dockerfile,則-f可以省略

鏡像上傳和Dockerfile