Docker笔记-Docker Dockerfile

news2024/11/13 10:27:03

Docker笔记-Docker Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

这里讲解如何运行 Dockerfile 文件来定制一个镜像。

DockerFile构建过程解析:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

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

3、#表示注释

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

Docker执行Dockerfile的大致流程:

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

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

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

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

5、执行dockerfile中的 下一条指令直到所有指令都执行完成

1、使用Dockerfile定制镜像

1、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

2、FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像,后续的操作都是基于

nginx。

RUN:用于执行后面跟着的命令行命令,有以下两种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令>等同于在终端操作的shell命令

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层,所以过多无意义的层,会造成镜像膨胀过大。

例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
# 以上执行会创建3层镜像,可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

2、开始构建镜像

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。

注:最后的 . 代表本次执行的上下文路径,下一节会介绍。

$ docker build -t nginx:v3 .

在这里插入图片描述

以上显示,说明已经构建成功。

如果存在多个仓库下,或使用多个镜像标签,就可以使用多个-t参数:

$ docker build -t nginx/v3:1.0.2 -t nginx/v3:latest .

3、上下文路径

上一节中,有提到指令最后一个 . 是上下文路径,那么什么是上下文路径呢?

$ docker build -t nginx:v3 .

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个

路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S,我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完

成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker

引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

4、指令详解

4.1 COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则

例如:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

4.2 ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制

    并解压到 <目标路径>。

  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建

    变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

4.3 CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在docker build

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。

CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

格式:

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并

且默认可执行文件是 sh。

4.4 ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数

送给 ENTRYPOINT 指令指定的程序。

但是,如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会

提到。

示例:

假设已通过 Dockerfile 构建了 nginx:test 镜像:

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参

1、不传参运行

$ docker run nginx:test

容器内会默认运行以下命令,启动主进程。

nginx -c /etc/nginx/nginx.conf

2、传参运行

$ docker run nginx:test -c /etc/nginx/new.conf

容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

nginx -c /etc/nginx/new.conf

4.5 ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

格式:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

4.6 ARG

构建参数,与 ENV 作用一至,不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有

docker build 的过程中有效,构建好的镜像内不存在此环境变量。

构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

格式:

ARG <参数名>[=<默认值>]

4.7 VOLUME

定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。
  • 避免容器不断变大。

格式:

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

4.8 EXPOSE

仅仅只是声明端口。

作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

格式:

EXPOSE <端口1> [<端口2>...]

4.9 WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,

必须是提前创建好的)。

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存

在。

格式:

WORKDIR <工作目录路径>

4.10 USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

格式:

USER <用户名>[:<用户组>]

4.11 HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

格式:

HEALTHCHECK [选项] CMD <命令>: 设置检查容器健康状况的命令
HEALTHCHECK NONE: 如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令>: 这边CMD后面跟随的命令使用,可以参考CMD的用法

4.12 ONBUILD

用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不

会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜

像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。

格式:

ONBUILD <其它指令>

4.13 LABEL

LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

比如我们可以添加镜像的作者:

LABEL org.opencontainers.image.authors="runoob"

5、Dockerfile指令总结

常用命令:

在这里插入图片描述

保留字指令:

在这里插入图片描述

在这里插入图片描述

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

6、自己做一个centos

6.1 编写dockerfile文件(mydockerfile-centos)

FROM centos
MAINTAINER zsx<2420309401@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

6.2 构建镜像

$ docker build -f mydockerfile-centos -t mycentos:0.1 .
[root@zsx dockertemp2]# docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  2.048kB
Step 1/8 : FROM centos
 ---> 5d0da3dc9764
Step 2/8 : MAINTAINER zsx<2420309401@qq.com>
 ---> Using cache
 ---> 1eb6e00507da
Step 3/8 : ENV MYPATH /usr/local
 ---> Using cache
 ---> 29c1f128f368
Step 4/8 : WORKDIR $MYPATH
 ---> Using cache
 ---> ead640e6d103
Step 5/8 : EXPOSE 80
 ---> Running in 51e8b541aee5
Removing intermediate container 51e8b541aee5
 ---> 17f13c31871a
Step 6/8 : CMD echo $MYPATH
 ---> Running in 482c3348104f
Removing intermediate container 482c3348104f
 ---> 70cd75d70ccf
Step 7/8 : CMD echo "----end----"
 ---> Running in 6dffe3fa9075
Removing intermediate container 6dffe3fa9075
 ---> c47c8c2d0808
Step 8/8 : CMD /bin/bash
 ---> Running in 71550c579b6a
Removing intermediate container 71550c579b6a
 ---> 6675973c511b
Successfully built 6675973c511b
Successfully tagged mycentos:0.1

6.3 查看镜像

$ docker images

在这里插入图片描述

6.4 运行

$ docker run -it mycentos:0.1

在这里插入图片描述

6.5 查看镜像构建过程

$ docker history 镜像名|镜像id
$ docker history 6675973c511b

在这里插入图片描述

6.6 CMD和ENTRYPOINT区别

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

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

6.6.1 测试cmd
# 编写dockerfile文件
$ vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
$ docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in 63ad0a28dd54
Removing intermediate container 63ad0a28dd54
 ---> b1fd714bdfec
Successfully built b1fd714bdfec
Successfully tagged cmdtest:latest
[root@zsx dockertemp3]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
cmdtest            latest    b1fd714bdfec   50 seconds ago   231MB
mycentos           0.1       6675973c511b   8 minutes ago    231MB
nginx              v3        bf770dfb06b2   36 minutes ago   141MB
tomcat             1.0       78c6427cb92b   25 hours ago     680MB
runoob/centos      6.7       ceeb01d3ac58   28 hours ago     191MB
runoob/centos      dev       ceeb01d3ac58   28 hours ago     191MB
ubuntu             v2        8ea6534ccd35   28 hours ago     137MB
test/ubuntu        v3        2deea90c7f09   32 hours ago     72.8MB
<none>             <none>    a313f8f76e87   33 hours ago     0B
nginx              latest    04661cdce581   6 days ago       141MB
tomcat             latest    b0e0b0a92cf9   3 weeks ago      680MB
ubuntu             latest    ba6acccedd29   4 weeks ago      72.8MB
hello-world        latest    feb5d9fea6a5   7 weeks ago      13.3kB
centos             latest    5d0da3dc9764   2 months ago     231MB
centos             6.7       9f1de3c6ad53   2 years ago      191MB
ubuntu             15.10     9b9cb95443b5   5 years ago      137MB
zsx242030/ubuntu   15.10     9b9cb95443b5   5 years ago      137MB
training/webapp    latest    6fae60ef3446   6 years ago      349MB
# run运行,发现我们的ls -a命令生效
$ docker run b1fd714bdfec
[root@zsx dockertemp3]# docker run b1fd714bdfec
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 会报错,因为无法追加
[root@zsx dockertemp3]# $ docker run b1fd714bdfec -l
bash: $: command not found...
6.6.2 测试ENTRYPOINT
# 编写dockerfile文件
$ vim dockerfile-cmd-test
FROM centos
ENTRYPOINT ["ls","-a"]
$ docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 796a9e5942eb
Removing intermediate container 796a9e5942eb
 ---> 86c0ba1b95ef
Successfully built 86c0ba1b95ef
Successfully tagged cmdtest:latest
[root@zsx dockertemp4]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
cmdtest            latest    86c0ba1b95ef   49 seconds ago   231MB
<none>             <none>    b1fd714bdfec   5 minutes ago    231MB
mycentos           0.1       6675973c511b   13 minutes ago   231MB
nginx              v3        bf770dfb06b2   41 minutes ago   141MB
tomcat             1.0       78c6427cb92b   25 hours ago     680MB
runoob/centos      6.7       ceeb01d3ac58   28 hours ago     191MB
runoob/centos      dev       ceeb01d3ac58   28 hours ago     191MB
ubuntu             v2        8ea6534ccd35   28 hours ago     137MB
test/ubuntu        v3        2deea90c7f09   32 hours ago     72.8MB
<none>             <none>    a313f8f76e87   33 hours ago     0B
nginx              latest    04661cdce581   6 days ago       141MB
tomcat             latest    b0e0b0a92cf9   3 weeks ago      680MB
ubuntu             latest    ba6acccedd29   4 weeks ago      72.8MB
hello-world        latest    feb5d9fea6a5   7 weeks ago      13.3kB
centos             latest    5d0da3dc9764   2 months ago     231MB
centos             6.7       9f1de3c6ad53   2 years ago      191MB
ubuntu             15.10     9b9cb95443b5   5 years ago      137MB
zsx242030/ubuntu   15.10     9b9cb95443b5   5 years ago      137MB
training/webapp    latest    6fae60ef3446   6 years ago      349MB
# run运行,发现我们的ls -a命令生效
$ docker run 86c0ba1b95ef
[root@zsx dockertemp3]# docker run 86c0ba1b95ef
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@zsx dockertemp4]# docker run 86c0ba1b95ef -l
total 0
drwxr-xr-x.   1 root root   6 Nov 16 13:40 .
drwxr-xr-x.   1 root root   6 Nov 16 13:40 ..
-rwxr-xr-x.   1 root root   0 Nov 16 13:40 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Nov 16 13:40 dev
drwxr-xr-x.   1 root root  66 Nov 16 13:40 etc
drwxr-xr-x.   2 root root   6 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   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 222 root root   0 Nov 16 13:40 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Nov 16 12:48 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var

7、自己做一个tomcat

7.1 创建一个目录放入需要的文件

$ ls
apache-tomcat-9.0.22.tar.gz
jdk-8ull-linux-x64.tar.gz
$ touch readme.txt

在这里插入图片描述

7.2 编写Dockerfile文件

FROM centos
MAINTAINER zsx242030<2420309401@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u212-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-7.0.70.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_212
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.70
ENV CATALINA_BASH /usr/local/apache-tomcat-7.0.70
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-7.0.70/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.70/logs/catalina.out

7.3 构建镜像

$ docker build -t diytomcat .
Sending build context to Docker daemon  203.9MB
Step 1/14 : FROM centos
 ---> 5d0da3dc9764
Step 2/14 : MAINTAINER zsx242030<2420309401@qq.com>
 ---> Using cache
 ---> f290511eb840
Step 3/14 : COPY readme.txt /usr/local/readme.txt
 ---> Using cache
 ---> 979de07baf19
Step 4/14 : ADD jdk-8u212-linux-x64.tar.gz /usr/local/
 ---> 35580a7632eb
Step 5/14 : ADD apache-tomcat-7.0.70.tar.gz /usr/local/
 ---> de6e4ab6c96b
Step 6/14 : ENV MYPATH /usr/local
 ---> Running in d8d36457d298
Removing intermediate container d8d36457d298
 ---> 694852909947
Step 7/14 : WORKDIR $MYPATH
 ---> Running in 7f791bb043a7
Removing intermediate container 7f791bb043a7
 ---> bf6f0e9f7666
Step 8/14 : ENV JAVA_HOME /usr/local/jdk1.8.0_212
 ---> Running in fc1e3405443b
Removing intermediate container fc1e3405443b
 ---> 9b20c57d4474
Step 9/14 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in c0e5f6d309f4
Removing intermediate container c0e5f6d309f4
 ---> ab964b5e302a
Step 10/14 : ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.70
 ---> Running in 63627ba2a05f
Removing intermediate container 63627ba2a05f
 ---> 8d1b09eea83e
Step 11/14 : ENV CATALINA_BASH /usr/local/apache-tomcat-7.0.70
 ---> Running in 08e2321a88c6
Removing intermediate container 08e2321a88c6
 ---> a80645a52ad3
Step 12/14 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in 488db85e0cd2
Removing intermediate container 488db85e0cd2
 ---> 1aba2bb3cd06
Step 13/14 : EXPOSE 8080
 ---> Running in 82018978b631
Removing intermediate container 82018978b631
 ---> 9d4c0011b55c
Step 14/14 : CMD /usr/local/apache-tomcat-7.0.70/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.70/logs/catalina.out
 ---> Running in 91a0c969175b
Removing intermediate container 91a0c969175b
 ---> 3ca521cc579e
Successfully built 3ca521cc579e
Successfully tagged diytomcat:latest

在这里插入图片描述

7.4 启动

$ docker run -d -p 9090:8080 --name zsxtomcat -v /home/zhangshixing/work/temp/tomcat/test:/usr/local/apache-tomcat-7.0.70/webapps/test -v /home/zhangshixing/work/temp/tomcat/tomcatlogs:/usr/local/apache-tomcat-7.0.70/logs diytomcat

在这里插入图片描述

# 如果有错可以查看日志
$ docker logs 3ca521cc579e

7.5 访问测试

在test目录下编写一个index.html:

<html>
  <head>
      <title>HelloWorldJSP~</title>
  </head>
  <body>
      <h1>
          HelloWorld
      </h1>
  </body>
</html>

在这里插入图片描述

在这里插入图片描述

备注:Docker挂载主机目录Docker访问出现cannot open directory : Permission denied解决办法:在挂

载目录后多加一个 --privileged=true 参数即可。

7.6 发布项目(发布镜像到DockerHub)

$ docker login -u zsx242030
# 输入密码
$ docker push diytomcat:latest
$ docker logout

也可以提交到阿里云服务上,阿里云的官网有说明。

在这里插入图片描述

【docker】 denied: requested access to the resource is denied

原因分析:在build自己的镜像的时候添加tag时必须在前面加上自己的dockerhub的username

7.7 将镜像推送到阿里云

制作镜像:

