docker学习笔记(三)

举报
Studying-swz 发表于 2022/10/24 20:06:12 2022/10/24
【摘要】 1.DockerFile介绍dockerfile 使用来创建docker镜像的文件!命令参数脚本!构建步骤:1、编写一个dockerfile文件2、docker build 构建成为一个镜像3、docker run 运行镜像4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)查看一下官方是怎么做的?很多官方镜像都是基础包,很多功能都没有,我们通常自己搭建自己的镜像!...

1.DockerFile介绍

dockerfile 使用来创建docker镜像的文件!命令参数脚本!
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)

查看一下官方是怎么做的?
在这里插入图片描述
在这里插入图片描述

很多官方镜像都是基础包,很多功能都没有,我们通常自己搭建自己的镜像!
官方既然可以制作镜像,我们也可以!

2.DockerFile的构建过程

2.1基础知识

  • 每个保留关键字(指令)都必须是大写字母
  • 执行从上到下顺序执行
  • #表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交!
    在这里插入图片描述

2.2基础名词

  • dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
  • Docker镜像逐渐成为了企业交付的标准,必须要掌握!
  • 步骤:开发、部署、运维,缺一不可
    • DockerFile:构建文件,定义了一切的步骤,源代码。
    • DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品,原来是jar war
    • Docker容器:容器就是镜像运行起来提供服务器

3.DockerFile的指令

FROM                 #基础镜像 centos/ubuntu,一切从这里开始构建
MAINTAINER           #镜像是谁写的,姓名+邮箱
RUN				     #镜像构建的时候需要运行的命令
ADD					 #步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR				 #镜像的工作目录 
VOLUME				 #挂载的目录
EXPOSE				 #保留端口配置
CMD					 #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTERPOINT			 #指定这个容器启动的时候要与运行的命令,可以追加命令
ONBUILD              #当构建一个被继承的 DockerFile这个时候就会运行 Onbuild的指令,触发指令
COPY				 #类似ADD,将我们的文件拷贝到镜像中
ENC					 #构建的时候设置环境变量

在这里插入图片描述

4.实战测试

  • Docker Hub中99%镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置类进行构建。
    在这里插入图片描述

创建一个自己的centos

# 1./home下新建dockerfile目录
$ mkdir dockerfile

# 2. dockerfile目录下新建mydockerfile-centos文件
$ vim mydockerfile-centos

# 3.编写Dockerfile配置文件
FROM centos							# 基础镜像是官方原生的centos
MAINTAINER swz<1362745408@qq.com> 	# 作者

ENV MYPATH /usr/local				# 配置环境变量的目录 
WORKDIR $MYPATH						# 将工作目录设置为 MYPATH

RUN yum -y install vim				# 给官方原生的centos 增加 vim指令
RUN yum -y install net-tools		# 给官方原生的centos 增加 ifconfig命令

EXPOSE 80							# 暴露端口号为80

CMD echo $MYPATH					# 输出下 MYPATH 路径
CMD echo "-----end----"				
CMD /bin/bash						# 启动后进入 /bin/bash

# 4.通过这个文件构建镜像
# 命令: docker build -f 文件路径 -t 镜像名:[tag] .
$ docker build -f mydockerfile-centos -t mycentos:0.1 .

# 5.出现下图后则构建成功

在这里插入图片描述

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mycentos            0.1                 cbf5110a646d        2 minutes ago       311MB

# 6.测试运行
$ docker run -it mycentos:0.1 		# 注意带上版本号,否则每次都回去找最新版latest

$ pwd	
/usr/local							# 与Dockerfile文件中 WORKDIR 设置的 MYPATH 一致
$ vim								# vim 指令可以使用
$ ifconfig     						# ifconfig 指令可以使用

# docker history 镜像id 查看镜像构建历史步骤
$ docker history 镜像id

在这里插入图片描述

  • 我们可以列出本地进行的变更历史
    在这里插入图片描述

5.CMD 和 ENTRYPOINT区别?

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

5.1测试cmd

# 编写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  不是命令所以报错

5.2测试ENTRYPOINT

# 编写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中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!

6.实战Tomcat镜像

6.1 准备镜像文件

准备tomcat 和 jdk 到当前目录,编写好README
  • jdk1.8下载

    wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
    
  • tomcat9.0.22下载
    https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.22/bin/
    选择下面的下载即可在这里插入图片描述

6.2 编写dokerfile

