Docker制作镜像

Docker制作镜像

Dockerfile 指令详解

1.FROM

用法:

FROM <image>1

FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
如果FROM语句没有指定镜像标签,则默认使用latest标签。

2.MAINTAINER

用法:

MAINTAINER <name>1

指定创建镜像的用户

3.RUN
RUN "executable", "param"

每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的版本控制。。

4.CMD
CMD "executable","param"

CMD指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了

5.EXPOSE
格式:

EXPOSE <port> 1

告诉 Docker 服务端容器对外映射的本地端口,需要在 docker run 的时候使用-p或者-P选项生效。

6.ENV

ENV <key> <value>       # 只能设置一个变量
ENV <key>=<value> ...   # 允许一次设置多个变量12

指定一个环境变量,会被后续RUN指令使用,并在容器运行时保留。
例子:

ENV myName="John Doe" myDog=Rex\ The\ Dog \
    myCat=fluffy12
等同于
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy123
7.ADD
ADD <src>... <dest>1

ADD复制本地主机文件、目录或者远程文件 URLS 从 并且添加到容器指定路径中 。
支持通过 GO 的正则模糊匹配,具体规则可参见 Go filepath.Match

ADD hom* /mydir/        # adds all files starting with "hom"
ADD hom?.txt /mydir/    # ? is replaced with any single character12

路径必须是绝对路径,如果 不存在,会自动创建对应目录
路径必须是 Dockerfile 所在路径的相对路径
如果是一个目录,只会复制目录下的内容,而目录本身则不会被复制

8.COPY
COPY <src>... <dest>1

COPY复制新文件或者目录从 并且添加到容器指定路径中 。用法同ADD,唯一的不同是不能指定远程文件 URLS。

9.ENTRYPOINT

ENTRYPOINT “executable”, “param”
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run

方法一:编写Dockerfile

使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

示范一:tomcat基础镜像

cat Dockerfile 
FROM centos
MAINTAINER   test@test.com
RUN  mkdir -p /opt/tomcat && \
      mkdir -p /optlog/MskyLog  && \
      mkdir -p /data/appdatas/cat && \
      useradd  jboss5  && \
      chown -R jboss5:jboss5 /opt/tomcat && \
      chown -R jboss5:jboss5 /optlog/MskyLog && \
      chown -R jboss5:jboss5 /data/appdatas/cat  
ADD  apachetomcatserver.tar.gz  /opt/tomcat
ADD  jdk1.8.0_102.tar.gz  /opt/tomcat

ENV LANG=en_US.utf8
ENV JAVA_HOME=/opt/tomcat/jdk1.8.0_102
ENV PATH=$JAVA_HOME/bin:$PATH
EXPOSE  8180

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t tomcat_test .

Sending build context to Docker daemon  191.9MB
Step 1/9 : FROM centos
 ---> 67fa590cfc1c
Step 2/9 : MAINTAINER  test@test.com
 ---> Running in 2fd1f46ea532
Removing intermediate container 2fd1f46ea532
 ---> f76973935554
Step 3/9 : RUN mkdir -p /opt/tomcat &&     mkdir -p /optlog/MskyLog  &&     mkdir -p /data/appdatas/cat &&     useradd  jboss5  &&     chown -R jboss5:jboss5 /opt/tomcat &&     chown -R jboss5:jboss5 /optlog/MskyLog &&     chown -R jboss5:jboss5 /data/appdatas/cat
 ---> Running in b3dddb1ea466
Removing intermediate container b3dddb1ea466
 ---> 4a37c81a2a23
Step 4/9 : ADD apachetomcatserver.tar.gz  /opt/tomcat
 ---> e598035a34ab
Step 5/9 : ADD jdk1.8.0_102.tar.gz /opt/tomcat
 ---> de71ef38bb98
Step 6/9 : ENV LANG en_US.utf8
 ---> Running in 1630b7859aef
Removing intermediate container 1630b7859aef
 ---> 3947bc7e1120
Step 7/9 : ENV JAVA_HOME=/opt/tomcat/jdk1.8.0_102
 ---> Running in 8ced366d5221
Removing intermediate container 8ced366d5221
 ---> 23fd939cc362
Step 8/9 : ENV PATH=$JAVA_HOME/bin:$PATH
 ---> Running in 87f143ac0756
Removing intermediate container 87f143ac0756
 ---> 11847b502604
Step 9/9 : EXPOSE  8180
 ---> Running in 5a94bb7988d3
Removing intermediate container 5a94bb7988d3
 ---> 7304d31c44fe
Successfully built 7304d31c44fe
Successfully tagged tomcat_test:latest

参数说明:
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为 7304d31c44fe

docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat_test         latest              7304d31c44fe        2 minutes ago       595MB
centos              latest              67fa590cfc1c        8 days ago          202MB

示范二:tomcat具体应用(以test为例)