[root@zsx test]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       1.0       02f263acec53   24 hours ago   231MB
nginx        latest    ea335eea17ab   2 days ago     141MB
mysql        5.7       8b43c6af2ad0   2 days ago     448MB
centos       latest    5d0da3dc9764   2 months ago   231MB
ubuntu       15.10     9b9cb95443b5   5 years ago    137MB
[root@zsx test]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
6c14982e78f6   centos    "/bin/bash"   12 seconds ago   Exited (0) 7 seconds ago             pensive_moore
$ docker commit -a="zsx242030" -m="mycentos" 6c14982e78f6 centos:2.0
[root@zsx test]# docker commit -a="zsx242030" -m="mycentos" 6c14982e78f6 centos:2.0
sha256:92bf8effc0b1e0123e16db7107d2593a874caaea7496c9fbef65137d672adc37
[root@zsx test]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       2.0       92bf8effc0b1   18 seconds ago   231MB
centos       1.0       02f263acec53   24 hours ago     231MB
nginx        latest    ea335eea17ab   2 days ago       141MB
mysql        5.7       8b43c6af2ad0   2 days ago       448MB
centos       latest    5d0da3dc9764   2 months ago     231MB
ubuntu       15.10     9b9cb95443b5   5 years ago      137MB

阿里云开发者平台:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

选择本地仓库。

具体操作:

1、登录阿里云Docker Registry

$ docker login --username=15110820283 registry.cn-hangzhou.aliyuncs.com
[root@zsx test]# docker login --username=15110820283 registry.cn-hangzhou.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

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2、将镜像推送到Registry

# docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:[镜像版本号]
$ docker tag 92bf8effc0b1 registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:2.0
# docker push registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:2.0

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

3、从Registry中拉取镜像

# docker pull registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:[镜像版本号]
$ docker pull registry.cn-hangzhou.aliyuncs.com/zsxnamespace/zsxcangku:2.0

4、选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址,推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登

录。

5、示例

使用docker tag命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker images
REPOSITORY    registry.aliyuncs.com/acs/agent                                                     
TAG           0.7-dfb6816        
IMAGE ID      37bb9c63c8b2 
CREATED       7 days ago            
VIRTUAL SIZE  37.89 MB

$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

使用 “docker push” 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的图书进销存管理系统【附源码】

基于SpringBoot的图书进销存管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 图书类型管理 5.3 商品…

【雪球-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

JavaWeb 实验一

实验一 环境配置和Web工程的创建 目的&#xff1a; 掌握Java Web编程环境的配置创建简单的Web工程&#xff0c;并了解Web工程下各目录的作用掌握部署、运行Web工程的流程 实验过程&#xff1a; 一、完成如下要求。 安装并设置JDK 1.8、Tomcat 9.0&#xff08;tomcat和jdk版…

如何才能开发出最适合自己公司的网站?

开发最适合自己公司的网站是一个综合性的项目&#xff0c;需要从多个角度进行考虑和规划。以下是一些关键步骤和建议&#xff1a; 一、明确目标与定位 确定网站目标&#xff1a;明确网站的核心目的&#xff0c;如提升品牌知名度、展示公司产品或服务、促进销售、提供客户服务…

Zabbix_5.0 构建企业级监控告警平台----图形监控

目录 Apache监控示例&#xff08;图形监控&#xff09; 创建主机群组&#xff08;192.xx.xx.10&#xff09; 创建主机&#xff08;192.xx.xx.10&#xff09; 创建图形 查看是否添加成功 Apache监控示例&#xff08;图形监控&#xff09; 创建主机群组&#xff08;192.xx.…

数字化时代,住宅代理是怎样为企业赋能的?

在数字化时代&#xff0c;企业的发展也面临着转型&#xff0c;一方面是未知的挑战&#xff0c;一方面是不可多得的机遇。如何在全球市场中保持竞争力是企业要认真思考的问题。如果说主动寻找出路太过冒险&#xff0c;那不妨试试内省式的自我管理革新。代理服务器是一种中介服务…

LIN总线CAPL函数—— 设置与测量从节点的波特率(linSetRespBaudrate)

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

springsecurity+jwt实现前后端分离认证授权

文章目录 1.简介2.快速入门3.认证3.1登录校验流程3.2原理初探3.3认证详流程详解3.4 分析UsernamePasswordAuthenticationFilter 4.案例实战4.1 思路分析4.2准备工作4.3实战1.数据库校验用户2.核心代码1.创建UserDetailsService实现类2.创建UserDetails实现类3.密码加密存储模式…

基于Python的自然语言处理系列(13):TorchText + GRU + 上下文向量 + Teacher Forcing

