目录

一 导入docker镜像启动容器

二、下载镜像

三、镜像的名称

四、导出和导入镜像

五 从镜像运行启动容器

​六  容器启动后运行的命令

七  ENTRYPOINT 和 CMD

八  启动容器时覆盖 ENTRYPOINT 和 CMD

九、-d 后台运行

十  docker exec 进入容器,运行指定命令

十一  --name 和 --restart=always

十二、--rm 和 docker cp

十三  文件的挂载

1 -v 目录挂载

2 数据卷挂载

十四 网络

1  端口映射

2 虚拟网络

十五 构建镜像

1 文件下载

2 构建镜像

3 准备必要的文件

4 Dockerfile

5 执行构建

6  启动容器


Docker(一) - 离线安装

Docker(二)- 镜像
Docker(三)- 从镜像运行启动容器

一 导入docker镜像启动容器

1.克隆 docker-base: docker

2.设置ip

./ip-static
ip: 192.168.64.150ifconfig

3.上传文件

  • docker-images.gz
  • tomcat文件按夹

4.导入镜像

docker load -i docker-images.gz

二、下载镜像

从镜像仓库 https://hub.docker.com 下载镜像:

# 下载 redis 镜像, 默认下载 redis:latest
docker pull redis:5.0.12# 查看镜像列表
docker images

Docker 镜像是一组静态磁盘文件,可以任意下载、复制、分发。从镜像可以运行启动容器(Docker的虚拟计算机)。

三、镜像的名称

镜像的名称由两部分组成:repository:tag,其中的 tag 一般用来表示版本,默认的 tag 是 latest,表示最近的版本。

镜像的名称相当于在镜像上贴的一个标签,在一个镜像上可以贴多个标签:

添加名称:在一个镜像上可以贴多个标签:

删除:

镜像的名称可以被删除,只有唯一的一个名称时会删除镜像:多个的话删除还有其他的,只有一个删除的话,就彻底没有了镜像

四、导出和导入镜像

导出镜像并压缩到压缩文件:

 多个镜像可以压缩到同一个文件,取名为:a.gz

  • 删除多个镜像磁盘文件--redis和centos:8

导入镜像:

从压缩的镜像文件a.gz可以再次把redis和centos:8镜像导入

五 从镜像运行启动容器

从一个镜像可以运行启动一个或多个容器。

所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用。

Docker(三)- 从镜像运行启动容器_wanght笔记-CSDN博客

从 tomcat 镜像启动容器:

docker run tomcat

容器启动后在容器中运行了 tomcat 应用。

这样启动会占用命令行,可以用 ctrl+c 退出 tomcat 应用。当容器中没有任何应用运行时,容器也会自动关闭退出

查看容器:

六  容器启动后运行的命令

在镜像中指定的默认运行命令:

tomcat 镜像中设置的 CMD 指令指定了容器启动后默认运行的命令: catalina.sh run

其他镜像中设置的默认命令:

docker history redis---------------------------------------------------------------------------------
[root@localhost ~]# docker history redis
IMAGE          CREATED       CREATED BY                                      SIZE
bc8d70f9ef6c   3 weeks ago   /bin/sh -c #(nop)  CMD ["redis-server"]         0B
<missing>      3 weeks ago   /bin/sh -c #(nop)  EXPOSE 6379                  0B
<missing>      3 weeks ago   /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0Bdocker history mariadb---------------------------------------------------------------------------------
[root@localhost ~]# docker history mariadb
IMAGE          CREATED       CREATED BY                                      SIZE
eff629089685   13 days ago   /bin/sh -c #(nop)  CMD ["mysqld"]               0B
<missing>      13 days ago   /bin/sh -c #(nop)  EXPOSE 3306                  0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0Bdocker history centos:8----------------------------------------------------------------------------------
[root@localhost ~]# docker history centos:8
IMAGE          CREATED        CREATED BY                                      SIZE
300e315adb2f   6 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B

七  ENTRYPOINT 和 CMD

这两向设置都是用来设置容器中运行的命令。

  • 只设置 CMD 来执行 ls -a -l
CMD ["ls", "-a", "-l"]

只设置 CMD 是常见的用法。

  • 用 ENTRYPOINT 和 CMD 两个一起设置来执行 ls -a -l
ENTRYPOINT ["ls"]
CMD ["-a", "-l"]

两项一起设置时,会把两项设置的内容连接起来作为一个完整的命令

八  启动容器时覆盖 ENTRYPOINT 和 CMD

覆盖 CMD
以 tomcat 镜像为例,镜像中设置的默认命令是 catalina.sh run,可以任意指定命令覆盖这个默认命令,这里执行 ls -a -l 来测试:

docker run tomcat ls -a -l

覆盖 ENTRYPOINT
--entrypoint:设置运行的命令,不许写在镜像名称 tomcat 的前面。注意,这里不能添加命令的参数;

镜像名称 tomcat 后面的内容会覆盖 CMD

docker run --entrypoint ls tomcat -a -l

九、-d 后台运行

后台运行启动 tomcat 容器:

查看后台运行的容器:

# 只查看运行的容器
docker ps # 查看所有容器,包括已停止的容器
docker ps -a# 仅列出容器的 id
docker ps -aq

查看容器的日志:

可以使用容器的名称或 id,使用id是允许至少写三位,能与其他id区分即可

docker logs 4d3

十  docker exec 进入容器,运行指定命令

绝大多数情况下一个容器中只运行一个应用。

容器中也允许运行启动多个应用,可以进入已经启动的容器, 在里面运行启动其他应用:

# 进入容器,运行指定的命令
docker exec -it 4d3 pwd              #i代表交互,t代表打开终端
docker exec -it 4d3 touch f1.txt     #tomcat容器中创建文件
docker exec -it 4d3 ls -l# 启动 top 查看进程列表
# ctrl+c 可以退出top
docker exec -it 4d3 top# 启动bash命令行
# exit 可以退出bash
docker exec -it 4d3 bash

十一  --name 和 --restart=always

--name
每个启动的容器都可以指定一个名称,方便使用名称来操作容器。

--restart=always
docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。

# cat1容器可以随系统启动
docker run -d \
--name cat1 \
--restart=always \
tomcat# cat2系统重启后默认是关闭状态,不会自动启动
docker run -d \
--name cat2 \
tomcat# 查看容器
docker logs cat1docker inspect cat1# 重启docker系统服务
systemctl restart docker# 查看容器,可以看到 cat1 自动重启了,而 cat2 处于关闭状态
docker ps -a

十二、--rm 和 docker cp

--rm:
有时候我们会临时使用一个容器之后这个容器就不再使用,添加 --rm 参数可以在容器停止时自动删除容器

docker cp:
在容器和宿主机之间复制文件

下面来看一个实际的例子,这个例子中我们从 tomcat 的一个临时容器复制配置文件 server.xml 到宿主机,然后在 server.xml 中修改端口号,把 8080 改成 80。

# 启动一个临时容器
docker run -d \
--rm \
--name tmp \
tomcat# 把 tomcat 的 server.xml 复制到宿主机的 /root/ 目录下
docker cp tmp:/usr/local/tomcat/conf/server.xml  /root/# 停止临时容器,会自动删除
docker stop tmpdocker ps -a# 修改 server.xml 中的8080端口,改成80   #查找文件中的关键字使用  /关键字
vim server.xml# -v 把宿主机路径挂载到容器的一个路径
# 挂载的路径可以是文件,也可以是文件夹
# 这里把修改过的 server.xml 挂载到新启动的容器中
docker run -d \
--name cat2 \
-v /root/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat# 查看启动日志,确认使用 80 端口启动
docker logs cat2

十三  文件的挂载

-v 目录挂载

上面例子中用到 -v 参数,他可以将宿主机的路径挂载到容器指定路径,通过 -v 参数可以挂载文件、目录和数据卷。

挂载目录:

# 清理容器  -f表示强制删除     docker container prune 清理所有停止的容器
docker rm -f $(docker ps -aq)          # -v 宿主机路径:容器路径
# 挂载的可以是文件,也可以是文件夹
# -v 可以在宿主机自动新建目录
docker run -d \
--name cat1 \
-v /usr/app:/opt/app \
tomcat# 进入容器,在 /opt/app 下新建文件 f1.txt
docker exec -it cat1 bashtouch /opt/app/f1.txt# 退出容器的命令行
exit# 访问宿主机的文件夹
cd /usr/app
ls

  • 进入容器,在 /opt/app 下新建文件 f1.txt并查看文件

2 数据卷挂载

# 新建数据卷
docker volume create my-vol# 查看 my-vol 数据卷的信息
docker volume ls# /var/lib/docker/volumes/my-vol/_data
docker inspect my-vol# 挂载 my-vol 数据卷到容器的 /opt/app 路径
docker run -d \
--name cat2 \
-v my-vol:/opt/app \
tomcat# 在容器的 /opt/app 下新建 f2.txt
docker exec -it cat2 bashtouch /opt/app/f2.txt# 退出容器的命令行
exit# 进入 my-vol 数据卷的真实目录,查看 f2.txt
cd /var/lib/docker/volumes/my-vol/_datals

十四 网络

1  端口映射

客户端要访问宿主机内部运行的容器时,可以在宿主机打开一个端口,当客户单访问这个端口时,可以将访问转发到内部的容器。

-p 参数:
通过 -p 参数设置,可以在宿主机上选择一个端口映射到容器的端口。

# 清理容器
docker rm -f $(docker ps -aq)# 端口映射
# -p 宿主机端口:容器端口
docker run -d \
--name cat1 \
-p 80:8080 \
tomcat

浏览器访问宿主机映射的端口 80
http://192.168.64.150

看到 tomcat 返回的 404 页,说明已经正常访问到 tomcat 容器

2 虚拟网络

容器键互联可以使用 Docker 的虚拟网络来连接。

在 Docker 中可以创建任意多个虚拟网络,容器之间可以通过虚拟网络互联互通。创建虚拟网络时宿主机也会连接到虚拟网络。

# 清理容器
docker rm -f $(docker ps -aq)# 新建虚拟网络 my-net
docker network create my-net# 查看虚拟网络
docker network ls# 查看网络描述信息
docker inspect my-net# 查看宿主机新建的虚拟网卡
ifconfig# 清理容器
docker rm -f $(docker ps -aq)# 新建两个容器 cat1 和 cat2
# 连接到虚拟网络 my-net
docker run -d --name cat1 \
--net my-net \
tomcatdocker run -d --name cat2 \
--net my-net \
tomcat# 查看两个容器的虚拟网络ip
docker inspect cat1
docker inspect cat2# 测试网络能否互联互通
# 从宿主机ping两个容器
ping 172.18.0.2
ping 172.18.0.3# 进入cat1,ping宿主机和cat2
docker exec -it cat1 ping 172.18.0.1
docker exec -it cat1 ping 172.18.0.3
# 从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境
docker exec -it cat1 ping cat2

十五 构建镜像

1 文件下载

2 构建镜像

构建镜像类似于一台电脑的装机过程,添加文件、安装软件、配置环境…

例如构建一个 tomcat 10 镜像流程,就像在一台电脑上安装配置 tomcat 环境一样:

  1. 选择基础镜像 centos:8(相当于一台新电脑,只有操作系统)
  2. 添加 jdk 和 tomcat 文件
  3. 设置环境变量
  4. 设置开机启动 tomcat

下面来演示构建 tomcat 10 镜像的过程:

3 准备必要的文件

jdk 和 tomcat 10 的压缩文件放入一个文件夹中,这个文件夹不应该包含其他无关文件:

[/root/tomcat/]- jdk-8u291-linux-x64.tar.gz- apache-tomcat-10.0.6.tar.gz

4 Dockerfile

Dockerfile 类似于一个批处理文件,用来设置镜像的构建流程

在上一步的 tomcat 文件夹下创建 Dockerfile 文件:

[/root/tomcat/]- jdk-8u291-linux-x64.tar.gz- apache-tomcat-10.0.6.tar.gz- Dockerfile

编辑 Dockerfile 文件:

cd /root/tomcatvim Dockerfile

在文件中添加以下内容:都已编辑好

# 选择基础镜像
FROM centos:8# jdk 和 tomcat 文件添加到镜像的 /usr/local/ 目录下
# ADD 指令会自动解压文件
ADD jdk-8u291-linux-x64.tar.gz apache-tomcat-10.0.6.tar.gz /usr/local/# 切换到镜像中指定的文件夹下
WORKDIR /usr/local/apache-tomcat-10.0.6/# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_291 \CATALINA_HOME=/usr/local/apache-tomcat-10.0.6 \PATH=/usr/local/jdk1.8.0_291/bin:/usr/local/apache-tomcat-10.0.6/bin:$PATH# EXPOSE 8080 只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
# 这个声明有两个好处:
#   1.帮助镜像使用者理解这个镜像服务的端口,以方便配置映射
#   2.在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口
EXPOSE 8080# 设置启动命令
CMD ["catalina.sh", "run"]

Dockerfile 指令参考手册:
Dockerfile reference | Docker Documentation

5 执行构建

进入 tomcat 文件夹,并在当前文件夹下找到 Dockerfile 和其他需要的文件,来构建镜像:

cd /root/tomcat# 使用当前文件夹中的 Dockerfile 文件进行构建
# 新构建的镜像命名为 tomcat:10
docker build -t tomcat:10 ./

每一串号码算是一个镜像层,尽量减少镜像层的空间

其中:如果有一层有一个a文件,我们进入这一层但是无法去删除a文件,只能新创建一个镜像层用于删除a文件,此时我们只是在这一层看不到a文件,但是进入到a文件所在的层,还是能看到a文件的

查看构建结果:

docker imagesdocker history tomcat:10docker inspect tomcat:10

6 tomcat:10 新建页面文件端口映射,挂载ROOT路径目录,进行web应用

