dockerfile是用来构建镜像的文件!命令参数脚本
构建步骤
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行一个jingxaing
- docker push 发布镜像(dockerHub 阿里云镜像仓库)
基础知识
dockerfile是面向开发的,我们以后要发布项目,做镜像,需要些dockerfile文件,十分简单
Dockerfile:构建文件,定义了一切的步骤,源代码
Dockerimages:通过Dockerfile构建生成的镜像,最终发布和运行产品
Docker容器:容器就是镜像运行起来提供服务的
Dockerfile指令
FROM # 基础镜像,一切从这里构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD #步骤 :tomcat镜像 添加
WORKDIR #镜像的工作目录
VOLUNE # 挂载的目录
EXPOSE #暴露端口
RUN # 运行
CMD #指定这个容器启动的时候要运行的命令
ENTRYPOINT #指定这个容器的启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承Dockerfile 就会运行onbuild 触发指定
COPY # 类似add
ENV #构建的时候设置环境变量
docker hub中 99% 镜像都是从这个基础镜像开始的
实战测试
编写dockerfile文件
[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# cat mydockerfile
FROM centos
MAINTAINER yangsen<838725628@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
# 通过文件构建镜像
dockers build -f dockerifle文件路径 -t 镜像名:[tag] .
[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker build
-f mydockerfile -t mycentos:0.1 .
返回
Successfully built a72be511a71a
Successfully tagged mycentos:0.1
测试
可以列出本地镜像变更历史
docker history
测试cmd
vim cmd-test
FROM centos
CMD ["ls","-a"]
[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker build
-f dockerfile-cmd-test/cmd-test -t cmdtest .
# run运行 命令生效
[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker run bb3593814fbe
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]#
实战tomcat镜像
准备镜像文件 tomcat压缩包 jdk压缩包
编写dockerfile文件
官方命名Dockerfile
build的时候就不需要 -f 指令
MAINTAINER yangsen<838725628@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.46.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORK $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.291
ENV CALSSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.46
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.46
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.46/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.46/bin/logs/catalina.out
构建镜像docker build -t diytomcat .
启动[root@iZbp1d0213clo5fn6z0fsfZ yangsen]# docker run -d -p 3344:8080 --name yangtomcat -v /home/yangsen/tomcat/test:/usr/local/apache-tomcat-9.0.46/webapps/test -v //home/yangsen/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.46/logs diytomcat
发布镜像
登录
[root@iZbp1d0213clo5fn6z0fsfZ /]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
[root@iZbp1d0213clo5fn6z0fsfZ /]#
提交镜像
[root@iZbp1d0213clo5fn6z0fsfZ /]# docker push yangsen/diytomcat:1.0
[root@iZbp1d0213clo5fn6z0fsfZ /]# docker tag 1cd48e02549a yangsen/tomcat:1.0
构建参数和环境变量
区别
arg只存在于镜像构建,构建完成之后不会保存在镜像,无法使用比那辆
docker image build -f arg-demo -t arg-3.0 —build-arg VERSION=2.0.0.2
—build-arg 会替换file里面的arg变量的内容
env 构建可以使用,作为环境变量永久保存在容器里面
ENV
ARG
容器启动命令
设置容器启动时的默认会执行的命令
docker system prune -f 删除所有已经退出停止的容器
docker image prune -a 删除没有使用的镜像
区别
- cmd设置的命令,可以在run时候传入其他命令,覆盖掉cmd命令,但是entrypoint所设置的命令一定会执行
- 可以联合使用,entrypoint设置执行的命令,cmd设置参数
CMD
ENTRYPOINT