在上一篇文章中&#xff0c;我们使用了LSTM来构建一个序列到序列模型&#xff08;seq2seq&#xff09;。虽然LSTM表现良好&#xff0c;但我们想看看能否通过使用门控循环单元&#xff08;GRU&#xff09;并改进信息压缩的方式来提升模型性能。GRU和LSTM在很多场景下表现相似&am…

Windows Server2016多用户登录破解

使用场景 很多时候&#xff0c;公司开发和测试运维会同时登录同一台windows服务器进行查询、更新、维护等操作&#xff0c;本文就来介绍一下Windows2016配置多人远程桌面登录实现&#xff0c;感兴趣的可以了解一下。 操作流程 &#xff08;1&#xff09;首先桌面需要安装远程…

etcd之etcd简介和安装(一)

1、etcd简介 1.1 etcd简介 etcd 是开源的、高可用的分布式key-value存储系统&#xff0c;可用于配置共享和服务的注册和发现&#xff0c;它专注于&#xff1a; 简单&#xff1a;定义清晰、面向用户的API&#xff08;gRPC&#xff09; 安全&#xff1a;可选的客户端TLS证书自…

uni-app功能 1. 实现点击置顶,滚动吸顶2.swiper一个轮播显示一个半内容且实现无缝滚动3.穿透修改uni-ui的样式

uni-app项目中遇到的功能 文章目录 uni-app项目中遇到的功能一、实现点击置顶&#xff0c;滚动吸顶、1.1、scroll-view设置不生效的原因和解决办法1.2 功能代码 二、swiper一个轮播显示一个半内容且实现无缝滚动三、穿透修改uni-ui的样式 一、实现点击置顶&#xff0c;滚动吸顶…

PMP--二模--解题--1-10

文章目录 4.整合管理--商业文件--商业论证&#xff08;是否值得所需投资、高管们决策的依据&#xff09;反映了&#xff1a;1、 [单选] 收到新项目的客户请求之后&#xff0c;项目经理首先应该做什么&#xff1f; 14.敏捷--角色--产品负责人PO–职责–1.创建待办列表并排序;2.确…

EmguCV学习笔记 VB.Net 12.3 OCR

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

MATLAB给一段数据加宽频噪声的方法(随机噪声+带通滤波器)

文章目录 引言方法概述完整代码:结果分析结论参考文献引言 在信号处理领域,添加噪声是模拟实际环境中信号传输时常见的操作。宽频噪声可以用于测试系统的鲁棒性和信号处理算法的有效性。本文将介绍如何使用 M A T L A B MATLAB MATLAB给一段数据添加宽频噪声,具体方法是结合…

漏洞挖掘 | Selenium Grid 中的 SSRF

Selenium 网格框架上的基本服务器端请求伪造 最近&#xff0c;我正在阅读漏洞文章看到Peter Jaric写的一篇 Selenium Grid 文章&#xff1b;他解释了 Selenium Grid 框架上缺乏身份验证和安全措施强化的问题。 在网上进行了更多搜索&#xff0c;我发现 Selenium Grid 开箱即用…

古诗词四首鉴赏

1、出自蓟北门行 唐李白 虏阵横北荒&#xff0c;胡星曜精芒。 羽书速惊电&#xff0c;烽火昼连光。 虎竹救边急&#xff0c;戎车森已行。 明主不安席&#xff0c;按剑心飞扬。 推毂出猛将&#xff0c;连旗登战场。 兵威冲绝漠&#xff0c;杀气凌穹苍。…

打开C嘎嘎的大门:你好,C嘎嘎!(1)

前言&#xff1a; 小编在学习完一些数据结构以后&#xff0c;终于&#xff0c;我还是来到了这一步&#xff0c;开始学习我小学就听说过的C&#xff0c;至于为什么标题写的C嘎嘎&#xff0c;因为小编觉着这样好念而且有意思&#xff0c;今天是小编学习C嘎嘎的第一天&#xff0c;…

零信任安全架构--最小权限原则

最小权限原则&#xff08;Principle of Least Privilege, PoLP&#xff09;是零信任安全架构中的核心理念之一&#xff0c;旨在确保用户、设备、应用等系统实体只拥有完成其任务所必需的最低权限&#xff0c;避免不必要的权限扩展&#xff0c;从而降低安全风险。 1. 概念 最小…

LabVIEW闪退

LabVIEW闪退或无法启动可能由多个原因引起&#xff0c;特别是在使用了一段时间后突然发生的问题。重启电脑后 LabVIEW 和所有 NI 软件都无法打开&#xff0c;甚至在卸载和重装时也没有反应。这种情况通常与系统环境、软件冲突或 NI 软件组件的损坏有关。 1. 检查系统和软件冲突…