Docker系列(DockerFile)

329 阅读3分钟

DockerFile

DockerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build构建成为一个镜像

3、docker run运行

4、docker push 发布镜像 (DockerHub 阿里云镜像仓库)

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

官方镜像包比较简单 很多时候需要自己做镜像。

DockerFile构建过程

基础知识:

1、每个保留关键字必须是大写字母

2、执行从上到下

3、# 表示注释

4、每一个指令都属于镜像层

DockerFile相对简单,成为企业交付的标准。

DockerFile指令

指令描述备注
FROM基础镜像centos
MAINTAINER作者ljchengx
RUN编译镜像时运行的脚本
ADD编译镜像时复制文件到镜像中类似于tomcat压缩包
WORKDIR镜像的工作目录
VOLUME设置容器的挂载卷
EXPOSE设置镜像暴露的端口
CMD设置容器的启动命令只有最后一个生效
ENTRYPOINT设置容器的启动命令可追加
ONBUILD设置镜像的ONBUILD指令
COPY将文件拷贝在镜像中
ENV构建时设置环境变量

实战测试

FROM scratch  # DockerHub中 大多数镜像 基于scratch

创建一个centos

# 编写文件
FROM centos
MAINTAINER ljchengx<759990553@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

# 构建镜像
docker build -f mydockerfile -t mycentos:0.1 .

# 测试运行
# 启动 
[root@VM-0-11-centos dockerfile]# docker run -it mycentos:0.1

vim 指令 ifconfig指令都可用

image-20210310165120538

查看docker镜像构建历史

image-20210310171047551

实战:制作Tomcat镜像

1、准备镜像文件 tomcat 压缩包 jdk

# 准备工作
[root@VM-0-11-centos tomcat]# ls
apache-tomcat-9.0.43.tar.gz  jdk-8u281-linux-x64.tar.gz

2、编写dockerfile文件 官方名称 Dockerfile 默认使用 命令直接找到 不用指定

FROM centos
MAINTAINER ljchengx  # 作者
COPY readme.text /usr/local/readme.txt # 复制一个文件
ADD jdk-8u281-linux-x64.tar.gz /usr/local/  # ADD 可以自动完成解压处理
ADD apache-tomcat-9.0.43.tar.gz /usr/local/ 
RUN yum -y install vim  # 安装vim
ENV MYPATH /usr/local # 定义容器内路径
WORK $MYPATH # 指定上面定义的路径为工作路径
ENV JAVA_HOME /usr/local/jdk1.8.0_281 # 设置java环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43 # 设置tomcat环境变量
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.43
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080 # 暴露内部8080端口
CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.43/bin/logs/catalina.out # 执行命令 

3、构建镜像

[root@VM-0-11-centos tomcat]# docker build -t diytomcat .

构建完成查看已经生成成功!

image-20210311160149072

4、运行

# docker run -d -p 9090:8080 --name ljchengxtomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.43/logs diytomcat

# 启动后发现 成功 并且挂载成功
[root@VM-0-11-centos tomcat]# docker run -d -p 9090:8080 --name ljchengxtomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.43/logs diytomcat
d97affb4d1d08fe19dd72de4b181e4c8340d5534c7aae349c44e6aeac1535576
[root@VM-0-11-centos tomcat]# ls
apache-tomcat-9.0.43.tar.gz  Dockerfile  jdk-8u281-linux-x64.tar.gz  logs  readme.txt  test

# 随便写个简单的页面 发现网站访问正常

image-20210311163541588

发布镜像

发布DockerHub

1、注册DockerHub账号

2、登录账号

3、Linux也需要登录

[root@VM-0-11-centos tomcat]# 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 

4、发布

# docker push diytomcat

# 修改标签
[root@VM-0-11-centos tomcat]# docker tag 613b591c146d ljchengx/tomcat
[root@VM-0-11-centos tomcat]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
diytomcat         latest    613b591c146d   53 minutes ago   640MB
ljchengx/tomcat   latest    613b591c146d   53 minutes ago   640MB
mycentos          0.1       6e3f53d5b8d2   25 hours ago     291MB
ljchengx/centos   1.0       3e09855b2bc7   26 hours ago     209MB
nginx             latest    f6d0b4767a6c   8 weeks ago      133MB
centos            latest    300e315adb2f   3 months ago     209MB

# [root@VM-0-11-centos tomcat]# docker push ljchengx/tomcat

发布到阿里云

1、创建命名空间

image-20210311172144547

2、创建镜像仓库image-20210311172155949

3、登录推送

[root@VM-0-11-centos tomcat]# docker tag 613b591c146d registry.cn-hangzhou.aliyuncs.com/ljchengx/ljchengx:1.0
[root@VM-0-11-centos tomcat]# docker push registry.cn-hangzhou.aliyuncs.com/ljchengx/ljchengx:1.0

参考阿里云:

image-20210311172650693