在这篇文章中,我们将带领您了解4、Docker学习,DockerFile自定义Tomcat的全貌,包括docker安装自定义存储目录的相关情况。同时,我们还将为您介绍有关11、Dockerfile实战
在这篇文章中,我们将带领您了解4、Docker 学习,DockerFile 自定义 Tomcat的全貌,包括docker安装自定义存储目录的相关情况。同时,我们还将为您介绍有关11、Dockerfile 实战 - Tomcat、3、Docker 学习,理论知识,第三天 --DockerFile、docker 14 dockerfile自定义mycentos、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose的知识,以帮助您更好地理解这个主题。
本文目录一览:- 4、Docker 学习,DockerFile 自定义 Tomcat(docker安装自定义存储目录)
- 11、Dockerfile 实战 - Tomcat
- 3、Docker 学习,理论知识,第三天 --DockerFile
- docker 14 dockerfile自定义mycentos
- Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
4、Docker 学习,DockerFile 自定义 Tomcat(docker安装自定义存储目录)
Docker 学习
一、DockerFile 自定义 Tomcat9
测试下面的两个保留字指令
3.7》、ADD 将宿主机目录下的文件拷贝进镜像且ADD命令自动处理URL和解压tar压缩包
ADD centos-7-docker.tar.xz
(COPY直接拷贝,ADD拷贝+解压缩)
3.8》、COPY 类似ADD,拷贝文件和目录到镜像中
COPY src desc 或 COPY["src","desc"]
案例:
1、创建tomcat9目录 mkdir tomcat9
2、创建文件 touch c.txt
3、将JDK和tomcat安装包的压缩包拷贝进上一步目录
apache-tomcat-9.0.8.tar.gz
jdk-8u171-linux-x64,tar.gz
4、在tomcat9下新建Dockerfile文件,目录内容:
FROM centos
MAINTAINER mytomcat_lee<james_taylor@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64,tar.gz
ADD apache-tomcat-9.0.8.tar.gz
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的workdir路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的接口
EXPOSE 8080
#启动运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
5、构建build镜像
docker build Dockerfile -t mytomcat9 .
(-f 目录file )
6、测试docker images
7、运行
docker run -d -p 9080:8080 --name myt9
-v /opt/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test
-v /opt/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs
--privileged=true
mytomcat9
(--privileged=true是防止-v挂载容器卷的时候写权限不够而添加的)
8、docker ps
9、http://localhost:9080
10、在/opt/tomcat9/test下扔一个项目 测试下myt9是否可以跑
11、docker restart myt9 重启容器
11、Dockerfile 实战 - Tomcat
一、编写 Dockerfile
具体步骤这里不再细说,直接看 Dockerfile 文件:
FROM centos:7
MAINTAINER QUNXUE
ENV VERSION=8.0.46
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
#RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
COPY apache-tomcat-${VERSION}.tar.gz /
RUN cd / && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir -p /usr/local/tomcat/webapps/test && \
echo "ok" >/usr/local/tomcat/webapps/test/status.html && \
sed -i ''1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh","run"]
二、制作镜像
docker build -t tomcat:v1 -f Dockerfile .
最后结果如下:
查看镜像:
三、测试镜像
docker run -d --name tomcat01 -p 8011:8080 tomcat:v1
通过宿主机的 8011 端口就可以访问到容器的 tomcat 服务。
可以看到,我们的容器跑起来了,但是,正常情况下,我们的 tomcat 是跑 war 包的,后面学习 CI/CD 都需要用到 Jenkins,他就有 war 包,所以我们去官网下载一个 Jenkins 的 war 包吧。
再次制作镜像:
Dockerfile-jenkins 文件:
FROM tomcat:v1
COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war
制作 Jenkins 镜像:
docker build -t jenkins:v1 -f Dockerfile-jenkins .
测试镜像:
docker run -d --name jenkins -p 8012:8080 jenkins:v1
查看结果:
我们可以看到,Jenkins 直接起来可以使用了!
3、Docker 学习,理论知识,第三天 --DockerFile
Docker 学习
一、DockerFile 解析
1、DockerFile 是什么
DockerFile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤:
1、手动编写一个DockerFile文件
2、docker build,获得一个自定义的镜像
3、docker run
2、DockerFile 构建过程解析
基础知识:
2.1》、每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
2.2》、知名按照从上到下,顺序执行
2.3》、#表示注释
2.4》、每条指令都会创建一个新的镜像层,并对镜像进行提交
大致执行流程:
2.1》、docker从基础镜像运行一个容器(一定会有一个基础镜像)
2.2》、执行一条指令并对容器做出修改
2.3》、执行类似docker commit的操作提交一个新的镜像层
2.4》、docker再基于刚提交的镜像运行一个新容器
2.5》、执行dockerfile中的下一条指令到所有制令都执行完成
①、dockerfile 是软件原材料 ====build====>②、docker 镜像是软件的交付品 ====run===>③、docker 容器则是软件的一个运行状态
3、DockerFile 保留字指令
3.1》、FROM 基础镜像,当前新的镜像是基于那个镜像的
FROM scratch
3.2》、MAINTAINER 镜像维护者的姓名和邮箱地址
MAINTAINER The CentOs Project <james_taylor@126.com>
3.3》、RUN 容器构建的时候需要运行的命令
RUN groupadd -r redis && useradd -r -g redis redis
3.4》、EXPOSE 当前容器对外暴露出的端口
EXPOSE 6379
3.5》、WORKDIR 制定在创建容器后,终端默认登录进来的工作目录,一个落脚点
WORKDIR /data
3.6》、ENV 用来在构建镜像的过程中设置环境变量
ENV MY_PATH /usr/mytest
(这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前制定了环境变量前缀一样,也可以在其他指令中直接使用这些环境变量,如 WORKDIR $MY_PATH)
3.7》、ADD 将宿主机目录下的文件拷贝进镜像且ADD命令自动处理URL和解压tar压缩包
ADD centos-7-docker.tar.xz
(COPY直接拷贝,ADD拷贝+解压缩)
3.8》、COPY 类似ADD,拷贝文件和目录到镜像中
COPY src desc 或 COPY["src","desc"]
3.9》、VOLUME 容器数据卷,用于数据保存和持久化[HOST和容器目录文件映射]
VOLUME myFile:myFileContainer
3.10》、CMD 指定一个容器启动时要运行的命令
(DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换)
shell格式: CMD <命令>
exec格式: CMD ["可执行文件","参数1","参数2"]
(即 docker run -it centos /bin/bash 会覆盖dockerfile文件中的CMD 命令)
3.11》、ENTRYPOINT 指定一个容器启动时要运行的命令
(EBTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数)
(和CMD不同的是,CMD会被覆盖,ENTRYPOINT会被追加)
3.12》、ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发
ONBUILD RUN echo "hello...world"
(类似于触发器,只要有子镜像继承了‘我’,就会处罚这条命令)
3.13》、LABEL 标签
4、DockerFile 自定义镜像 myCentOS
Base 镜像 scratch,DockerHub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的
需求:修改centos登录后的默认路径、支持vim编辑器、支持ip addr查看网络配置
代码:
4.1、创建mycentos DockerFile文件
FROM centos ##本地centos镜像
MAINTAINER mycentosmlee<james_taylor@126.com> ##作者介绍
ENV MYPATH /usr/local ##设置变量
WORKDIR $MYPATH ##默认登录后进入tmp路径
RUN yum -y install vim ##安装vim
RUN yum -y install net-tools ##安装网络适配器
EXPOSE 80 ##对外暴露端口80
CMD echo $MYPATH ##输出 mypath
CMD echo "success.....ok" ##输出 success。。。ok
CMD /bin/bash ##运行/bin/bash
4.2、构建 docker build -f dockerfile文件路径 -t 新镜像的名字:TAG .
(TAG版本号.当前目录)
4.3、docker images 查看新创建的镜像
4.4、docker run -it mycentos:1.3
(检测目录 ip addr vim)
4.5、docker history 镜像ID 列出镜像的变更历史
5、DockerFile 的 CMD 和 ENTERPOINT 命令案例
都是指定一个容器启动时要运行的命令
回忆:
3.10》、CMD 指定一个容器启动时要运行的命令
(DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换)
shell格式: CMD <命令>
exec格式: CMD ["可执行文件","参数1","参数2"]
(即 docker run -it centos /bin/bash 会覆盖dockerfile文件中的CMD 命令)
3.11》、ENTRYPOINT 指定一个容器启动时要运行的命令
(EBTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数)
(和CMD不同的是,CMD会被覆盖,ENTRYPOINT会被追加)
案例:
CMD
在hub.docker.com中tomcat dockerfile文件的最后有一句话:
CMD ["catalina.sh", "run"] ##启动tomcat
我们测试 docker run -it tomcat ls -l 会发现列出了/usr/local/tomcat的目录列表
docker ps 发现tomcat没有运行,证明CMD ["catalina.sh", "run"]没有被执行,而是执行了ls -l
ENTERPOINT
先测试下这个:
curl http://ip.cn 会将该网址的页面信息输出
curl -s http://ip.cn
curl -s -i http://ip.cn
1)、创建myCurlDockerFile文件,内容:
FROM centos
RUN yum -y install curl
CMD ["curl","-s","http://ip.cn"]
2)、build文件生成镜像
docker build -f myCurlDockerFile -t myip .
3)、run镜像
docker run -it myip
4)、测试 curl -s -i http://ip.cn
5)、测试 增加一个 -i 的参数
docker run -it myip -i
类似 在CMD ["curl","-s","http://ip.cn"]后增加了一行CMD -i
6)、将CMD 变成ENTERPOINT
FROM centos
RUN yum -y install curl
ENTERPOINT ["curl","-s","http://ip.cn"]
7)、build文件生成镜像
docker build -f myCurlDockerFile2 -t myip2 .
8)、run镜像
docker run -it myip2
9)、run镜像
docker run -it myip2 -i
类似在ENTERPOINT ["curl","-s","http://ip.cn"]中增加了参数
ENTERPOINT ["curl","-s","-i","http://ip.cn"]
6、DockerFile 的 ONBUILD 命令案例
3.12》、ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后,父镜像的ONBUILD被触发
案例:
1、创建myonbuild文件
FROM centos
RUN yum -y install curl
ENTERPOINT ["curl","-s","http://ip.cn"]
ONBILD RUN echo "hello...world"
2、build生成镜像并run
docker build -f myonbuild -t myip_father .
docker images
docker run myip_father
3、创建myonbuild2文件
FROM myip_father
RUN yum -y install curl
CMD ["curl","-s","http://ip.cn"]
4、build生成镜像并run
docker build -f myonbuild -t myip_son .
docker images
docker run myip_son
docker 14 dockerfile自定义mycentos
Base镜像(scratch)
Docker Hub中99%的镜像是通过在base镜像中安装和配置需要的软件构建出来的。也就是说base镜像是所有其他镜像的鼻祖。
hub默认centos镜像是什么情况
[root@t-docker chenzx]# docker run -it centos
[root@ef7873879474 /]# vim a.txt ##默认ceonts不支持vim命令
bash: vim: command not found
[root@ef7873879474 /]# ifconfig ##默认centos不支持ifconfig命令
bash: ifconfig: command not found
自定义镜像mycentos
1、编写Dokcerfile文件
[root@t-docker mycentos]# cat Dockerfile
FROM centos
MAINTAINER chenzx chenzx@11.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 "success-----ok"
CMD /bin/bash
2、构建
语法:docker build -t 新镜像名字:TAG .
[root@t-docker mycentos]# docker build -f ./Dockerfile -t mycentos:1.3 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 5182e96772bf
Step 2/10 : MAINTAINER chenzx chenzx@11.com
---> Running in bf692c9a8f30
Removing intermediate container bf692c9a8f30
---> be7c6d72dcf6
Step 3/10 : ENV MYPATH /usr/local
---> Running in bfbe973063c4
Removing intermediate container bfbe973063c4
---> b6117be61d21
Step 4/10 : WORKDIR $MYPATH
---> Running in dc207977e37e
Removing intermediate container dc207977e37e
---> a299de1b142d
Step 5/10 : RUN yum -y install vim
---> Running in 7b18a2ea02ba
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirror.bit.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package vim-enhanced.x86_64 2:7.4.160-4.el7 will be installed
--> Processing Dependency: vim-common = 2:7.4.160-4.el7 for package: 2:vim-enhanced-7.4.160-4.el7.x86_64
--> Processing Dependency: which for package: 2:vim-enhanced-7.4.160-4.el7.x86_64
--> Processing Dependency: perl(:MODULE_COMPAT_5.16.3) for package: 2:vim-enhanced-7.4.160-4.el7.x86_64
--> Processing Dependency: libperl.so()(64bit) for package: 2:vim-enhanced-7.4.160-4.el7.x86_64
---> 41b54eafc062
Step 6/10 : RUN yum -y install net-tools
---> Running in 4fe95a3f928d
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
Resolving Dependencies
--> Running transaction check
Step 7/10 : EXPOSE 80
---> Running in b49331f041a0
Removing intermediate container b49331f041a0
---> 255ce503616b
Step 8/10 : CMD echo $MYPATH
---> Running in 0c8a45aa210f
Removing intermediate container 0c8a45aa210f
---> b70d750b50c6
Step 9/10 : CMD echo "success-----ok"
---> Running in 0f82aaeab3af
Removing intermediate container 0f82aaeab3af
---> 41680031171e
Step 10/10 : CMD /bin/bash
---> Running in 5694bd9a1dab
Removing intermediate container 5694bd9a1dab
---> 0c868c56748b
Successfully built 0c868c56748b
Successfully tagged mycentos:1.3
[root@t-docker mycentos]#
3、运行
[root@t-docker mycentos]# docker run -it mycentos:1.3
[root@28ab180a72d7 local]# pwd ##落脚点是/usr/local
/usr/local
[root@28ab180a72d7 local]# vim a.txt ##vim命令也有了
[root@28ab180a72d7 local]# ifconfig ##ifconfig命令有了
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@28ab180a72d7 local]#
4、列出镜像的变更历史
功能:从底下往上看,可以看出制作mycentos镜像的历史过程。
[root@t-docker mycentos]# docker images mycentos
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.3 0c868c56748b 12 minutes ago 442MB
[root@t-docker mycentos]# docker history 0c868c56748b
IMAGE CREATED CREATED BY SIZE COMMENT
0c868c56748b 12 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
41680031171e 12 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
b70d750b50c6 12 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
255ce503616b 12 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
1cb7e8747969 12 minutes ago /bin/sh -c yum -y install net-tools 93.7MB
41b54eafc062 12 minutes ago /bin/sh -c yum -y install vim 149MB
a299de1b142d 13 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
b6117be61d21 13 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
be7c6d72dcf6 13 minutes ago /bin/sh -c #(nop) MAINTAINER chenzx chenzx@… 0B
5182e96772bf 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:6340c690b08865d7e… 200MB
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-2213388/,如需转载,请注明出处,否则将追究法律责任。
Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
Docker 学习路线 11:Docker命令行
Docker CLI (命令行界面) 是一个强大的工具,可让您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在其开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。
安装
要开始使用 Docker CLI,您需要在计算机上安装 Docker。您可以从 Docker 文档的官方安装指南中按照您所使用的操作系统进行安装。
基本命令
以下是一些基本的 Docker CLI 命令,供您熟悉:
docker run
:从 Docker 映像创建并启动容器docker container
:列出正在运行的容器docker image
:列出系统中所有可用的映像docker pull
:从 Docker Hub 或其他注册表拉取映像docker push
:将映像推送到 Docker Hub 或其他注册表docker build
:从 Dockerfile 构建映像docker exec
:在正在运行的容器中运行命令docker logs
:显示容器的日志
Docker Run 选项
docker run
是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:
d, --detach
:在后台运行容器e, --env
:为容器设置环境变量v, --volume
:绑定挂载卷p, --publish
:将容器的端口发布到主机name
:为容器指定名称restart
:指定容器的重启策略rm
:容器退出时自动删除容器
Dockerfile
Dockerfile 是一个包含构建 Docker 映像的指令的脚本。您可以使用 Docker CLI 使用 Dockerfile 构建、更新和管理 Docker 映像。
以下是 Dockerfile 的一个简单示例:
# Set the base image to use
FROM alpine:3.7
# Update the system and install packages
RUN apk update && apk add curl
# Set the working directory
WORKDIR /app
# Copy the application file
COPY app.sh .
# Set the entry point
ENTRYPOINT ["./app.sh"]
要构建映像,请使用以下命令:
docker build -t my-image .
Docker Compose
Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协作,提供了一种一致的方式来管理多个容器及其依赖项。
使用官方的安装指南安装 Docker Compose,然后您可以创建一个 docker-compose.yml
文件来定义和运行多容器应用程序:
version: ''3''
services:
web:
image: webapp-image
ports: - "80:80"
database:
image: mysql
environment: - MYSQL_ROOT_PASSWORD=my-secret-pw
使用以下命令运行应用程序:
docker-compose up
总之,Docker CLI 是管理 Docker 容器和资源的强大而多才多艺的工具。一旦熟悉其命令和功能,您将能够轻松开发、维护和部署使用 Docker 的应用程序。
Docker镜像
Docker镜像是一种轻量级、独立、可执行的软件包,其包含了运行应用程序所需的所有组件。这些组件包括:依赖项、库、运行时、系统工具和代码等,以确保应用程序在不同的环境中可以保持一致地运行。
Docker镜像是使用Dockerfile进行构建和管理的。Dockerfile是一个包含了创建Docker镜像所需指令的脚本,提供了一个逐步设置应用程序环境的指南。
使用Docker镜像
Docker CLI提供了多个命令来管理和使用Docker镜像。其中一些重要的命令包括:
docker image ls
:列出本地系统上所有可用的镜像。docker build
:从Dockerfile构建镜像。docker image rm
:删除一个或多个镜像。docker pull
:从注册表(如Docker Hub)将镜像拉到本地系统。docker push
:将镜像推送到仓库。
例如,要从Docker Hub拉取官方的Ubuntu镜像,可以运行以下命令:
docker pull ubuntu:latest
拉取镜像后,可以使用docker run
命令创建和运行一个使用该镜像的容器:
docker run -it ubuntu:latest /bin/bash
这个命令将创建一个新的容器,并使用**/bin/bash
** shell在容器内启动一个交互式会话。
共享镜像
Docker镜像可以使用容器注册表(如Docker Hub、Google Container Registry或Amazon Elastic Container Registry(ECR))共享和分发。一旦将您的镜像推送到注册表中,其他人就可以轻松地访问和使用它们。
要共享您的镜像,您首先需要使用适当的命名格式对其进行标记:
docker tag <image-id> <username>/<repository>:<tag>
然后,您可以使用以下命令将标记的镜像推送到注册表中:
docker push <username>/<repository>:<tag>
总之,Docker镜像是Docker生态系统中不可或缺的一部分,允许开发人员打包其应用程序、轻松地共享它们,并在不同的环境中确保一致性。通过理解Docker镜像和管理它们的命令,您可以利用容器化的力量,增强您的开发工作流程。在您的开发过程中使用Docker镜像可以大大提高开发效率,减少开发过程中的问题,让您能够更好地专注于应用程序的核心开发。
容器
容器可以被视为轻量级的、独立的可执行软件包,包括运行所需的所有东西,包括代码、运行时、库、环境变量和配置文件。容器将软件与其环境隔离开来,确保其在不同环境下工作一致。
为什么使用容器?
- 可移植性:容器确保应用程序在不同平台上一致工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上运行”的问题。
- 效率:容器很轻量级,因为它们使用共享资源,没有完整操作系统的开销。这使得启动时间更快,减少资源使用。
- 可扩展性:容器可以根据工作量轻松地进行缩放,因此非常适合分布式应用程序和微服务。
- 一致性:容器使得开发人员、QA 和运维团队在整个应用程序生命周期中拥有一致的环境,从而加快了部署流程。
- 安全性:容器提供了一定程度的隔离,使其与其他容器和底层主机系统隔离开来,有助于维护应用程序的安全性。
使用 Docker CLI 工作
Docker CLI 提供了多个命令,可帮助您创建、管理和与容器交互。一些常用命令包括:
docker run
:用于创建和启动新容器。docker container ls
:列出运行中的容器。docker container stop
:停止运行中的容器。docker container rm
:删除已停止的容器。docker exec
:在运行中的容器中执行命令。docker logs
:获取容器的日志,有助于调试问题。
Docker卷
Docker卷是一种用于存储Docker容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。
卷的重要性
Docker容器本质上是暂时的,这意味着它们可以轻松地停止、删除或替换。尽管这对应用程序开发和部署非常有利,但处理持久性数据时会带来挑战。这就是卷的作用。它们提供了一种将数据存储和管理与容器的生命周期分开的方法。
卷的类型
Docker中有三种类型的卷:
- 主机卷:它们存储在主机机器的文件系统中,通常位于
/var/lib/docker/volumes
目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性问题。 - 匿名卷:这些是在运行容器时没有指定卷时自动生成的。它们的ID由Docker生成,也存储在主机机器的文件系统中。
- 命名卷:与匿名卷类似,命名卷也存储在主机机器的文件系统中。但是,您可以提供自定义名称,这样在其他容器中引用或备份时更容易。
使用Docker CLI管理卷
Docker CLI提供了各种命令来管理卷:
docker volume create
: 使用给定的名称创建新卷。docker volume ls
: 列出系统中的所有卷。docker volume inspect
: 提供有关特定卷的详细信息。docker volume rm
: 删除卷。docker volume prune
: 删除所有未使用的卷。
要在容器中使用卷,可以在docker run
命令期间使用-v
或--volume
标志。例如:
docker run -d --name my-container -v my-named-volume:/var/lib/data my-image
此命令使用“my-image”映像创建一个名为“my-container”的新容器,并在容器内部将“my-named-volume”卷挂载到/var/lib/data
路径。
Docker 网络
Docker 网络提供了管理容器通信的重要方法。它允许容器使用各种网络驱动程序相互通信并与主机机器通信。通过理解和利用不同类型的网络驱动程序,您可以设计容器网络以适应特定的场景或应用程序需求。
网络驱动程序
Docker 中有几个可用的网络驱动程序。这里,我们将介绍四个最常见的驱动程序:
- bridge:容器的默认网络驱动程序。它创建了一个私有网络,容器可以相互通信并与主机机器通信。在此网络上的容器可以通过主机网络访问外部资源。
- host:该驱动程序取消了网络隔离并允许容器共享主机的网络。在网络性能至关重要的情况下,它非常有用,因为它最小化了容器网络的开销。
- none:该网络驱动程序禁用容器网络。使用此驱动程序的容器在没有任何网络访问的隔离环境下运行。
- overlay:该网络驱动程序使部署在不同主机上的容器能够相互通信。它专为 Docker Swarm 设计,并且非常适合多主机或基于集群的容器部署。
管理 Docker 网络
Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:
- 列出所有网络:
docker network ls
- 检查网络:
docker network inspect <network_name>
- 创建新网络:
docker network create --driver <driver_type> <network_name>
- 将容器连接到网络:
docker network connect <network_name> <container_name>
- 将容器与网络断开连接:
docker network disconnect <network_name> <container_name>
- 删除网络:
docker network rm <network_name>
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
关于4、Docker 学习,DockerFile 自定义 Tomcat和docker安装自定义存储目录的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于11、Dockerfile 实战 - Tomcat、3、Docker 学习,理论知识,第三天 --DockerFile、docker 14 dockerfile自定义mycentos、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose等相关知识的信息别忘了在本站进行查找喔。
本文标签: