GVKun编程网logo

4、Docker 学习,DockerFile 自定义 Tomcat(docker安装自定义存储目录)

4

在这篇文章中,我们将带领您了解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安装自定义存储目录)

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  descCOPY["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

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

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"
2build生成镜像并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"]
4build生成镜像并run
	docker build -f myonbuild -t myip_son .
	docker images
	docker run myip_son

docker 14 dockerfile自定义mycentos

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 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 自定义 Tomcatdocker安装自定义存储目录的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于11、Dockerfile 实战 - Tomcat、3、Docker 学习,理论知识,第三天 --DockerFile、docker 14 dockerfile自定义mycentos、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose等相关知识的信息别忘了在本站进行查找喔。

本文标签: