Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

这篇具有很好参考价值的文章主要介绍了Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


💖The Begin💖点点关注,收藏不迷路💖

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

一、docker容器数据卷

1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。
2、重要数据back_up

特点:

实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止。

1.1、使用docker容器数据卷

使用命令挂载
docker run -it  -v /宿主机绝对路径:/容器内目录 镜像名

案例:
1、容器/home目录挂载至宿主机/home/ceshi目录

docker run -it  -v /宿主机绝对路径:/容器内目录 镜像名

[root@zyl-server ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@83e82e6509e6 /]# 

测试——宿主机:

[root@zyl-server /]# cd /home/ceshi/
[root@zyl-server ceshi]# ll
total 0
[root@zyl-server ceshi]# 
[root@zyl-server ceshi]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED         STATUS          PORTS                                       NAMES
83e82e6509e6   centos                "/bin/bash"    5 minutes ago   Up 5 minutes                                                priceless_volhard
99974acec585   portainer/portainer   "/portainer"   11 days ago     Up 11 minutes   0.0.0.0:8088->9000/tcp, :::8088->9000/tcp   blissful_mclaren
[root@zyl-server ceshi]# 

查看数据卷是否挂载成功

docker inspect 容器id
[root@zyl-server ceshi]# docker inspect 83e82e6509e6

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
测试:

宿主机:
[root@zyl-server ceshi]# ll
total 0
[root@zyl-server ceshi]# touch test.java
[root@zyl-server ceshi]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 28 21:52 test.java
[root@zyl-server ceshi]# 


容器内查看test.java文件是否同步:
[root@83e82e6509e6 /]# cd /home/
[root@83e82e6509e6 home]# ls
test.java
[root@83e82e6509e6 home]# 

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

停止容器,在宿主机修改挂载目录文件,依旧可以实现数据同步(修改文件只需在宿主机修改即可,容器内会自动同步)。

1.2、具名挂载、匿名挂载

1、匿名挂载
## -v 容器内路径
docker run -d -P --name=nginx01 -v /etc/nginx nginx

[root@zyl-server ~]# docker run -d -P --name=nginx01 -v /etc/nginx nginx
a562312cab24a00dae2e9c01b02113e92372d71a0025c46aa5d2cf32b99ebdd4

## 查看容器内所有volume 的情况
[root@zyl-server ~]# docker volume ls
DRIVER    VOLUME NAME
local     192e75fc04cf12757b855fa03c4f14c69bcb3e81034670f43cde7086920760c4
local     00601bab7587cbdd2c5985707b1b5f7e7e570d19d7f5941980677cf8f3ca509a
local     4583527b6a150e898423c0533ae82ca5022cef13769f9b5cb66b2253d3a734fb
local     4985806fac61d833ac29f155155817156262b7c93ce3264450ab1b1e06f23f5a
[root@zyl-server ~]# 
[root@zyl-server ~]# 

这就是匿名挂载,在-v 只写了容器内的路径,没有写容器外(宿主机)的地址

2、具名挂载
通过 -v  卷名:容器内路径 
docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx nginx


[root@zyl-server ~]# docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx nginx
f0e149830cef370054f35a4ccd3e281d31231604c763ce7713c199a850978172
[root@zyl-server ~]# 


查看这个具名挂载的juming-nginx
[root@zyl-server ~]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2023-08-28T22:20:54+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
[root@zyl-server ~]# 


docker 在没有指定目录的情况下,容器内的卷都在’/var/lib/docker/volumes/卷名/_data’

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

我们通过具名挂载可以方便的找到卷,大多数情况使用的都是具名挂载。

1.3、如何确定是具名挂载还是匿名挂载

-v 容器内路径      ##匿名挂载
-v 卷名:容器内路径    ###具名挂载
-v /宿主机路径:容器内路径    ##指定路径挂载

拓展:读写规则映射添加

docker run -it --privileged=true  -v /宿主机绝对路径:/容器内目录:ro(只读,默认可读可写) 镜像名

ro  ##只读,如果有ro则说明只能通过宿主机来操作,容器内无法操作
rw  ##可读可写

二、使用dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

2.1 初识Dockerfile

通过docker 构建一个简单镜像。

[root@zyl-server ~]# mkdir docker-test-volume
[root@zyl-server ~]# cd docker-test-volume/

