狂神jetson nano Docker学习笔记(七)

目录

DockerFile

DockerFile介绍

DockerFile构建过程

DockerFile的指令

实战测试

实战:Tomcat镜像

发布自己的镜像

小结


学习通道:狂神说Java】Docker最新超详细版教程通俗易懂 

docker官网:Docker Documentation | Docker Documentation

docker hun:Docker Hub


DockerFile


DockerFile介绍


dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build构建称为一个镜像

3、docker run运行镜像

4、docker push发布镜像(docker hub、阿里云镜像仓库)

查看一下官方是怎么做的?

 很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!

官方既然可以制造镜像,那么我们也可以!

DockerFile构建过程


基础知识:

1、每个保留关键字(指令)都必须是大写字母

2、执行从上到下

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

dockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerFile文件,这个文件十分简单!

Docker镜像逐渐成为了咱们企业的一个交付标准,因为我们必须掌握!

步骤:开发,部署,运维,缺一不可!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages :通过DockerFile构建生成的镜像,最终发布和运行的产品!

Docker容器:容器就是镜像运行起来提供服务器

DockerFile的指令


以前的话我们就是使用别人的 镜像,现在我们知道这些指令后,我们来练习自己写一个镜像!

FROM                        #        基础镜像,一切从这里开始构建

MAINTAINER            #        镜像是谁写的,姓名+邮箱

RUN                          #        镜像构建的时候需要运行的命令

ADD                          #        步骤:Tomcat镜像,压缩包,添加内容

WORKDIR                #        镜像的工作目录        /bin/bash

VOLUME                  #        挂载的目录位置

EXPOSE                  #        指定暴露端口

RUN                         #        运行

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

ENTRYPOINT          #        指定这个容器启动的时候要运行的命令,可以追加命令

ONBUILD                 #        当构建一个被继承DockerFile这个时候就会运行ONBUILD的指                                                 令,触发指令。

COPY                       #        类似ADD,将我们的文件拷贝到镜像中。

ENV                          #        构建的时候设置环境变量!

实战测试


Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的 构建

 创建一个自己的centos

# 1、编写DockerFile的文件

root@ajj666-virtual-machine:/home/ajj666/dockerfile# cat mydockerfile-centos 
FROM centos
MAINTAINER ajj<3075221401@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
 

# 2、通过这个文件构建镜像

# 命令 docker build -f dockerFile文件路径 -t 镜像名:[tag]

Successfully built aec7bfa15b23
Successfully tagged mycentos:0.1
# 3、测试运行

对比之前原生的centos:

 我们增加之后的镜像:

我们可以列出本地进行的变更历史

所以 我们平时拿到一个镜像,可以研究一下它是怎么构成的!

CMD和ENTRYPOINT的区别

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

ENTRYPOINT          #        指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD

# 编写DockerFile文件

root@ajj666-virtual-machine:~# nano dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]

# 构建镜像

root@ajj666-virtual-machine:~# docker build -f dockerfile-cmd-test -t cmdtest .

# run运行

# 但是当我们追加一个命令 -l,这时它会报错!

 # 原因是在cmd的情况下,-l替换了CMD ["ls","-a"]命令,而-l 不是命令因此会报错!正确用法是ls -al,但是这样就比较麻烦了。

测试ENTRYPOINT

root@ajj666-virtual-machine:~# nano dockerfile-entrypoint-test
FROM centos
ENTRYPOINT  ["ls","-a"]

root@ajj666-virtual-machine:~# docker build -f dockerfile-entrypoint-test -t entrypoint-test .
Sending build context to Docker daemon  205.3MB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 14151a018cfc
Removing intermediate container 14151a018cfc
 ---> c7ee64411a2d
Successfully built c7ee64411a2d
Successfully tagged entrypoint-test:latest
root@ajj666-virtual-machine:~# docker run c7ee64411a2d
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

# 我们的追加命令,是直接拼接在我们的ENTRYPOINT命令的后面!
root@ajj666-virtual-machine:~# docker run c7ee64411a2d -l
total 56
drwxr-xr-x   1 root root 4096 Dec  7 02:00 .
drwxr-xr-x   1 root root 4096 Dec  7 02:00 ..
-rwxr-xr-x   1 root root    0 Dec  7 02:00 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Dec  7 02:00 dev
drwxr-xr-x   1 root root 4096 Dec  7 02:00 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15 14:17 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 276 root root    0 Dec  7 02:00 proc
dr-xr-x---   2 root root 4096 Sep 15 14:17 root
drwxr-xr-x  11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Dec  7 01:56 sys
drwxrwxrwt   7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x  12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x  20 root root 4096 Sep 15 14:17 var

DockerFile中很多命令都十分相似,我们需要了解他们的区别,我们最好的学习方式就是对比他们然后测试效果!

实战:Tomcat镜像


1、准备镜像文件Tomcat压缩包,jdk的压缩包!

这两个压缩包百度搜索jdk linux和jdk Tomcat就能找到官网下载地址。

 

懒得下载的小伙伴我这里有百度云。

链接:https://pan.baidu.com/s/1sDMA4kbr3T9_KWW5FQJTYg 
提取码:4ofu 

2、编写DockerFile文件

 官方命名DockerFile,build的时候回自动寻找这个文件,就不需要-f指定了!

FROM centos
MAINTAINER ajj<3075221401@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u311-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.55.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_311
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.55
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.55
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.55/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.55/bin/logs/catalina.out

3、构建镜像

# 通过docker build -t diytomcat .

4、启动镜像

5、访问测试

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello AJJ</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>

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

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

发布自己的镜像

docker hub

1、地址:Docker Hub 注册自己的账号

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

3、在我们服务器上提交自己的镜像

root@ajj666-virtual-machine:/home/ajj666/tomcat/test# 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

root@ajj666-virtual-machine:/home/ajj666/tomcat/test# docker login -u 17673799135
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

4、登录完毕后就可以提交镜像了,就是一步docker push,流程和Git Hub差不多 

root@ajj666-virtual-machine:~ # docker push 17673799135/tomcat:1.0
The push refers to repository [docker.io/17673799135/tomcat]
88fc4aa56f5c: Pushed 
910d3766cc28: Pushed 
98c50121760a: Pushed 
898ecead1655: Pushed 
74ddd0ec08fa: Mounted from library/centos 
1.0: digest: sha256:ad1a8e10bd54da5d5f23c07740fd8ac01309a787c1d0cace4253ff54ab0c7d3b size: 1373

提交的时候也是按照镜像的层级来进行的提交的!

阿里云镜像服务上

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

4、创建容器镜像

5、浏览阿里云

登录阿里云账号:

root@ajj666-virtual-machine:~# docker login --username=宇智波·派大星233 registry.cn-shanghai.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

执行命令上传镜像:

root@ajj666-virtual-machine:~# docker tag c15d3f38748c registry.cn-shanghai.aliyuncs.com/bilibli-ajj666/bilibli-ajj233:1.0

docker push registry.cn-shanghai.aliyuncs.com/bilibli-ajj666/bilibli-ajj233:1.0

查看镜像版本

小结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静·无羡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值