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 vim
2、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 param2
CMD
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/dirent
9、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
bash
12、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.
FROM ubuntu:14.04.
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
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 minutes ago 206MB
6、启动构建成功的镜像
[root@localhost web-nginx]# docker run -dit -p : 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" seconds ago Up seconds 0.0.0.0:->/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
DockerFile服务的更多相关文章
- Docker(2):使用Dockerfile创建支持SSH服务的镜像
1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...
- 构建一个可以统计 qps 的nginx服务的Dockerfile
github 项目地址: https://github.com/SilentCC/nginx_lua_qps_count nginx 是经常会用到的web 服务器,它有出色的并发性能,因此尝尝被用来当 ...
- 使用Dockerfile创建支持SSH服务的镜像
1.前面我们学习了使用Dockerfile,那接下来我们就用Dockerfile创建一个支持SSH服务的镜像. 2.首先创建一个目录ssh_centos [root@rocketmq-nameserv ...
- docker基于Dockerfile命令创建支持ssh服务的镜像
首先,创建一个sshd_centos工作目录: [root@localhost ~]# mkdir sshd_centos [root@localhost ~]# cd sshd_centos [ro ...
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...
- 利用Dockerfile文件创建带有sshd服务的centos镜像
利用Dockerfile文件创建带有sshd服务的centos镜像 标签:dockerfile 1.安装docker并启动docker,不在赘述 2.创建使用Dockerfile安装sshd服务的目录 ...
- 「两」创建一个带 ssh 镜座服务(修订版)--采用 Dockerfile 创
创建目录 首先,创建一个叫做 sshd_ubuntu 的目录,用于存放我们的 Dockerfile .脚本文件.以及其它文件. $ mkdir sshd_ubuntu $ ls sshd_ubuntu ...
- 使用Dockerfile创建ssh服务的镜像02
使用Dockerfile创建ssh服务的镜像02 1:创建工作目录---一个镜像的所有文件都放这个目录下 ubuntu@ubuntu:~$ mkdir sshd_ubuntu ubuntu@ubunt ...
- docker Dockerfile学习---nginx负载均衡tomcat服务
1.此过程在nginx的基础上,也就是上篇博客写的内容. 2.创建项目目录并上传包,解压 $ mkdir centos_tomcat $ cd centos_tomcat $ tar zxvf jdk ...
随机推荐
- Python 3.5 in win10 pip install Orange3
http://www.lfd.uci.edu/%7Egohlke/pythonlibs/ 下载Orange3 以及 依赖包 注意网页上标出的Orange 的依赖,以及 https://github.c ...
- LeetCode - Number of Recent Calls
Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...
- 一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)
Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到C ...
- Coding kata: get the top two teams in one group
In this week, we did a coding kata, the subject is to select the top two teams of football group mat ...
- AI 学习
极简状态机: /* 脚本名称: 脚本作者: 建立时间: 脚本功能: 版本号: */ using UnityEngine; using System.Collections; namespace Voi ...
- quartz.net实现集群部署的笔记
一..表信息 QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括Cron表达式和 ...
- java自学总结
经过了一段时间的java学习,感觉自己在编程方面还只是一个初学者,感觉学会了c,在学c++的时候就是以c为基础,java应该也是以c或者c++为基础,但是并非如此,java和c++虽然有一些相似之处, ...
- git刚初始化项目的操作
# Command line instructions ## Git global setup git config --global user.name "iback" git ...
- Window下Tomcat单机部署多应用
1. 新增tomcat相关环境变量 如上图,有两个tomcat,tomcat1和tomcat2 2.修改catalina.bat 文件 第一个tomcat不变 第二个tamcat的catalina.b ...
- Maven+Eclipse+SparkStreaming+Kafka整合
版本号: maven3.5.0 scala IDE for Eclipse:版本(4.6.1) spark-2.1.1-bin-hadoop2.7 kafka_2.11-0.8.2 ...