###创建一个dockfile文件 
[root@zyl-server docker-test-volume]# vi dockerfile01
[root@zyl-server docker-test-volume]# 

dockerfile01 文件内容,每个命令就是镜像的一层:

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"

CMD /bin/bash

build镜像:


###zyl 为镜像名,最后的. 表示生成在当前目录下
[root@zyl-server docker-test-volume]# docker build -f /root/docker-test-volume/dockerfile01  -t zyl/centos:1.0 .

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
报错:
构建Dockerfile中FROM私库镜像报错构建失败。

问题解决:
Docker在v23.0版本及以后,使用了build-kit代替了旧的实现,目前build-kit对insecure-registries配置可能没做兼容,构建Dockerfile FROM镜像时未判断是私库,导致报错。

[root@zyl-server docker-test-volume]# docker -v
Docker version 24.0.5, build ced0996
[root@zyl-server docker-test-volume]# 

在 ~/.bashrc 或 /etc/profile 添加一行 export DOCKER_BUILDKIT=0,然后 source 修改的配置文件。

命令示例:

echo "export DOCKER_BUILDKIT=0" >> ~/.bashrc
source ~/.bashrc

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

启动刚构建的容器:

## docker run -it  镜像id
[root@zyl-server docker-test-volume]# docker run -it 1179bafa65b3 /bin/bash
[root@a47d66371273 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@a47d66371273 /]# 

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
在刚构建的容器数据卷中volume0、volume02中
创建文件测试:

容器内:
[root@zyl-server docker-test-volume]# docker run -it 1179bafa65b3 /bin/bash
[root@bd3c420a9d03 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@bd3c420a9d03 /]# cd volume0
bash: cd: volume0: No such file or directory
[root@bd3c420a9d03 /]# cd volume01
[root@bd3c420a9d03 volume01]# ls
[root@bd3c420a9d03 volume01]# touch test.java
[root@bd3c420a9d03 volume01]# ls
test.java
[root@bd3c420a9d03 volume01]# 