$ vim dockerfile
FROM centos 										# 基础镜像centos
MAINTAINER swz<1362745408@qq.com>					# 作者
COPY readme.txt /usr/local/readme.txt 				# 复制README文件
ADD jdk-8u141-linux-x64.tar.gz /usr/local/ 			# 添加jdk,ADD 命令会自动解压
ADD apache-tomcat-9.0.22.tar.gz /usr/local/ 		# 添加tomcat,ADD 命令会自动解压
RUN yum -y install vim								# 安装 vim 命令
ENV MYPATH /usr/local 								# 环境变量设置 工作目录
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_141 				# 环境变量: JAVA_HOME环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 	# 环境变量: tomcat环境变量
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22

# 设置环境变量 分隔符是:
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 	

EXPOSE 8080 										# 设置暴露的端口

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/logs/catalina.out 					# 设置默认命令


如下图:名字需要对应上
在这里插入图片描述

6.3 构建镜像

# 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件
[root@iZ2zefiis08efdip3nlhu2Z tomcat]# docker build -t diytomcat .

6.4 run镜像

# -d:后台运行 -p:暴露端口 --name:别名 -v:绑定路径 
[root@iZ2zefiis08efdip3nlhu2Z tomcat]# docker run -d -p 8081:8080 --name swztomcat -v /home/tomcat/test:/usr/local/apach-tomcat-9.0.22/webapps/test -v /home/tomcat/tomcatlogs/:/usr/local/apach-tomcat-9.0.22/logs diytomcat

6.5 访问测试

$ docker exec -it 自定义容器的id /bin/bash
$ cul localhost:8080

6.6发布项目

(由于做了卷挂载,我们直接在本地编写项目就可以发布了!)

发现:项目部署成功,可以直接访问!

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!

7.发布自己的镜像

1.发布到 Docker Hub
  • 1、地址 https://hub.docker.com/

  • 2、确定这个账号可以登录

  • 3、登录

    $ docker login --help
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    
    $ docker login -u 你的用户名 -p 你的密码
    
    

    在这里插入图片描述

  • 4、发布镜像
    在这里插入图片描述

    # 可以看到直接发布是错误的
    # 会发现push不上去,因为如果没有前缀的话默认是push到 官方的library
    # 解决方法:
    # 第一种 build的时候添加你的dockerhub用户名,然后在push就可以放到自己的仓库了
    $ docker build -t songwz123/diytomcat:0.1 .
    
    # 第二种 使用docker tag #然后再次push
    $ docker tag 镜像id songwz123/diytomcat:1.0 #然后再次push
    $ docker push songwz123/diytomcat:1.0
    #可以看到下面出现了songwz/diytomcat 
    [root@iZ2zefiis08efdip3nlhu2Z tomcat]#  docker tag e399a48469f4  songwz123/diytomcat:1.0 
    [root@iZ2zefiis08efdip3nlhu2Z tomcat]# docker images
    REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
    diytomcat             latest    e399a48469f4   17 hours ago   688MB
    songwz/diytomcat      1.0       e399a48469f4   17 hours ago   688MB
    songwz123/diytomcat   1.0       e399a48469f4   17 hours ago   688MB
    mycentos              0.1       3b63e7073db0   18 hours ago   323MB
    swz/centos            latest    e1e7359dcbfa   23 hours ago   231MB
    tomcat02              1.0       2c026d52e774   41 hours ago   684MB
    redis                 latest    7614ae9453d1   3 days ago     113MB
    mysql                 5.7       c20987f18b13   4 days ago     448MB
    tomcat                latest    24207ccc9cce   2 weeks ago    680MB
    nginx                 latest    f652ca386ed1   3 weeks ago    141MB
    centos                latest    5d0da3dc9764   3 months ago   231MB
    portainer/portainer   latest    580c0e4e98b0   9 months ago   79.1MB
    #这里太慢了,我就不等了
    [root@iZ2zefiis08efdip3nlhu2Z tomcat]#  docker push songwz123/diytomcat:1.0
    The push refers to repository [docker.io/songwz123/diytomcat]
    1c2c241a9a68: Pushing [======================>                            ]  28.66MB/64.75MB
    a10bb06755d9: Pushing [==============================>                    ]  9.281MB/15.41MB
    5204d4951b10: Pushing [=>                                                 ]  8.193MB/376.2MB
    7e8e5af2adbb: Pushed 
    74ddd0ec08fa: Pushing [====>                                              ]  19.11MB/231.3M
    
2. 发布到 阿里云

官网:https://cr.console.aliyun.com/repository/

8.小结

在这里插入图片描述

学习视频:
https://www.bilibili.com/video/BV1og4y1q7M4?p=28&spm_id_from=pageDriver

部分参考:
https://blog.csdn.net/weixin_43591980/article/details/106316094

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。