1.Dockerfile基本指令
dockerfile的指令主要可以汇总为如下,使用dockerfile的前提是学习会这些指令的基本使用,具体如下: • FROM #指令基础镜像 • MAINTAINER #指定维护者/作者信息,也可以没有 • RUN #具体执行的操作,在命令前面加上RUN即可 • ADD #COPY文件,会自动进行解压 • WORKDIR #设置当前工作目录 • VOLUME #设置卷,挂载主机目录 • EXPOSE #指定对外的端口 • CMD #指定容器启动后需要干的事情 • COPY #复制文件 • ENV #环境变量 • ENIRYPOINT #容器启动后执行的命令
2.Dockerfile概述
使用dockerfile主要是用于构建docker镜像文件信息,相当于一个脚本,通过dockerfile自己的指令,来构建软件依赖,文件依赖,存储等等情况。
Dockerfile使用
在docker中创建镜像可以分为两个方法,这两个方法具体可以总结为如下:
• 手动修改容器内容,然后docker commit提交容器为新的镜像文件
• 通过在dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依次添加层,最终生成一个新的镜像,这样就极大的简化了部署的工作。
3.Dockerfile组成部分
dockerfile的主要组成部分可以汇总为:
• 基础镜像信息
• 基础的维护者/作者(可以没有)
• 制作镜像操作指令 RUM
• 容器启动时执行指令CMD["/bin/bash"]
4.创建镜像
我们在本地磁盘创建一个名称为Dockerfile_share的文件来创建自己的Dockerfile,我的文件路径为:F:\Docker\learnDocker #注意一个文件夹下只能有一个Dockerfile文件
文件内容为:
#Dockerfile基于centos版本为7.8.2003的镜像
FROM centos:7.8.2003
#镜像的作者/维护者
MAINTAINER 特昂糖
#定义一个变量,变量的值是Docker
ENV name Docker
#运行程序,输出变量的值
ENTRYPOINT echo "Hello $name"
cmd控制台进入到learnDocker的文件夹,运行下面的命令来创建镜像:
docker build -t centos_name -f Dockerfile_share .
#-t 镜像的名称及信息,-f 指定文件,“.” 是 Dockerfile 所在的路径(当前目录)
[+] Building 0.1s (5/5) FINISHED
=> [internal] load build definition from shareDocker 0.0s
=> => transferring dockerfile: 291B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:7.8.2003 0.0s
=> CACHED [1/1] FROM docker.io/library/centos:7.8.2003 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:6bd0ccebaae64e32941cc73fcded0bd0a855658da19b05f5d01c9427d8772 0.0s
=> => naming to docker.io/library/centos_share 0.0s
查看镜像
F:\Docker\learnDocker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6987c8d6ed5 5 days ago 141MB
alpine/git latest c6b70534b534 5 weeks ago 27.4MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
centos 7.8.2003 afb6fca791e0 19 months ago 203MB
centos_name latest 5b25220f403c 19 months ago 203MB
centos_share latest 6bd0ccebaae6 19 months ago 203MB
运行镜像
docker run -t --rm centos_share
容器输出:
Hello Docker
5.环境部署流程
5.1jar包的环境部署
环境的部署一般分为两种:
1.开发直接给jar包,需要自己搭建镜像,搭建完成运行
2.开发把镜像搭建好导出给测试,测试导入直接运行即可
#下面我们来演示测试根据开发给的jar包来构建镜像,镜像的导入方式之前有说过,详文见Docker镜像的操作
- 开发编写完代码进行自测并发给测试
- 测试编写Dockerfile来构建镜像
FROM centos:7.8.2003 FROM java:8 MAINTAINER 特昂糖 #复制文件到容器目录 COPY app-0.0.1-SNAPSHOT.jar /opt #切换目录 WORKDIR /opt #启动服务 EXPOSE 8081 CMD ["java","-jar","app-0.0.1-SNAPSHOT.jar"]
#前提步骤:在Windows中,我们在构建镜像时需要注意的是jar包要与Dockerfile在同一路径下
- 执行编写的Dockerfile的文件
docker build -t app -f Dockerfile .
- 执行Dockerfile文件成功后,也就是构建镜像成功
[+] Building 0.8s (8/8) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 258B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/java:8 0.0s => [stage-1 1/3] FROM docker.io/library/java:8 0.4s => [internal] load build context 0.4s => => transferring context: 20.66MB 0.3s => [stage-1 2/3] COPY app-0.0.1-SNAPSHOT.jar /opt 0.1s => [stage-1 3/3] WORKDIR /opt 0.0s => exporting to image 0.2s => => exporting layers 0.2s => => writing image sha256:b501c45c6a5a8d75abad30c63bf3a2be022d35abe7a370c9f9c1b3872a5689e0 0.0s => => naming to docker.io/library/app 0.0s
- 使用docker images,就可以查看到构建成功的镜像信息
F:\Docker\learnDocker>docker images REPOSITORY TAG IMAGE ID CREATED SIZE app latest b501c45c6a5a 8 seconds ago 664MB nginx latest f6987c8d6ed5 6 days ago 141MB alpine/git latest c6b70534b534 5 weeks ago 27.4MB hello-world latest feb5d9fea6a5 3 months ago 13.3kB centos_name latest 5b25220f403c 20 months ago 203MB centos_share latest 6bd0ccebaae6 20 months ago 203MB centos 7.8.2003 afb6fca791e0 20 months ago 203MB java 8 d23bdf5b1b1b 4 years ago 643MB
- 测试再导入,使用docker run来运行这个镜像,运行成功后,环境部署OK
F:\Docker\learnDocker>docker run --rm -p8081:8081 b501c45c6a5a . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.2) 2021-12-27 02:37:29.943 INFO 1 --- [ main] com.example.app.AppApplication : Starting AppApplication v0.0.1-SNAPSHOT using Java 1.8.0_111 on c69e1705877e with PID 1 (/opt/app-0.0.1-SNAPSHOT.jar started by root in /opt) 2021-12-27 02:37:29.946 INFO 1 --- [ main] com.example.app.AppApplication : No active profile set, falling back to default profiles: default 2021-12-27 02:37:32.093 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8081 2021-12-27 02:37:32.115 INFO 1 --- [ main] com.example.app.AppApplication : Started AppApplication in 2.848 seconds (JVM running for 3.445)
- 开始测试验证
5.2nginx
Dockerfile文件
FROM nginx MAINTAINER 特昂糖 RUN echo "Hi, This Is A Docker Continer Website" > /usr/share/nginx/html/index.html EXPOSE 80
构建镜像: docker build -t nginx_web -f Dockerfile . 运行镜像: docker run --rm -p80:80 nginx_web 查看nginx服务的日志信息: docker logs -f 容器ID
5.3python文件
Dockerfile文件:
FROM centos:7.8.2003 MAINTAINER 特昂糖 #下载yum RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo; RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo; #安装Python环境 RUN yum install python3-devel python3-pip -y #安装flask库 RUN pip3 install -i https://pypi.douban.com/simple flask RUN pip3 install flask_restful RUN pip3 install flask_httpauth RUN pip3 install flask_jwt #复制文件到容器目录 COPY app.py /opt #切换目录 WORKDIR /opt #启动服务 EXPOSE 5000 CMD ["python3","app.py"]
构建镜像:
docker build -t python_web -f Dockerfile .
运行镜像:
docker run --rm -p5000:5000 python_web #运行镜像信息
Windows系统关于端口的命令:
netstat -ano | findstr "被查询的端口" #根据端口查询到应用程序的pid信息 tasklist | findstr "pid" #根据pid信息查询到具体的应用程序
6.Docker中Rabbit MQ的下载
获取镜像并运行镜像
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
根据端口进到:http://localhost:15672/#/

账号与密码都为:guest
7.镜像的发布
发布镜像我们⾸先要在Docker Hub上注册⼀个账户,然后把我们的镜像名称更改为:DockerHub昵称/镜像名称,如果不处理,在进⾏push的时候,就会提示没有权限的操作
C:\Users\特昂糖>docker push 151****2986/flask_app Using default tag: latest latest: Pulling from 151****32986/flask_app Digest: sha256:110776cf725b24a9dd9313550ee669af658bbcbcbe78818333d7e6c88a6fa4fd Status: Downloaded newer image for 151****2986/flask_app:latest docker.io/151****2986/flask_app:latest
