DockerFile服务
Dockerfile分为四部分:基础镜像信息、镜像创建者信息、镜像操作指令、容器启动执行指令。
一、Dockerfile的书写规则及指令使用方法
Dockerfile的指令是忽略大小写的,建议使用大写,使用 # 作为注释,每一行只支持一条指令,每条指令可以携带多个参数。
Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。
构建指令用于构建image,其指定的操作不会在运行image的容器上执行;
设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。
1、FROM(指定基础image)
该指令有两种格式:
FROM <image> 指定基础image为该image的最后修改的版本。或者:FROM <image>:<tag>
指定基础image为该image的一个tag版本。RUN后面接要执行的命令,比如,我们想在镜像中安装vim,只需在Dockfile中写入 RUN yum install -y vim2、MAINTAINER(用来指定镜像创建者信息)
格式:
MAINTAINER <name>3、RUN(安装软件用)
该指令有两种格式:
RUN <command> RUN ["executable", "param1", "param2" ... ] 4、CMD(设置container启动时执行的操作)
该指令有三种格式:CMD ["executable","param1","param2"]CMD command param1 param2当Dockerfile指定了ENTRYPOINT,那么使用下面的格式:CMD ["param1","param2"]5、ENTRYPOINT(设置container启动时执行的操作)
两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2CMD echo “Hello, World!” ENTRYPOINT ls -l FROM ubuntu CMD ["-l"] ENTRYPOINT ["/usr/bin/ls"] 6、USER(设置container容器的用户)
指定memcached的运行用户
ENTRYPOINT ["memcached"]
USER daemon
或者
ENTRYPOINT ["memcached", "-u", "daemon"]
7、EXPOSE(指定容器需要映射到宿主机器的端口)
格式:EXPOSE <port> [<port>...] 映射一个端口
EXPOSE port1
相应的运行容器使用的命令
docker run -p port1 image
映射多个端口
EXPOSE port1 port2 port3
相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
还可以指定需要映射到宿主机器上的某个端口号
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
8、ENV(用于设置环境变量)
格式:ENV <key> <value> 设置了后,后续的RUN命令都可以使用,container启动后,可以通过docker inspect查看这个环境变量,也可以通过在docker run --env key=value时设置或修改环境变量。假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:
ENV JAVA_HOME /path/to/java/dirent9、ADD(从src复制文件到container的dest路径)
格式:ADD <src> <dest> <src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url;
<dest> 是container中的绝对路径10、COPY指令
COPY指令和ADD指令功能和使用方式类似。只是COPY指令不会做自动解压工作。11、VOLUME(指定挂载点)
格式:VOLUME ["<mountpoint>"]例如:
FROM base VOLUME ["/tmp/data"]运行通过该Dockerfile生成image的容器,/tmp/data目录中的数据在容器关闭后,里面的数据还存在。例如另一个容器也有持久化数据的需求,且想使用上面容器共享的/tmp/data目录,那么可以运行下面的命令启动一个容器:docker run -t -i -rm -volumes-from container1 image2 bash12、WORKDIR(切换目录)
设置指令,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效。格式:WORKDIR /path/to/workdir 在/p1/p2下执行vim a.txt
WORKDIR /p1 WORKDIR p2 RUN vim a.txt
13、ONBUILD(在子镜像中执行)
格式:ONBUILD <Dockerfile关键字> 二、dockerfile使用实例
1、创建构建镜像的工作目录
# mkdir web-nginx
# cd web-nginx/
2、配置DNS和YUM源
3、编写dockerfile文件,填写镜像内容
# vi Dockerfile
#Version:0.0.1 FROM ubuntu:14.04.3 MAINTAINER djl "djl@cnbicnbisoft.com" RUN apt-get install -y nginx RUN echo 'Hi,I am in your container' > /usr/share/nginx/html/index.html EXPOSE 80
4、构建新镜像
# docker build -t djl/web-nginx:v1 .

5、查看镜像是否在本地
[root@localhost web-nginx]# [root@localhost web-nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE djl/web-nginx v1 55fce17de945 5 minutes ago 206MB
6、启动构建成功的镜像
[root@localhost web-nginx]# docker run -dit -p 8010:80 djl/web-nginx:v1 /bin/bash 5915c4392c39a7912c7c63dbc1d751fab042cf4b0d86893bcc623b5cf65e38bb [root@localhost web-nginx]#
7、进入容器内启动nginx服务
[root@localhost web-nginx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5915c4392c39 djl/web-nginx:v1 "/bin/bash" 33 seconds ago Up 32 seconds 0.0.0.0:8010->80/tcp dreamy_neumann [root@localhost web-nginx]# [root@localhost web-nginx]# docker exec -it 5915c4392c39 /bin/bash root@5915c4392c39:/# root@5915c4392c39:/# ./usr/sbin/nginx root@5915c4392c39:/#
8、通过网页查看容器的nginx服务

参考博客:
https://www.cnblogs.com/kevingrace/p/6698596.html
浙公网安备 33010602011771号