docker小白第十一天

docker小白第十一天

dockerfile分析

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。

构建三步骤:编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一层一层的包装形成新镜像。

dockerfile内容基础知识

1:每条保留字(关键字)指令都必须为大写字母且后面要跟随至少一个参数。

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

3:#表示注释。

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

docker执行dockerfile的大致流程

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

(2)执行一条指令并对容器作出修改

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

(4) docker再基于刚提交的镜像运行一个新容器

(5)在执行一条执行对容器做出修改

(6)执行类似docker commit的操作提交一个新的镜像层

(7) docker再基于刚提交的镜像运行一个新容器

(6)循环通过以上步骤执行dockerfile中的下一条指令直到所有指令都执行完成。

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

2、Docker镜像,在用Dockerfile定义一个文件之后,docker buildi时会产生一个Docker镜像,当运行Docker镜像时会真正开始提供服务;

3、Docker容器,容器是直接提供服务的。

dockerfile常用保留字指令

bash 复制代码
FROM 
#基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER 
# 镜像维护者的姓名和邮箱地址
RUN <命令行指令>
# 容器构建时需要运行的命令,命令行指令等于在终端操作的shell指令。在构建镜像docker build时运行
EXPOSE
# 当前容器对外暴露出的端口
WORKDIR
# 指定在创建容器后,终端默认登陆进容器时的工作目录
USER
# 指定该镜像以什么样的用户去执行,如果都不指定,则默认是root
ENV
# 用来在构建镜像过程中设置环境变量
ADD
# 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
# 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME 
CMD
# 指定容器启动后要做的事情。Dockerfile 中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。在运行容器docker run时运行该命令
ENTRYPOINT
# 也是用来指定一个容器启动时要运行的命令
类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序

dockerfile案例实践

自定义一个镜像mycentosjava8。

bash 复制代码
docker pull centos
下载一个默认的基础版本centos镜像
bash 复制代码
docker images
# 查看已经下载的镜像
docker run -it 5d0da3dc9764 /bin/bash
# 镜像id替换成自己的centos镜像id
vim a.txt
# 测试目前已经运行起来的centos容器是不具备vim命令的

需求为,原始的centos镜像具备vim+ifconfig+jdk8。

bash 复制代码
https://www.oracle.coml/java/technologies/downloads/
# jdk8下载地址

准备编写dockerfile文件

bash 复制代码
mkdir myfile
# 新建个文件夹叫myfile

将下载好的java8通过xftp上传到该文件夹内

bash 复制代码
vim Dockerfile
同目录下,新建个Dockerfile文件,D要大写
bash 复制代码
FROM centos:7.6.1810
# 基于哪个原始镜像,为避免版本冲突这里指定版本
MAINTAINER CZ
# 作者信息

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD是相对路径jar,把jdk-8u391-linux-i586.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置    
ADD jdk-8u391-linux-i586.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.O_391
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HONE/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success- - - - - --- ----- - ok"
CMD /bin/bash

构建dockerfile文件

bash 复制代码
docker build -t 新镜像名字:TAG .
docker build -t centosjava8:1.5 .
#注意TAG后边有个空格,有个点
docker images

可以看到构建后的新镜像有1.2个G

运行新建的镜像

bash 复制代码
docker run -it centosjava8:1.5 /bin/bash

可以看到启动容器后的默认登入目录为local,是dockerfile文件中设置的。

bash 复制代码
测试vim命令和ifconfig命令
vim test.txt
ifconfig

虚悬镜像

仓库名、标签都是 <none> 的镜像,俗称虚悬镜像

bash 复制代码
vim Dockerfile
# 新建一个dockerfile文件
FROM ubuntu
CMD echo 'action is success'
# dockerfile文件中增加两个命令
docker build .
# 构建镜像
bash 复制代码
# 虚悬镜像删除的命令
docker image prune

docker微服务实战

通过IDEA新建微服务模块

打包代码生成jar包,然后通过xftp上传到linux虚机中,自己新建的文件夹,例如mydocker中。

通过dockerfile发布微服务部署

1、编写Dockerfile。springBoot编写的jar包自带tomcat,无需额外添加。

2、将微服务jar包和Dockerfile文件搞到同一个目录下。

3、构建镜像

bash 复制代码
docker build -t zzyy_docker:1.6 .

4、运行容器

bash 复制代码
docker run -d -p 6001:6001 15a1424eae6c
# 微服务常以后台形式运行

5、测试容器

bash 复制代码
curl 127.0.0.1:6001/order/docker
# 访问微服务测试
相关推荐
Radan小哥3 小时前
Docker学习笔记—day007
笔记·学习·docker
howard20054 小时前
Docker实战 - 将Web项目打成war包部署到tomcat容器里运行
docker·容器化部署web项目
p***c9494 小时前
Docker机器学习实战
机器学习·docker·容器
pumpkin845147 小时前
Docker 参考手册
chrome·docker·容器
三天不学习9 小时前
GitLab Docker 安装完整配置项说明
docker·容器·gitlab
北冥有鱼被烹12 小时前
【微知】Ubuntu中如何安装docker?
ubuntu·docker
幻灭行度14 小时前
docker镜像导入到K8S的containerd中
java·docker·kubernetes
虎头金猫14 小时前
随时随地处理图片文档!Reubah 加cpolar的实用体验
linux·运维·人工智能·python·docker·开源·visual studio
哈里谢顿1 天前
Docker 中快速启动 Prometheus + Grafana操作指南(二)
docker
醇氧1 天前
Mac 安装 Docker Desktop
macos·docker·容器