cat  Dockerfile
FROM  tomcat_test

MAINTAINER  test@test.com

COPY  test.war  /opt/tomcat/apachetomcatserver/webapps

USER jboss5
ENTRYPOINT  ["/opt/tomcat/apachetomcatserver/bin/startup.sh","run"]

docker build -t test .
Sending build context to Docker daemon  184.7MB
Step 1/5 : FROM tomcat_test
 ---> 7304d31c44fe
Step 2/5 : MAINTAINER  test@test.com
 ---> Running in 09a0d4fb1fbc
Removing intermediate container 09a0d4fb1fbc
 ---> 9167e11c9890
Step 3/5 : COPY test.war  /opt/tomcat/apachetomcatserver/webapps
 ---> f92e7d1a0f4e
Step 4/5 : USER jboss5
 ---> Running in f676f021a0de
Removing intermediate container f676f021a0de
 ---> 87758dd31733
Step 5/5 : ENTRYPOINT ["/opt/tomcat/apachetomcatserver/bin/startup.sh","run"]
 ---> Running in 7f05bba7190f
Removing intermediate container 7f05bba7190f
 ---> 5dad1eed56ff
Successfully built 5dad1eed56ff
Successfully tagged test:latest

查看镜像:

[root@docker-bulid test]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test              latest              5dad1eed56ff        4 minutes ago       780MB
tomcat_test         latest              7304d31c44fe        21 minutes ago      595MB
centos              latest              67fa590cfc1c        8 days ago          202MB

给镜像打标签:docker tag
制作完镜像后根据自己的需要给镜像打标签(重起镜像名称),将上述制作好的镜像打一个标签,通常是以私有仓库地址为镜像名称的。

docker   tag  tomcat_test    10.1.1.1/test/ tomcat_test

查看镜像:

[root@docker-bulid test]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
test                           latest              5dad1eed56ff        6 minutes ago       780MB
10.1.1.1/test/tomcat_test   latest              7304d31c44fe        24 minutes ago      595MB
tomcat_test                      latest              7304d31c44fe        24 minutes ago      595MB
centos                           latest              67fa590cfc1c        8 days ago          202MB

将镜像推送到私有镜像仓库中:docker push
使用命令docker push + 镜像名字:

[root@docker-bulid test]# docker push 10.1.1.1/test/tomcat_test
The push refers to repository [10.1.1.1/test/tomcat_test]
c943684290b7: Pushed 
6fdfb7ca8f55: Pushed 
7b470a43942f: Pushed 
877b494a9f30: Pushed 
latest: digest: sha256:2bf7491d7ac220e8d6bdae7d70bc1b90f0f2c500ebb584e0b3cf24b20b8a2932 size: 1162

方法二:执行docker commit

docker commit 是基于已有的容器创建新的镜像。
示范:(以grafana容器为例)
docker pull grafana/grafana
Using default tag: latest
latest: Pulling from grafana/grafana
35c102085707: Pull complete 
251f5509d51d: Pull complete 
8e829fe70a46: Pull complete 
6001e1789921: Pull complete 
aa5d496c0b92: Pull complete 
edc8d3677179: Pull complete 
d2dabd4d817e: Pull complete 
0b8ff4615528: Pull complete 
99fe97311c2e: Pull complete 
Digest: sha256:f458ea6aaf4b04485bbb86c686a9435e133cefa7644c46513955104a667b2ab1
Status: Downloaded newer image for grafana/grafana:latest

docker  run  -itd  grafana/grafana

通过docker ps -a命令查看容器进程:

[root@docker-bulid test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
464077145a41        grafana/grafana     "/run.sh"           23 seconds ago      Up 22 seconds       3000/tcp            unruffled_mclaren

进入容器:

docker  exec  -it   464077145a41  /bin/bash 

安装插件:

grafana@464077145a41:/usr/share/grafana$ grafana-cli plugins install grafana-piechart-panel
installing grafana-piechart-panel @ 1.3.8
from: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.3.8/download
into: /var/lib/grafana/plugins

✔ Installed grafana-piechart-panel successfully 

Restart grafana after installing plugins . <service grafana-server restart>

grafana@464077145a41:/usr/share/grafana$

退出容器:
输入exit或者ctrl p+q。

提交新镜像:

docker commit   464077145a41  grafana/grafana:new

查看镜像:

[root@docker-bulid test]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
grafana/grafana                  new                 4a2ef37ad41a        4 seconds ago       256MB
test                           latest              5dad1eed56ff        36 minutes ago      780MB
tomcat_test                      latest              7304d31c44fe        About an hour ago   595MB
10.1.1.1/test/tomcat_test   latest              7304d31c44fe        About an hour ago   595MB
centos                           latest              67fa590cfc1c        8 days ago          202MB
grafana/grafana                  latest              a6e14b4109af        13 days ago         253MB 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值