docker笔记三

docker笔记三

DockerFile

dockerfile 是用来构建docker镜像的配置文件,如果我们想构建自己应用的docker镜像,就需要编写docker镜像文件,然后通过docker build 命令来构建我们自己的docker镜像。

基础知识

DockerFile 每个保留关键字都必须是大写的。

DockerFile的构建顺序是从上到下执行的,注释符号是 #

每个指令都会创建一个镜像层并提交

说明:

DockerFile是面向开发的,我们要发布项目作镜像,就需要编写DockerFile。DockerFile是用来构建docker镜像的文件,定义了构建docker镜像的步骤。

基本指令
FROM				# from:基础镜像,一切从这里开始构建
MAINTAINER			# maintainer:镜像是谁写的, 姓名+邮箱
RUN					# run:镜像在构建的时候需要运行的命令,构建时可以执行的操作系统(win/linux)命令,可以进行镜像工具的安装.yum,apt
COPY				# copy:类似ADD,将我们文件拷贝到镜像中
ADD					# add:步骤 添加文件到指定目录,自动解压
ENV					# env:构建的时候设置环境变量,就是设置系统环境变量
WORKDIR				# workdir:镜像的工作目录,默认进入的主目录
VOLUME				# volume:挂载的目录
EXPOSE				# expose:保留端口配置,对外暴露的端口
CMD					# cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,前面设置的cmd会被dockerfile最后一个设置的cmd替代,在启动镜像时指定的命令也会进行CMD命令的替代
ENTRYPOINT			# entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD				# onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令

image-20210424113535239

实战测试

下图是centos的一个dockerfile文件,可以看到我们基础的操作系统镜像都是来源scrath这个基础的官方镜像,我们常见的应用镜像mysql,nginx,redis基本都是以系统镜像作为底层镜像来构建。我们的应用镜像也通常以这些系统镜像或者应用环境镜像作为基础镜像来构建。

image-20210424191357647

创建一个自己的centos镜像(为centos安装vim 和 ifconfig 命令)

vim mydockerfile-centos 
# 编写dockerfile
FROM centos # 基础镜像
MAINTAINER lindeyu<ldystack@163.com> # 镜像的来源信息
ENV MYPATH /usr/local #设置构建镜像的环境变量
WORKDIR $MYPATH # 设置镜像的工作目录,也是镜像进入的目录
RUN yum -y install vim # 镜像构建时安装vim
RUN yum -y install net-tools # 镜像构建时安装net-tools
CMD echo $MYPATH
CMD echo "----end---"
CMD /bin/bash # 容器启动时运行的命令,只有最后一个会生效,前面设置的被覆盖,可被外面设置的命令替代
# 构建镜像 -f 指定dockerfile -t 镜像名:版本号 .
docker build -f mydockerfile-centos  -t mycentos:0.1 .

image-20210424204558203

image-20210424204645837

运行我们编译好的镜像测试查看

docker run -it mycentos:0.1 # 以交互方式启动镜像

image-20210424205118634

我们可以通过docker history 镜像id,查看镜像层和构建的dockerfile

image-20210424205552984

CMD 和 ENTPYPOINT 区别

CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD和ENTPYPOINT

# 编写dockerfile文件
$ vim dockerfile-test-cmd
FROM centos
CMD ["ls","-a"]					# 启动后执行 ls -a 命令

# 构建镜像
$ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .

# 运行镜像
$ docker run cmd-test:0.1		# 由结果可得,运行后就执行了 ls -a 命令
.
..
.dockerenv
bin
dev
etc
home

# 想追加一个命令  -l 成为ls -al:展示列表详细数据
$ docker run cmd-test:0.1 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\":
executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled 

# cmd的情况下 -l 替换了CMD["ls","-l"] 而 -l  不是命令所以报错
# 编写dockerfile文件
$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
$ docker build  -f dockerfile-test-entrypoint -t cmd-test:0.1 .

# 运行镜像
$ docker run entrypoint-test:0.1
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found ...

# 我们的命令,是直接拼接在我们得ENTRYPOINT命令后面的
$ docker run entrypoint-test:0.1 -l
total 56
drwxr-xr-x   1 root root 4096 May 16 06:32 .
drwxr-xr-x   1 root root 4096 May 16 06:32 ..
-rwxr-xr-x   1 root root    0 May 16 06:32 .dockerenv
lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x   5 root root  340 May 16 06:32 dev
drwxr-xr-x   1 root root 4096 May 16 06:32 etc
drwxr-xr-x   2 root root 4096 May 11  2019 home
lrwxrwxrwx   1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 11  2019 lib64 -> usr/lib64 ....

实战 dockerFile 制作tomcat镜像

# 创建目录,准备构建镜像需要的软件
mkdir docker-tomcat
cd docker-tomcat

image-20210424223025540

编写dockerfile

#基础镜像
FROM centos 
#作者信息
MAINTAINER lindeyu<ldystack@163.com> 
#设置应用主目录
ENV MYPATH /usr/local 
WORKDIR $MYPATH
#拷贝本地文件
COPY README /usr/local/README 
#添加jdk ,ADD 命令会自动解压
ADD jdk-8u211-linux-x64.tar.gz /usr/local 
#添加tomcat
ADD apache-tomcat-8.5.39.tar.gz /usr/local 
#安装vim
RUN yum -y install vim
#设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_211 
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.39 
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.39
#设置环境变量,分割符号 :
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 
#对外暴露的端口
EXPOSE 8080 
#容器启动运行的命令 
CMD /usr/local/apache-tomcat-8.5.39/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.39/logs/catalina.out

构建镜像

docker build -f dockerfile -t tomcat-ldy:8.5.39 .
docker images

image-20210424223313848

创建容器

docker run -d --name tomcat01 -p 9090:8080 -v /home/docker_volume/tomcat01-volume/webapps/app:/usr/local/apache-tomcat-8.5.39/webapps/app/ -v /home/docker_volume/tomcat01-volume/logs/:/usr/local/apache-tomcat-8.5.39/logs tomcat-ldy:8.5.39

image-20210424223439496

同步文件到数据卷,访问测试

image-20210424223620465

# 进入容器后台查看同步情况
docker exec -it tomcat01 /bin/bash

image-20210424223738253

浏览器访问

image-20210424223835090

本地查看同步日志

image-20210424223931373

发布自己的镜像到远程仓库(dockerHub 或 阿里云容器镜像仓库)

基本登录、登出命令

image-20210424230657620

由于dockerHub镜像在国外,这里以阿里云镜像仓库为例,你需要开通阿里云的容器镜像服务,官网有详细的文档https://cr.console.aliyun.com/repository/,这里不在赘述。

注意你镜像的名字就代表你docker仓库的名字,这里我是随便起了一个private

小结

image-20210424231334689

springBoot打包docker镜像容器

待完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值