Docker笔记-Docker Dockerfile

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 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

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-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.xdnf.cn/news/145435.html

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

相关文章

元学习的简单示例

代码功能 模型结构&#xff1a;SimpleModel是一个简单的两层全连接神经网络。 元学习过程&#xff1a;在maml_train函数中&#xff0c;每个任务由支持集和查询集组成。模型先在支持集上进行训练&#xff0c;然后在查询集上进行评估&#xff0c;更新元模型参数。 任务生成&…

C#自定义曲线绘图面板

一、实现功能 1、显示面板绘制。 2、拖动面板&#xff0c;X轴、Y轴都可以拖动。 3、显示面板缩放&#xff0c;放大或者缩小。 4、鼠标在面板中对应的XY轴数值。 5、自动生成的数据数组&#xff0c;曲线显示。 6、鼠标是否在曲线上检测。 二、界面 拖动面板 鼠标在曲线上…

Linux —— 多线程

一、本篇重点 1.了解线程概念&#xff0c;理解线程与进程区别与联系 2.理解和学会线程控制相关的接口和操作 3.了解线程分离与线程安全的概念 4.学会线程同步。 5.学会互斥量&#xff0c;条件变量&#xff0c;posix信号量&#xff0c;以及读写锁 6.理解基于读写锁的读者写…

《JKTECH柔性振动盘:原理与多行业应用》东莞市江坤自动化科技有限公司

一、柔性振动盘的原理 柔性振动盘是一种新型的自动化上料设备&#xff0c;它采用先进的音圈电机技术和柔性振动技术&#xff0c;实现了对各种不规则形状、微小尺寸、易损伤零部件的高效上料和分拣。 其工作原理主要包括以下几个方面&#xff1a; 1. 音圈电机驱动 柔性振动盘内部…

分布式系统的概念与设计模式

概念 定义&#xff1a;分布式系统是指将数据和计算任务分散到多个独立的计算机上&#xff0c;这些计算机通过网络进行通信和协作&#xff0c;共同对外提供服务。分布式系统不仅提高了系统的可靠性和可扩展性&#xff0c;还增强了系统的并发处理能力和数据管理能力。 特点&…

运维开发之堡垒机(Fortress Machine for Operation and Development)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

mysql通过binlog做数据恢复

1 介绍 binlog&#xff08;二进制日志&#xff09;在 MySQL 中具有非常重要的作用。它记录了数据库的所有更改操作&#xff0c;主要用于数据恢复、复制和审计等方面。以下是 binlog 的主要作用&#xff1a; 1.数据恢复 binlog 可以用于恢复数据库中的数据。当数据库发生故障时…

分布式框架 - ZooKeeper

一、什么是微服务架构 1、单体架构 顾名思义一个软件系统只部署在一台服务器上。 ​ 在高并发场景中&#xff0c;比如电商项目&#xff0c;单台服务器往往难以支撑短时间内的大量请求&#xff0c;聪明的架构师想出了一个办法提高并发量&#xff1a;一台服务器不够就加一台&am…

微信小程序拨打电话点取消报错“errMsg“:“makePhoneCall:fail cancel“

问题&#xff1a;微信小程序中拨打电话点取消&#xff0c;控制台报错"errMsg":"makePhoneCall:fail cancel" 解决方法&#xff1a;在后面加上catch就可以解决这个报错 wx.makePhoneCall({phoneNumber: 181********}).catch((e) > {console.log(e) //用…

数据安全治理

数据安全治理 1.数据安全治理2.终端数据安全加密类权限控制类终端DLP类桌面虚拟化安全桌面 3.网络数据安全4.存储数据安全5.应用数据安全6.其他话题数据脱敏水印与溯源 7.UEBA8.CASB 1.数据安全治理 数据安全治理最为重要的是进行数据安全策略和流程制订。在企业或行业内经常发…

前端实用工具(二):编程规范化解决方案

目录 本地代码规范化工具 代码检测工具ESLint 代码格式化工具Prettier 远程代码规范化工具 远程提交规范化工具commitizen 提交规范检验工具commitlint husky 什么是git hooks commitlint安装 husky安装 检测代码提交规范 ESLint husky 自动修复格式错误lint-staged…

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍&#xff1f;二、什么是 Puppeteer-Cluster&#xff1f;三、为什么代理在网络抓取中很重要&#xff1f;四、 为什么使用带代理的 Puppeteer-Cluster&#xff1f;五、分步指南&#xff1a; 带代理的 Puppeteer 群集5.1. 步骤 1&#xff1a;安装所需程序库5.2. …

基于 ROS 的Terraform托管服务轻松部署ChatGLM2-6B

介绍 ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础上&#xff0c;ChatGLM2-6B具有更强大的性能、更长的上下文、更高效的推理等特性。 资源编排服务&#xff08;Resource Orchestration…

C++入门 之 类和对象(下)

目录 一、初始化列表 二、隐式类型转换与explict 三、静态成员——static 四、友元 五、内部类 六、匿名对象 七.对象拷贝时的编译器优化 一、初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&…

闯关leetcode——66. Plus One

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/plus-one/description/ 内容 You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from mo…

pdf文件怎么直接翻译?使用这些工具让翻译变得简单

在全球化日益加深的职场环境中&#xff0c;处理外语PDF文件成为了许多职场人士面临的共同挑战。 面对这些“加密”的信息宝库&#xff0c;如何高效、准确地将英文pdf翻译成对应语言&#xff0c;成为了提升工作效率的关键。 以下是几款在PDF翻译领域表现出色的软件&#xff0c…

基于 UniApp 平台的学生闲置物品售卖小程序设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

寄存器二分频电路

verilog代码 module div2_clk ( input clk, input rst,output clk_div);reg clk_div_r; assign clk_div clk_div_r;always(posedge clk) beginif(rst)beginclk_div_r < 1b0;endelsebeginclk_di…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据&#xff0c;检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》

近日&#xff0c;全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape&#xff1a;中国数据安全技术发展路线图&#xff0c;2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用&#xff0c;被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出&#xff0c;数据安…