- docker build常用参数
--build-arg=[]
#设置镜像创建的变量
--cpu-shares
#设置cpu权重
-f
#指定要使用dockerfile所在路径
-t
#为容器打上标签
--network
#指定网卡模式
- dockerfile制作
常用命令
FROM =======>指定基础镜像
RUN =======>执行命令
COPY =======>复制上下文中的文件
ADD =======>更高级的复制文件
#如果<源路径>为一个tar压缩文件的话,压缩格式为gzip,bzip2以及xz的情况 下,ADD指令将会自动解压缩这个压缩文件到<目标路径>去
EXPOSE =======>声明容器运行的端口
ENV =======>设置容器内的环境变量
VOLUME =======>指定容器挂载点
USER =======>指定容器中运行的用户
WORKIR =======>指定容器中的工作目录
dockerfile中上下文(Context)的理解
#使用dockerfile中是只需要指定目录就行了,也就是指定的目录以下的文件都可以使用但是类似于(../和/)这种形式的路径dockerfile中不会被识别。
dockerfile中使用COPY和ADD命令在使用的过程中
COPY ./package.json /app/这个是正确的
COPY ../package.json /app或者COPY /opt/xxxx /app无法工作的原因
helloworld-app
├── Dockerfile
└── docker
├── app-1.0-SNAPSHOT.jar
├── hello.txt
└── html
└── index.html
FROM busybox
COPY hello.txt .
COPY html/index.html .
#构建镜像时客户端会先给服务端发送构建上下路径下的内容(即 docker 目录下的文件);
#Dockerfile 可以不在构建上下文路径下;
#Dockerfile 中指令的工作目录是服务端解压客户端传输的 tar 包的路径
#docker中复制只能复制dockerfile目录下中的文件
- docker中的CMD和ENTRYPOINT
CMD格式:
1、CMD 命令 2、CMD ['可执行文件' '参数一' '参数二' ....]
3、CMD ['参数一' '参数二' ...]
#docker中CMD命令只可以写一条,如果写了多条就只会执行最后一条命令。
#Docker不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD指令就是用于指定默认的容器主进程的启动命令的。
#在指令格式上,一般推荐使用exec格式,这类格式在解析时会被解析为JSON数组,因此 一定要使用双引号",而不要使用单引号。
#Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用upstart/systemd去启动后台服务,容器内没有后台服务的概念,其对于容器来说启动服务就是容器的应用进程,docker中的容器是靠着主程序而存在的,当主程序没有了,容器也就么没有了存在的意义了,当把启动服务写成sytemctl start nginx ,其中docker的容器就会把命令理解成sh -c的方式进行执行,执行完成后就会退出,当主程序没有了容器也就会自然没有存在的意义,就会直接退出了。
CMD ping localhost或者使用tail -f sleep、man、top、iostat -t 100 、vmstat -t 100等命令使docker容器不退出。
- ENTRYPOINT入口点
ENTRYPOINT的格式和RUN指令格式一样,分为exec格式和shell格式。
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。 ENTRYPOINT在运行时 也可以替代,不过比CMD要略显繁琐,需要通过docker run的参数--etrypoint来指定。
当指定了ENTRYPOINT后,CMD的含义就发生了改变,不再是直接的运行其命令,而是将CMD的内容作为参数传给ENTRYPOINT指令,换句话说实际执行时,将变为:
ENTRYOINT CMD
也就是说ENTRYPOINT相对于CMD可以传递参数进行重新执行相对应的操作。
- ENV设置环境变量
其中ENV定义变量方法有两种
1、ENV <key> <value>
2、ENV <key1>=<value1> <key2>=<value2>
这里设置过变量后后面的RUN命令可以直接使用这个变量。
ENV VERSION 7.0
RUN echo $VERSION >version.txt
可以这么使用变量,这里可以用在版本升级中。
- ARG构建参数
格式: ARG <参数名>[=<默认值>]
构建参数和ENV的效果一样,都是设置环境变量。所不同的是,ARG所设置的构建环境的 环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使ARG保存密 码之类的信息,因为docker history还是可以看到所有值的。
- VOLUME定义匿名卷
格式为:
1、VOLUME ["<路径1>", "<路径2>"...]
2、VOLUME <路径>
VOLUME /data
这里用作数据持久化,也可以启动容器时进行挂载-v 指定目录就行。
- EXPOSE声明开放端口
书写格式:expose 80
#这里也可以在启动容器时进行指定。
- 实验示例
FROM centos:7
#指定镜像
RUN yum install httpd -y
RUN echo "<html><body><h1>测测试文本</body></html>"/var/www/html/index.html
WORKIR /root
ADD start.sh /
CMD ./start.sh
#注:启动脚本写入以下内容
systemctl start httpd
systemctl start mariadb
systemctl start php-fpm
tail -f
开始制作镜像:
docker build . -t web
#制作完成后使用命令启动容器
docker run -itd --name web web