DockerFile

目录

什么是DockerFile

DockerFile构建过程

DockerFile指令

1、编写DockerFile

2、构建

3、运行

4、列出镜像地的变更历史

将镜像推送至阿里云

使用docker部署一个vue项目


大家想想,Nginx,tomcat,mysql 这些镜像都是哪里来的?官方能写,我们不能写吗?

我们要研究自己如何做一个镜像,而且我们写的微服务项目以及springboot打包上云部署,Docker就是最方便的。

微服务打包成镜像,任何装了Docker的地方,都可以下载使用,极其的方便。

流程:开发应用=>DockerFile=>打包为镜像=>上传到仓库(私有仓库,公有仓库)=> 下载镜像 => 启动运行。

还可以方便移植!

什么是DockerFile

dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

构建步骤:

1、编写DockerFile文件

2、docker build 构建镜像

3、docker run

dockerfile文件我们刚才已经编写过了一次,这里我们继续使用 centos 来看!

地址:https://hub.docker.com/_/centos

 

DockerFile构建过程

基础知识:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、# 表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

流程:

1、docker从基础镜像运行一个容器

2、执行一条指令并对容器做出修改

3、执行类似 docker commit 的操作提交一个新的镜像层

4、Docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令直到所有指令都执行完成!

说明:

从应用软件的角度来看,DockerFile,docker镜像与docker容器分别代表软件的三个不同阶段。

DockerFile 是软件的原材料 (代码)

Docker 镜像则是软件的交付品 (.apk)

Docker 容器则是软件的运行状态 (客户下载安装执行)

DockerFile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可!

DockerFile:需要定义一个DockerFile,DockerFile定义了进程需要的一切东西。DockerFile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace的权限控制)等等。

Docker镜像:在DockerFile 定义了一个文件之后,Docker build 时会产生一个Docker镜像,当运行 Docker 镜像时,会真正开始提供服务;

Docker容器:容器是直接提供服务的。

DockerFile指令

关键字:

FROM         # 基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER   # 镜像维护者的姓名混合邮箱地址

RUN          # 容器构建时需要运行的命令

EXPOSE       # 当前容器对外保留出的端口

WORKDIR      # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点

ENV          # 用来在构建镜像过程中设置环境变量

ADD          # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY         # 类似ADD,拷贝文件和目录到镜像中!

VOLUME       # 容器数据卷,用于数据保存和持久化工作

CMD          # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最 后一个生效!

ENTRYPOINT   # 指定一个容器启动时要运行的命令!和CMD一样

ONBUILD      # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的

ONBUILD被触发

1、编写DockerFile

查看下官方默认的CentOS的情况:

目的:使我们自己的镜像具备如下:登陆后的默认路径、vim编辑器、查看网络配置ifconfig支持

准备编写DockerFlie文件

vim dockerfile-centos
FROM centos:7
MAINTAINER samve<415904507@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

注:FROM centos:7一定是7,否则容易出错。

2、构建

docker build -f dockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  114.1MB
Step 1/10 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/10 : MAINTAINER 415904507<415904507@qq.com>
 ---> Using cache
 ---> 9a320d0416bb
Step 3/10 : ENV MYPATH /usr/local
 ---> Using cache
 ---> dcf1685caa60
Step 4/10 : WORKDIR $MYPATH
 ---> Using cache
 ---> 555756a8a198
Step 5/10 : RUN yum -y install vim
 ---> Using cache
 ---> 62a061904f8f
Step 6/10 : RUN yum -y install net-tools
 ---> Using cache
 ---> ba3f980bb446
Step 7/10 : EXPOSE 80
 ---> Using cache
 ---> 5611f8e653bb
Step 8/10 : CMD echo $MYPATH
 ---> Using cache
 ---> c957884dbe83
Step 9/10 : CMD echo "----------end--------"
 ---> Using cache
 ---> 54f1f84e4ad5
Step 10/10 : CMD /bin/bash
 ---> Using cache
 ---> 65a608b84899
Successfully built 65a608b84899
Successfully tagged mycentos:0.2

3、运行

docker run -it 新镜像名字:TAG
[root@host-131 samve]# docker run -it mycentos:0.1
[root@b2b5613582b6 local]# pwd
/usr/local
[root@b2b5613582b6 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 23  bytes 2829 (2.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4、列出镜像地的变更历史

docker history 镜像名
[root@b2b5613582b6 local]# exit
exit
[root@host-131 samve]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     0.1       65a608b84899   12 minutes ago   656MB
mycentos     0.2       65a608b84899   12 minutes ago   656MB
tomcat2      1.0       6d21d932e65c   11 days ago      478MB
tomcat       latest    2362f0cdbf14   2 weeks ago      474MB
centos       7         eeb6ee3f44bd   17 months ago    204MB
[root@host-131 samve]# docker history mycentos:0.2
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
65a608b84899   12 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
54f1f84e4ad5   12 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
c957884dbe83   12 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
5611f8e653bb   12 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
ba3f980bb446   12 minutes ago   /bin/sh -c yum -y install net-tools             199MB     
62a061904f8f   12 minutes ago   /bin/sh -c yum -y install vim                   254MB     
555756a8a198   16 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
dcf1685caa60   16 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
9a320d0416bb   16 minutes ago   /bin/sh -c #(nop)  MAINTAINER 415904507<4159…   0B        
eeb6ee3f44bd   17 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      17 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      17 months ago    /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB 

将镜像推送至阿里云

 1、登录阿里云,选择【容器镜像服务】:

2、点击【个人实例】:

3、创建命名空间:

4、创建镜像仓库:

5、进入管理界面按提示操作即可:

使用docker部署一个vue项目

1、创建nginx配置文件default.conf

server {
    listen       80;
    server_name  localhost; # 修改为docker服务宿主机的ip

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

root /usr/share/nginx/html:这个目录和下面创建的Dockerfile中目录要保持一致

2、创建Dockerfile

FROM nginx:1.20.2

MAINTAINER test

RUN rm /etc/nginx/conf.d/default.conf

ADD default.conf /etc/nginx/conf.d/

COPY dist/ /usr/share/nginx/html
  • FROM nginx -- 打包容器的底层来刚才先拉取的nginx
  • MAINTAINER beizhu:备注
  • RUN rm /usr/local/nginx/conf/nginx.conf.default:删除目录下的nginx.conf.default 文件
  • ADD nginx.conf.default /usr/local/nginx/conf/:将default.conf复制到/usr/local/nginx/conf/下,用本地的default.conf配置来替换nginx镜像里的默认配置
  • COPY dist/ /usr/local/nginx/html/:将项目根目录下dist文件夹(构建之后才会生成)下的所有文件复制到镜像/usr/local/nginx/html/目录下上一步root地址

构建vue项目

npm run build

 打包docker镜像image

docker build -f Dockerfile -t vue-pro:1.0 .

本地试运行

docker run -d -p 9090:80 --name vue-pro vue-pro:1.0

-d -- 后台方式启动

-p -- 端口映射 9090本地端口 80docker端口

本地访问127.0.0.1:9090发现正常访问

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值