宿主机:
[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED             STATUS             PORTS                                       NAMES
bd3c420a9d03   1179bafa65b3          "/bin/bash"              2 minutes ago       Up 2 minutes                                                   funny_mccarthy
f0e149830cef   nginx                 "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:32769->80/tcp, :::32769->80/tcp     nginx02
a562312cab24   nginx                 "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:32768->80/tcp, :::32768->80/tcp     nginx01
99974acec585   portainer/portainer   "/portainer"             11 days ago         Up 2 hours         0.0.0.0:8088->9000/tcp, :::8088->9000/tcp   blissful_mclaren


###查看卷挂载目录:
[root@zyl-server ~]# docker inspect bd3c420a9d03

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

##卷挂载成功
[root@zyl-server _data]# cd /var/lib/docker/volumes/0b1be7a1e5b351e70dcf5b172e6a6b834f6b8f0f9fd72cb718793fc1ddab6b8d/_data
[root@zyl-server _data]# ls
test.java
[root@zyl-server _data]# 

==在刚构建的容器内创建文件,容器外也有。==

这种方式未来使用较多,因为我们需要构建自己的镜像,假如构建镜像时没有挂载卷,则需要手动挂载,使用 -v 卷名:容器内路径方式。

2.2 Dockerfile构建过程

Dockerfile 是面向开发的,,需要发布项目、制作镜像,就需要编写Dockerfile文件,这个文件十分简单!!!!

Docker镜像逐渐成为企业交付的标准,必须要掌握!!!

构建三步骤(开发、部署、运维)
· 编写Dockerfile文件,定义了一切步骤,源代码
· docker build命令构建镜像,最终发布和运行产品
· docker run依镜像运行容器实例

Dockerfile内容基础知识
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层并对镜像进行提交

Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

2.3 Dockerfile指令

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

1、FROM  指定一个已存在的基础镜像当做模板,镜像本身就是分层的,这里的From就是指定基础层。

此指令必需放在有效指令的第一行。怎么选择合适的镜像呢?
对于不同的软件官方都提供了相关的docker镜像,比如:nginx、redis、mysql、httpd、tomcat等服务类的镜像,也有操作系统类,如:centos、ubuntu、debian等。建议使用官方镜像,比较安全。

e.g.

FROM ubuntu
FROM nginx
如上示例,可以指定Ubuntu这种操作系统镜像作为基础镜像,也可以指定类似nginx这种已经二次应用镜像当做基础镜像。


2、LABEL  指定镜像元数据,如:镜像作者等

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

e.g.

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

3、MAINTAINER  指定镜像作者信息
MAINTAINER <name>
此指令已过时,用LABEL代替

e.g.

MAINTAINER zyl <zyl@163.com>
#用LABEL代替
LABEL maintainer="zyl <zyl@163.com>"

4、RUN 镜像构建时需要执行的shell命令

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

最佳实践:可以的话,尽量将多个run合并,减少容器层数文件层数。

e.g.

#shell 格式: 
RUN <命令> 

#exec 格式: 
RUN ["可执行文件", "参数1", "参数2"]

5、ADD 复制和解包文件,指定本地目录中的文件到容器中,可认为是增强版的COPY,不仅支持COPY,还支持解缩。
说明:

如果src是目录,只复制目录中的内容,而非目录本身
如果src是本地打包或压缩文件,如gzip, bzip2 ,xz ,将解包
如果src是一个 URL ,下载后的文件权限自动设置为 600


6、WORKDIR  镜像的工作目录

7、VOLUME 挂载的目录

8、EXPOSE 暴露端口

告诉 Docker 服务端容器暴露的端口号,供互联系统使用。

EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射

因此,在启动容器时需要通过 -P 或-p ,Docker 主机会分配一个端口转发到指定暴露的端口,才可以使用

9、COPY  复制文本
复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。

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

10、CMD   容器启动命令

指定启动容器时默认执行的命令,即:如果docker run没有指定任何的执行命令或者dockerfile里面也没有ENTRYPOINT,那么就会使用执行CMD指定的默认的命令

每个 Dockerfile 只能有一条 CMD 命令。如指定了多条,只有最后一条被执行

如果用户启动容器时指定了运行的命令,如:docker run xxx /bin/bash,则/bin/bash 会覆盖 CMD 指定的命令


11、ENTRYPOINT  入口点

功能类似于CMD,配置容器启动后执行的命令及参数,并且不可被 docker run 提供的参数覆盖,而是追加

如果docker run命令有参数,那么参数全部都会作为ENTRYPOINT的参数。如果docker run后面没有额外参数,但是dockerfile中的CMD里有(即上面CMD的第三种用法),那么CMD的全部内容会作为ENTRYPOINT的参数

可以通过docker run –entrypoint 参数在运行时替换

使用CMD要在运行时重新写命令才能追加运行参数,ENTRYPOINT则可以运行时接受新参数

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效


12、ONBUILD  子镜像引用父镜像的指令

可以用来配置当创建当前镜像的子镜像时,会自动触发执行的指令。

13、ENV  设置环境变量

指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持

Dockerfile文件指令总结:
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

2.4 实战—构建自己的一个centos

1、创建有关dockerfile目录

[root@zyl-server ~]# mkdir dockerfile
[root@zyl-server ~]# ll
total 4
-rw-------. 1 root root 1419 Aug 12 20:31 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Aug 29 23:30 dockerfile
drwxr-xr-x. 2 root root   51 Aug 28 22:50 docker-test-volume
[root@zyl-server ~]# cd dockerfile/
[root@zyl-server dockerfile]# ll
total 0
[root@zyl-server dockerfile]# vi mydockerfile
[root@zyl-server dockerfile]# 

2、编写构建文件

FROM centos 

MAINTAINER zyl<zyl@163.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

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

3、通过dockerfile文件构建镜像

[root@zyl-server dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .

报错:通过dockerfile yum -y install vim 安装 vim 时 ,从仓库 ‘appstream’ 下载元数据失败:由于镜像列表中没有 URL,不能准备内部镜像列表。

CentOS Linux 8 - AppStream                       75  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1

解决办法:

这是因为Centos8于2021年年底停止了服务,使用yum源安装时候,就会报错:Failed to download metadata for repo ‘AppStream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist”,这时我们需要在dockerfile文件指定centos版本小于8版本:

FROM centos:centos7

MAINTAINER zyl<zyl@163.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

再次构建镜像:

[root@zyl-server dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .
..............................
..............................
Successfully built a3e6ef33a458
Successfully tagged mycentos:1.0

###docker images  检查
[root@zyl-server dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     1.0       a3e6ef33a458   33 seconds ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago    204MB
[root@zyl-server dockerfile]# 

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

测试运行(自己构建的镜像与官方的centos原生镜像):
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

2.5 实战—构建自己的一个tomcat

创建工作目录


[root@zyl-server ~]# mkdir zyl-bulid
[root@zyl-server ~]# cd zyl-bulid/
[root@zyl-server zyl-bulid]# mkdir tomcat
[root@zyl-server zyl-bulid]# cd tomcat
[root@zyl-server tomcat]# ll
total 0
[root@zyl-server tomcat]#

1、准备jdk、tomcat压缩包
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

2、编写Dockerfile文件(官方命名:Dockerfile,build 时会自动寻找这个文件,就不再需要使用 -f 指定了)


FROM centos:centos7

MAINTAINER zyl<zyl@163.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u381-linux-x64.tar.gz /usr/local/

ADD apache-tomcat-9.0.73.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local

WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_381
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.73

ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.73

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.73/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.73/bin/logs/catalina.out

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

3、构建镜像

docker build -t mytomcat .
..............
..............
Successfully built 7b01ac741538
Successfully tagged mytomcat:latest

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
4、docker images 检查

[root@zyl-server tomcat]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mytomcat     latest    7b01ac741538   51 seconds ago   838MB
mycentos     1.0       a3e6ef33a458   46 minutes ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago    204MB
centos       latest    5d0da3dc9764   23 months ago    231MB
[root@zyl-server tomcat]#

5、运行镜像

1、运行
[root@zyl-server tomcat]# docker run -d -p 9090:8080 --name zyl-tomcat -v /home/zyl/projects/test:/usr/local/apache-tomcat-9.0.73/webapps/test -v /home/zyl/projects/tomcatlogs/:/usr/local/apache-tomcat-9.0.73/logs mytomcat
1706ccdbea21e820785d4edef01774263553578e664edf3ceafab2104f85e794
[root@zyl-server tomcat]#


2、进入容器
[root@zyl-server tomcat]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
1706ccdbea21   mytomcat   "/bin/sh -c '/usr/lo…"   2 minutes ago   Up 2 minutes   0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   zyl-tomcat
[root@zyl-server tomcat]# docker exec -it 1706ccdbea21 /bin/bash
[root@1706ccdbea21 local]#

3、测试访问

[root@zyl-server tomcat]# curl localhost:9090

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

浏览器访问:http://192.168.234.10:9090/

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

6、发布项目

由于做了卷挂载,在本地就可直接编写项目发布
1、进入挂载目录:/home/zyl/projects/test
2、新建index.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>


<h1>醉颜凉的第一个web项目。</h1>
<p>Hello Apache Tomcat/10.0.14</p>


</body>
</html>

7、访问项目(注意test为卷挂载目录)

http://192.168.234.10:9090/test/

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
8、日志查看

[root@zyl-server tomcatlogs]# pwd
/home/zyl/projects/tomcatlogs
[root@zyl-server tomcatlogs]#

[root@zyl-server tomcatlogs]# ll
total 24
-rw-r-----. 1 root root 6283 Aug 30 10:45 catalina.2023-08-30.log
-rw-r-----. 1 root root 6283 Aug 30 10:45 catalina.out
-rw-r-----. 1 root root    0 Aug 30 10:45 host-manager.2023-08-30.log
-rw-r-----. 1 root root  408 Aug 30 10:45 localhost.2023-08-30.log
-rw-r-----. 1 root root 1832 Aug 30 11:03 localhost_access_log.2023-08-30.txt
-rw-r-----. 1 root root    0 Aug 30 10:45 manager.2023-08-30.log
[root@zyl-server tomcatlogs]#

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

我们之后的一切,都是使用Dockerfile镜像来发布运行!!!!!!

三、发布镜像至阿里云

Docker基础入门:镜像、容器导入导出与私有仓库搭建

3.1、登录阿里云Docker Registry

[root@zyl-server tomcatlogs]# docker login --username=zhb1999 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
[root@zyl-server tomcatlogs]#

3.2、使用" docker push" 命令将centos镜像提交至阿里云

####将mytomcat 镜像IMAGE ID (7b01ac741538)提交至阿里云
[root@zyl-server tomcatlogs]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
mytomcat     latest    7b01ac741538   34 minutes ago      838MB
mycentos     1.0       a3e6ef33a458   About an hour ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago       204MB
centos       latest    5d0da3dc9764   23 months ago       231MB
[root@zyl-server tomcatlogs]#

###  推送
[root@zyl-server tomcatlogs]# docker tag 7b01ac741538 registry.cn-hangzhou.aliyuncs.com/zhaohaibao/mytomcat:9.0
[root@zyl-server tomcatlogs]# docker push  registry.cn-hangzhou.aliyuncs.com/zhaohaibao/mytomcat:9.0

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

提交发布的时候也是按层级进行提交的,发布时带上版本号!!!!

3.3、阿里云镜像仓库查看

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

四、总结—温故知新(图片来源于网络)

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布),容器化与编排技术深度解析,Docker基础入门,Docker容器数据卷,Dockerfile构建镜像,Dockerfile指令,Docker发布镜像至阿里云,Docker具名挂载、匿名挂载,Dockerfile使用文章来源地址https://www.toymoban.com/news/detail-682822.html


💖The End💖点点关注,收藏不迷路💖

到了这里,关于Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(45)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(45)
  • windows部署python项目(以Flask为例)到docker,通过脚本一键生成dockerfile并构建镜像启动容器

    这里使用 pipreqs 进行依赖库的识别。使用 pipreqs 可以自动检索到当前项目下的所有组件及其版本,并生成 requirements.txt 文件。相比直接用pip freeze 命令,避免将整个python环境的依赖包写入。 在项目的当前目录中执行 pipreqs ./ --encoding=utf8 --force 这里使用的是一个基于flask项目,

    2023年04月08日
    浏览(48)
  • 【Docker】Docker容器数据卷、容器卷之间的继承和DockerFIle的详细讲解

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL,感兴趣的小伙伴可以看看。 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️万物从心起,心动则万物动🏄

    2024年02月14日
    浏览(38)
  • Docker容器:docker数据管理、镜像的创建及dockerfile案例

    因为数据写入后如果停止了容器,再开启数据就会消失,使用数据管理的数据卷挂载,实现了数据的持久化,重启数据还会存在;还有一种方式,容器之间共享文件即相当于有个备份,也会解决停止容器后数据消失的问题。 管理 Docker 容器中数据主要有两种方式:数据卷(

    2024年02月12日
    浏览(48)
  • Docker学习入门(二):常用软件安装、掌握Docker迁移与备份、运用Dockerfile编写创建容器的脚本、搭建与使用docker私有仓库;

    Docker的学习目标: 4.掌握Tomcat Nginx等软件的常用的安装 5.掌握Docker迁移与备份相关命令 6.能够运用Dockerfile编写创建容器的脚本 7.能够搭建与使用docker私有仓库 8.学习总结 1.MYSQL的部署     (1)拉取mysql镜像          docker pull centos/mysql-57-centos7               (2)创建容

    2024年02月21日
    浏览(45)
  • Docker基础(镜像的结构,Dockerfile语法介绍,基于Ubuntu镜像来构建一个Java应用)

    要想自己构建镜像,必须先了解镜像的结构。 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。 因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运

    2024年02月20日
    浏览(42)
  • 【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解

    ✍ 面向读者:所有人 ✍ 所属专栏:Docker零基础入门专栏 目录 第 1 步:创建 Dockerfile 第 2 步:构建 Docker 镜像 第 3 步:运行 Docker 容器 第 4 步:验证输出 dockerfile命令详解 最佳实践 默认情况下,Docker 容器以 Root 用户身份运行。如果您在 Docker 容器内大规模部署应用程序,这

    2024年02月05日
    浏览(38)
  • Docker入门流程(创建容器到构建镜像)

    平时我们经常会遇到在自己电脑上运行的代码,在别人的电脑上运行就出现莫名其妙的问题,这种大多是因为代码”水土不服“,不同电脑的软件版本和依赖库不同,Docker的使用可以很好地解决这个问题。简单来说,Docker可以把 代码和代码运行的环境 一把打包,构建一个容

    2024年02月08日
    浏览(39)
  • 【编写DockerFile构建自己的容器】

    一、创建自己的CentOS (1)、编写自己的配置文件 (2)、生成目标镜像 docker build -f /home/dockerfile1/docker-centos -t docker-centos:1.0 . 命令: docker build -f 文件路径 -t 镜像名:【Tag】 (3)、测试运行 系统的原生镜像 我们制作的镜像 (4)、查看docker的构建流程 docker history eeb6ee3f44

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包