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 ...
随机推荐
- 《DSP using MATLAB》Problem 5.22
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% O ...
- 【vue】vue前端项目结构
[一]项目结构 [二]项目结构释意 目录/文件 说明 build 项目构建(webpack)相关代码 config 配置目录,包括端口号等.我们初学可以使用默认的. node_modules npm ...
- 对《禁忌搜索(Tabu Search)算法及python实现》的修改
这个算法是在听北大人工智能mooc的时候,老师讲的一种局部搜索算法,可是举得例子不太明白.搜索网页后,发现<禁忌搜索(Tabu Search)算法及python实现>(https://bl ...
- MySQL Innodb Engine --独立表空间参数(innodb_file_per_table)
MySQL中参数innodb_file_per_table决定将表存放于ibdata*的共享表空间还是独立的.ibd文件的独立表空间. ================================ ...
- 关于kafka的新的group无法订阅到topic中历史消息的问题
今天在写kafka的java api例子时候,遇到一个问题,比如我创建了一个test主题,往里面写了1,2,3,4,5条消息,在这个时候,我用一个新的group启动了一个消费者,发现该消费者只能读到5 ...
- Nginx可以做什么?看完这篇你就懂了
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 —— ...
- input 修改placeholder颜色
一般来说input的placeholder是不能修改的,但是现在浏览器利用伪类实现了对placeholder的修改 input::-webkit-input-placeholder { // cher ...
- VMware下ubuntu与Windows实现文件共享的方法 (转)
最近安装caffe需要将Windows下文件拷贝到ubuntu16.04下,就进行了共享文件夹的设置,期间遇到一些困难,记录下来,方便以后遇到此类问题不再困惑. (记录只为更好的分享) 言归正传: 1 ...
- RedHat7.3创建本地yum源
[root@master ~]# mkdir -p /var/www/html 使用安装系统的ISO镜像文件rhel-server-7.3-x86_64-dvd.iso 把rhel-server-7. ...
- NVMe标准规范
NVMe NVM Express(NVMe),或称非易失性内存主机控制器接口规范(Non-Volatile Memory express),,是一个逻辑设备接口规范.他是与AHCI类似的.基于设备逻辑 ...