# 新建文件夹目录
mkdir /opt/web/# 编辑一个index.jsp 文件
vim /opt/web/index.jsp#输入以下内容<h1>Hell world!</h1><h1>Hell ${param.name}!</h1>#清理容器
docker rm -f $(docker ps -aq)# 端口映射到宿主机80端口 ;挂载目录
docker run -d --name web \
--restart=always \
-p 80:8080 \
-v /opt/web:/usr/local/apache-tomcat-10.0.6/webapps/ROOT \
tomcat:10浏览器访问: http://192.168.64.150/?name=zhangsan

7  启动容器

docker run -d --name cat1 -p 8080:8080 tomcat:10docker ps -adocker logs cat1

浏览器访问测试:
http://192.168.64.150:8080

五阶段--Docker相关推荐

  1. Bete冲刺第五阶段

    Bete冲刺第五阶段 今日工作: web: 今日做的最大的工作是成功顺利的吧web部署到阿里云服务器上了,代码顺利在公网上跑,解决了与ios的网络连接问题.同时优化了几个接口的查询逻辑,减少了对数据库 ...

  2. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  3. 1.(单选题) HTML是指,《计算机应用基础》第五阶段在线作业(自测).doc

    <计算机应用基础>第五阶段在线作业(自测) 1.第1题?? 单选题??HTML是指( ). A.超文本标识语言 B.超文本文件 C.超媒体文件 D.超文本传输协议 标准答案:A您的答案:A ...

  4. 微服架构基础设施环境平台搭建 -(五)Docker常用命令

    微服架构基础设施环境平台搭建 -(五)Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -(一)基础环境准备 微服架构基 ...

  5. 5. 第五阶段 测试开发技术 - JAVA

    5. 第五阶段 测试开发技术 - JAVA 第一章 初识JAVA java简介 java语言的特性 搭建java环境 第一个java程序 public class Helloworld{public ...

  6. ACR:修片的五阶段工作流程

    Adobe Camera Raw(简称为 ACR )与 Adobe Lightroom Classic(简称为 Lr )使用的是相同的图像处理引擎,随 Ps 一起安装,并可作为 Ps 中的滤镜来使用. ...

  7. 传统武式太极拳练习五阶段

    学习参考 传统武式太极拳练习五阶段 太极是一门学问,它要求人们客观.辩证.一分为二地对待事物.看待问题.分析问题.解决问题.它是以万事.万物的本身皆有既互相对立又互相统一的哲理为基础的一种思想认识.我 ...

  8. 罗宾斯的五阶段冲突理论(转载)

    罗宾斯的五阶段冲突理论 罗宾斯的五阶段冲突理论 什么是罗宾斯的五阶段冲突理论? 管理学家斯蒂芬•P•罗宾斯提出五阶段冲突理论,把冲突的过程分为无个阶段:潜在的对立,认知和情感投入,行为意向,行为,结果 ...

  9. 基于五阶段流水线的RISC-V CPU模拟器实现

    RISC-V是源自Berkeley的开源体系结构和指令集标准.这个模拟器实现的是RISC-V Specification 2.2中所规定RV64I指令集,基于标准的五阶段流水线,并且实现了分支预测模块 ...

最新文章

  1. POJ-1041 John's trip
  2. 转:如何进行软件架构设计?
  3. bzoj4589: Hard Nim
  4. zabiix监控磁盘io
  5. Qt工作笔记-Qt5新版信号与槽
  6. Intra Chroma Prediction
  7. 《巴伦周刊》评选出全球最佳30位CEO:马化腾再次上榜
  8. iOS WKWebView和JS交互的两种方式
  9. 9.特殊矩阵的压缩存储
  10. springboot 通过@Value读取自定义属性文件变量获取结果为null
  11. 一图区分1.85mm/2.4mm/2.92mm/3.5mm/SMA射频接头
  12. 自适应滤波器的FPGA实现
  13. c语言节点的作用,C语言试题
  14. 三丰三坐标编程基本步骤_smt工程师总结smt贴片机编程步骤
  15. 川土微电子|数字隔离器替代光耦817
  16. dell台式机进入安全模式_戴尔电脑如何进入安全模式?
  17. 神秘的百度工业互联网,到底有多厉害?
  18. java 3D学习笔记
  19. 使用pymysql报错:pymysql.err.InternalError: Packet sequence number wrong - got 5 expected 1
  20. 串口的TXD、RXD、GND分别是什么意思?

热门文章

  1. 自己写的一键生成小楼房的插件。
  2. Python的重要优点和缺点是什么
  3. 什么是MySQL分区表
  4. kotlin - 数据类data
  5. 商城秒杀活动实现思路
  6. C++设计模式 - 建造者模式(Builder)
  7. 对话赞奇科技总经理金伟:云渲染何以成为元宇宙“基建”
  8. java为什么要实例化?实例化的对象和引用...
  9. 史上十大免费下载应用和服务
  10. 「每日分享」Java程序员的荣光,听R大论JDK11的ZGC