Docker笔记-Docker Dockerfile

ops/2024/11/13 15:27:58/

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 文件,并在文件内添加以下内容:

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 上新建一层,所以过多无意义的层,会造成镜像膨胀过大。

例如:

dockerfile">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 命令行参数中指定要运行的程序所覆盖。

注意:如果 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 nginxENTRYPOINT ["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.0RUN 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

dockerfilemydockerfilecentos_411">6.1 编写dockerfile文件(mydockerfile-centos)

dockerfile">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
dockerfile">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
dockerfile">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文件

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-storeLogin 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.ppmy.cn/ops/113671.html

相关文章

Python类及元类的创建流程

Python类及元类的创建流程 代码运行结果再看type和object的关系和约定type和object具有的方法不一样看代码和运行结果&#xff0c;可以完全理解python的执行过程。再补充几点&#xff0c; 代码 class MetaCls(type):print(0>>>, MetaCls, 0)def __init__(self, name,…

Langchain-chatchat源码部署及测试实验

一年多前接触到Langchain-chatchat的0.2版本,对0.2版本进行了本地部署和大量更新,但0.2版本对最新的大模型支持不够好,部署框架支持也不好且不太稳定,特别是多模态大模型,因此本次主要介绍0.3版本的源码部署,希望对大家有所帮助。Langchain-chatchat从0.3版本开始,支持更…

射击靶标检测系统源码分享

射击靶标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

主流卷积神经网络CNN总结

ResNet&#xff08;2015&#xff09;残差神经网络 残差结构 ResNet50具体卷积结构图 ResNeXt&#xff08;2016&#xff09;加入了分组卷积的思想&#xff0c;将原ResNet网络中的block替换成由group分组的block&#xff0c;两者得到的feature map一致&#xff0c;只是参数量更少…

【数据结构】排序算法---基数排序

文章目录 1. 定义2. 算法步骤2.1 MSD基数排序2.2 LSD基数排序 3. LSD 基数排序动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 ⚠本节要介绍的不是计数排序 1. 定义 基数排序&#xff08;英语&#xff1a;Radix sort&#xff09;是一种非比较型的排序算法&…

如何在安卓設備上更換IP地址?

IP地址是設備在網路中的唯一標識&#xff0c;通過IP地址&#xff0c;網路能夠識別並與設備進行通信。本文將詳細介紹在安卓設備上更換IP地址的幾種方法。 在安卓設備上更換IP地址的方法 1. 使用Wi-Fi網路更換IP地址 最簡單的方法是通過Wi-Fi網路更換IP地址。步驟如下&#x…

【Gateway】Gateway Filter Factories

Predicate决定了请求由哪一个路由处理,如果在请求处理前后需要加一些逻辑,这就是Filter(过滤器)的作用范围了.Filter分为两种类型:Pre类型和Post类型 滤器的两种类型 Pre 类型过滤器: 执行时机: 在请求被转发到后端服务之前执行。作用: 可以用来执行鉴权、限流、请求日志记录、…

【C++指南】inline内联函数详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…