diff --git a/Demo/Dockerfile b/Demo/Dockerfile new file mode 100644 index 0000000..75e4d0f --- /dev/null +++ b/Demo/Dockerfile @@ -0,0 +1,4 @@ +# 注释: Dockerfile学习镜像 +FROM busybox +ENV file=app +ADD ./project/ /usr/local/$file/ \ No newline at end of file diff --git a/Demo/images/DockerBuild.png b/Demo/images/DockerBuild.png new file mode 100644 index 0000000..eee5366 Binary files /dev/null and b/Demo/images/DockerBuild.png differ diff --git a/Demo/images/build.png b/Demo/images/build.png new file mode 100644 index 0000000..cefc98c Binary files /dev/null and b/Demo/images/build.png differ diff --git a/Demo/images/build2.png b/Demo/images/build2.png new file mode 100644 index 0000000..0e34ee0 Binary files /dev/null and b/Demo/images/build2.png differ diff --git a/Demo/images/构建流程示意图.drawio b/Demo/images/构建流程示意图.drawio new file mode 100644 index 0000000..801df62 --- /dev/null +++ b/Demo/images/构建流程示意图.drawio @@ -0,0 +1 @@ +7Vlbd6M2EP41eowPd8OjZeNt2nRPerJtuk85CpZBDSBWiNjeX98RCAM2uW6z3j0pfjAaDUKa+eYbjUD2PNt+EKRIfucrmiLLWG2RvUCWZbmuC39KstMSx7QaSSzYqpGZneCKfaVaaGhpxVa0HChKzlPJiqEw4nlOIzmQESH4Zqi25unwrQWJ6ZHgKiLpsfSarWTSSH1r2sl/oSxO2jebXtD0ZKRV1ispE7Lim57IDpE9F5zL5i7bzmmqrNfa5fp8d51e3Hkffv2j/EL+xL99+vjXWTPY8iWP7JcgaC5fPfT97iMVZ/jqc+WI81lA8dfw9qw1wz1JK20wvVi5ay0oeJWvqBrFRDbeJEzSq4JEqncDoAFZIrNUd695LjUI7LY95ykX9Vj2cunBBXL9Wiok3R446olVmnvTA2gpz6gUO3hOj2Lb2lsar2emrwWbzvum4Wph0nP9tNUkGnLxfvTOrHCjLfsCK0+PbEpXAFLd5EImPOY5ScNOijurG9DqdC44L7St/6FS7rSxSSX5t3hCTegVfoBF8UpE9JHFt0FPREzlI3reuF8FTYlk98PJ/eceMo/CYMGjOyrWDJxheSlMHN+KgQ+9L5WK/NquZ2Vt6Bko2Gaxra3a9sNdLPd27mFAgZ8BUV2QW5pe8pJJxnPouuVS8mzozFZ3lrJY6UgFAkx0KwJPUfArLqXgd7T1cs5zhSRYQ9pzvGHgcGkp5YQUairZNlbcPyFfK0EnZSRYIW/qhdu44EwNHd7DG8pHgNVi+RQh7x1E/HQk4L2ReDedt4p35xTxDiYUu7/V8xO3bX7u9y22evCmteu3LqlgsHYFolr4o5CH9Z3IQz96qeDeIcsxnQG0TNeaOEHvGg7YzFKPcQCh/aRejyrLfs9p5LlIaFx2qjxiPb2dKu+ojBLtEFIWzaZ3zbbKS33L19xbT9DFyF2M8T3L6t1v30mm1ckXLIthGSm7VYspIwK5bNkktkl5H5+Cq60hWdsjZG2ZwcQ1R/j6zfZnpntawu7TdY+9f0bC9n6KMPUe2O6BbH5xfgSGntN4JVOWwxarrVaNB2qig11XEKzhGtt1iSiBcJXUnpCiSGGT12wDMbQ+7WrVQvBICZSmFu3Bd/KCyzGGEe2OBLQ3Es2W8VbRbAXvOU/632nH9E0u8o/TZDhFMx/5GIUuwjPkL1HoocBD/hSFDsIYYe/xVDpWquyPbJTCipTJ3sM9zz2naHIN9QN5elCs7VPxk9XceAk3yifHdd0BafD1mkV0EvEsq3JNGeWkijJyMySR07PDgBz2Qd+vzfyx2sx+M3Y4htE7Yoe2oHmSHtxT0kM7y7H83D+N0QcrwBizEPm+Ygx/hmZOTR1z5C9Ul5KYKPQRXqIAdzzzf5J/fhhPgx8tybsjhVYDDGWb5xzUWXaxHTmla7IONuobQJVTJySschJAJ5jVkgAFrkKYgpetcpV+Nyylef0DR36DhDWKsgPPwm+prIIBRytGuz6dpoa5q//AATTXaw3NQRZ8ZdI6yk/jTFeXov3TwdGK9yhWNqUzEbShsvOoDhNoNndDLRBJAiYUN/Ybgt80pgdZbOyTwugJo/dy+EOz+6TUHB11X+bs8F8= \ No newline at end of file diff --git a/Demo/project/1.txt b/Demo/project/1.txt new file mode 100644 index 0000000..bb101cd --- /dev/null +++ b/Demo/project/1.txt @@ -0,0 +1 @@ +1版内容 \ No newline at end of file diff --git a/Demo/project/2.txt b/Demo/project/2.txt new file mode 100644 index 0000000..25dd7b7 --- /dev/null +++ b/Demo/project/2.txt @@ -0,0 +1 @@ +我是第2版的内容 \ No newline at end of file diff --git a/Demo/project/3.txt b/Demo/project/3.txt new file mode 100644 index 0000000..1825664 --- /dev/null +++ b/Demo/project/3.txt @@ -0,0 +1 @@ +第3版的内容 \ No newline at end of file diff --git a/Dockerfile.md b/Dockerfile.md new file mode 100644 index 0000000..be897a1 --- /dev/null +++ b/Dockerfile.md @@ -0,0 +1,164 @@ +# Docker镜像学习 + +## 镜像构建流程 + +![构建镜像](images/DockerBuild.png) + +## 构建镜像的三种方法 + ++ 基于已有容器,使用 `docker commit` 命令构建 + + ``` + # 1 创建容器,执行相关操作,之后退出 + docker run -it ubuntu:18.04 /bin/bash + docker exec -it xxxxxxxx + + # 2 基于该容器使用构建新的镜像 + docker commit -m "new_image" -a "cnLinuxer" b66 myubuntu:v1 + + 参数解释: + -m选项指定了新镜像的提交信息 + -a标注作者信息 + b66是容器ID + myubuntu:v1是指定的新镜像名称。 + + # 3 使用新镜像 + docker images + docker run -it ubuntu:18.04 /bin/bash + ``` + + + ++ 基于本地模板,使用 `docker import ` 导入 + + ``` + # 1 将现有容器,导出为模板文件 + docker export b66 > /root/myubuntu.tar + + # 2 模板文件导入为镜像 + docker import /root/myubuntu.tar ruyu/ubuntu:18.04 + + # 3 使用新镜像 + docker images + docker run xxxx + ``` + + + ++ 基于Dockerfile文件,使用 `docker build` 构建 + + ```tex + # 1 编写Dockerfile文件 + + 文件内容示例 + + #指定父镜像 + FROM centos:7.5.1804 + + #指定维护者信息 + MAINTAINER mynginx + + #将本地nginx软件包上传至容器/usr/local/下 + ADD nginx-1.11.1.tar.gz /usr/local + + #yum安装依赖软件 + RUN yum -y install vim wget gcc gcc-c++ make openssl-devel pcre-devel + + #进入nginx工作目录 + WORKDIR /usr/local/nginx-1.11.1/ + + #编译并安装nginx服务 + RUN ./configure --prefix=/usr/local/nginx && make && make install + + #关闭nginx后台运行 + RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf + + #添加nginx的环境变量 + ENV PATH /usr/local/nginx/sbin:$PATH + + #将容器的80端口映射出来 + EXPOSE 80 + + #执行nginx命令,启动nginx + CMD ["nginx"] + + # 2 docker build 构建镜像 + docker build -f Dockerfile -t mynginx:v1 . + ``` + + + +## 构建过程(docker build -f Dockerfile -t name .) + +> docker是c/s架构,c为docker cli,s为驻守服务进程。 +> docker build 构建镜像时,cli只负责把命令和相文件传递给服务进程,服务程序接收命令和文件、创建构建上下文、执行构建并产出镜像。 + +![build](images/build2.png) + + + +## 构建环境 + +1. Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 +2. Dockerfile中相对路径默认都是Dockerfile所在的目录 +3. 因Docker构建的分层构建,联合挂载的特性,Dockerfile中,每一条指令被视为一层,尽量一行写多个指令(&&连接 \用来分行)。 +4. 约定:指令大写,内容小写 + + + +## Dockerfile文件 + +>Dockerfile是用来定制镜像的文本文件,内容为构Docker建镜像的一条条指令,由Docker build 命令使用,构建Docker镜像。 + +## 文件组成 + +> \# 开头的为注释行 +> +> 通常包含4部分:基础镜像信息、维护者信息、 镜像操作指令和容器启动时执行指令,新版“维护者信息”放在LABLE中指定 +> +> 执行:按照Dockerfile指令顺序,从上到下依次执行。 + +```dockerfile +# 这是一个示例Dockerfile文件 +FROM busybox +MAINTAINER username +ENV file=app +ADD ./project/ /usr/local/$file/ +``` + +## 命令 + ++ FROM + +> FROM 指令必须是非注释的第一个指令, 可以使用 “ AS 别名” 提供别名,在路另外使用( --from)。 +> +> 指定了基础镜像,后面的所有指令都是运行在该基础镜像环境上的。 +> +> 如果不以任何镜像为基础,那么写法为:FROM scratch + +```dockerfile +#语法格式 +FROM +FROM : +FROM @ + +# 特殊例子 +#不以任何镜像为基础(内置空白镜像) +FROM scratch + +# busybox是一个软件工具箱镜像,集成了linux中几百个常用的linux命令以及工具。 +# 大小只有1.2M,适合用来测试 +FROM busybox + +# .net core例子 +# .net core sdk +mcr.microsoft.com/dotnet/sdk:2.1 AS build +``` + +## run + +``` +# /bin/sh -c 参数 +-c 参数:把后面的命令(字符串)当成一个整体来执行 +``` +