docker初学笔记

Docker的基本组成

docker利用容器(Container)独立运行的一个或一组应用;
容器时用镜像创建的运行实例
容器可以被启动、开始i、停止、删除。每个容器都是相互隔离的】保证安全的平台;
docker相当于一个精简版的虚拟机,只保留了运行应用是所需要的库(包括root用户权限、进程空间、用户空间和网络空间等和运行再其中的应用程序),摒弃了硬件模拟等;

docker三要素

  1. 镜像(images)相当于每个容器的模板
  2. 容器(container)每个容器的实例,应用都是部署在容器中的
  3. 仓库(repository)相当于java中的maven仓库,有一些打包好的镜像
    镜像:是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所哟内容,包括代码、运行时、库、环境变量和配置文件
    Docker镜像都是只读的,当容器地洞是,一个新的可写层被加载到镜像顶部。这一层通常被叫做容器层,容器层之下的都叫做镜像层;

docker的安装建议根据官网提示进行操作

https://docs.docker.com/engine/install/centos/

由于docker仓库默认使用海外镜像库,建议配置成国内阿里云或者网易镜像库

  1. systemctl daemon reload重新加载镜像配置文件
  2. systemctl restart docker重启docker服务

配置疑问可在阿里云查找文档dev.aliyun.com

docker常用命令

  1. docker -version //版本号

  2. docker -info //容器信息

  3. docker --help //docker帮助命令

  4. docker run [镜像名称] //运行一个镜像的实例(docker run 镜像)

  5. docker search 【镜像名称】从镜像仓库中搜索镜像

docker 镜像命令

docker images //列出本地目前已有的镜像

	1. REPOSITORY 表示镜像源
	2. TAG:镜像的标签(docker run时不加tag默认就是latest)
	3. IMAGE ID:镜像的id
	4. CREATED创建时间
	5. size镜像大小

docker images -a(镜像是分层的)显示所有包含中间镜像

docker images -qa 显示当前镜像所有镜像的id

docker images --digests显示镜像的摘要信息
doucker pull [镜像名字] TAG下载镜像(如果不加tag的话等价于下载最新版的,等价于 docker pull [镜像名]:latest)

在这里插入图片描述

docker images -qa //展示所有本地docer镜像id
docker rmi [唯一镜像名或镜像id] :tag //删除镜像
镜像正在使用删除失败

  • docker rmi -f [唯一镜像名或镜像id] :tag //强制删除删除镜像
  • 同时删除多个镜像以空格分隔
  • docker rmi -f ${docker images -qa}删除所有本地镜像

docker容器命令

(有镜像才能创建容器)所以在创建容器前要先pull下相应的镜像

  1. 新建并启动容器 doker run [options] --name [镜像id]
    * --name=’容器的新名字‘:为容器指定一个名称(如果不指定name则 默认随机分配)
    * options:启动容器时需要的启动模式通常使用-it
    * -i:以交互模式运行容器,通常与-t同时使用(启动容器后进行交互)
    * -t:为容器重新分配一个伪终端,通常与-i同时使用(登录容器后创建一个伪终端**命令窗口)
    * -d:后台运行容器,并返回容器id
    * -P:随机端口映射
    * -p:指定端口映射,有以下四种格式
    1. hostPort:containerPort
    比如docker run -it -p 8888:8080 【镜像id】,表示将容器中的8080端口启动容器后映射到宿主的8888端口
    上面的大写P是随机分配↑
    容器启动成功,并已进入容器中

  2. 列出当前所有正在运行的docker容器: docker ps

    • OPTIONS
    • -a 列出当前所有正在运行的容器+历史上运行过的
    • -l:显示最近创建的容器(上一个容器)
    • -n:显示最近n个创建的容器
    • -q静默模式,只显示容器编号
    • –no-trunc:不截断输出
  3. 退出容器 exit或者ctrl+p+q

    • exit关闭容器并退出
    • ctrl+P+Q退回到宿主机但不关闭容器
  4. 启动已经退出的容器doker start[容器id]

  5. 重启容器:docker restart [容器id]

  6. 关闭容器:docker stop

  7. 强制关闭容器:docker kill [容器id]

  8. 删除已停止的容器:docker rm [容器id](多个容器空格间隔,docker -f 强制删除)批量删除参照批量删除镜像,注意rm是删除容器,rmi是删除镜像

  9. 后台启动容器docker run -d --name [镜像id]

    • 问题:docker ps -a查看时发现进程容器已经退出,是因为Docker容器后台运行是必须有一个前台进程是启动的,容器运行的命令如果不是一些挂起的命令比如(top、tail),容器就会自动退出,比如容器当中部署了nginx是以守护进程的方式运行的,也会导致容器自动退出,所以要运行的程序要以前台进程的形式运行 例如docker run -d centos /bin/sh -c “while true;do echo hello xxxx;lsleep 2;done” shell编程没两秒钟打印hello xxxx
  10. 查看容器日志:docker logs -t -f --tail [容器id]

    • -t 加入时间戳
    • -f跟随最新的日志打印
    • –tail xx 显示最后xx条
  11. 查看容器内的进程:docker top [容器id]

  12. 查看容器内部细节:docker inspect 容器id

  13. 进入正在运行的容器:docker exec -it 【容器id】或者docker attach 【容器id】
    * docker attach 【容器id】 进入到容器的根目录
    * docker exec -it 【容器id】【需要在容器中执行的命令】在容器外面进行容器中的命令操作例如:docker exec -it 【容器id】 ls -l /tmp 表示在宿主机中查看容器内tmp目录下的内容,但是并没有进入到容器

  14. 从容器中拷贝数据到宿主机:docker cp 【容器id】:容器内部路径 目的主机路径

  15. 提交容器副本使之成为一个新的容器镜像:docker commit

    • docker commit -m=“提交的描述信息” -a “作者" [容器id] 要创建的目标镜像名称:[标签名]

Docker容器数据卷

即:容器关闭后运行数据就丢失了,容器数据卷既是容器内的运行数据持久化

Docker的理念:

  • 将运用于运行的而环境打包形成容器运行,容器内的运行数据可以持久化
  • 容器间的数据可以共享(Docker容器产生的数据,如果用docler commit是生成新的镜像是可以保存的)

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止
数据卷的添加
  1. 直接命令添加
    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    ** 如果写权限不够,可在命令最后添加 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 --privileged=true

1.1 -v /宿主机绝对路径目录:/容器内目录 命令会自动为宿主机和容器创建相应的目录,相当于mkdir,并建立容器于宿主机的连接实现数据共享
1.2 查看数据卷是否挂载成功
docker inspect [镜像id]
在这里插入图片描述
在这里插入图片描述

1.3 容器和宿主机之间数据共享
1.4 容器停止退出后,如果重新启动容器,宿主机修改的数据也会同时同步到容器
2. 命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
容器内的目录只读不可写

  1. DockerFile添加
    (例):
    使用VOLUME指给镜像添加一个或多个数据卷
    VOLUME[“容器目录1”,“容器目录2”,“容器目录3”,…]
    注意volume指令在dockerFile中只支持容器地址;因为考虑到镜像移植和分享的考虑,目录会有差异;所以VOLUME无法像直接用命令添加数据卷一样直接指定宿主机的关联目录,但会在宿主机随机生成一个目录进行关联,后面镜像创建后使用docker inspect [容器id]可查看
    3. 1. 根目录下新建目录mkdir /mydocker; cd mydocker
    3. 2. 编写dockerFile;vim dockerfile;
# volume test 
FROM cenos 				#以哪个镜像作为模板,类似java中的extends
VOLUME ["dataVolumeContainer1","/dataVolumeContainer2"]		#在当前的镜像下新建两个数据卷
CMD echo "finished,---------success1"; 			# 打印提示
CMD /bin/bash 						

#######
3. 3. 构建生成新镜像
docker build -f /mydocker/dockerfile -t zp/centos .
-f 文件,指定dockerfile路径为/mydocker/dockerfile
-t 命名空间,指定构建的新镜像的名字为zp/centos
. 新镜像保存到当前路径下
在这里插入图片描述

数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂在数据卷的容器,称之为数据卷容器;

类似于主从复制,其他机器挂载到已经有有数据卷的容器上,那么这个容器就是数据卷容器,从而实现了父容器到子容器的数据共享;

启动一个数据卷容器(即数据卷容器)
docker run -it --name dc01 ap/centos
启动一个挂载到dc01的容器
dco2
docker run -it --name dc02 --volumes -from dc01 ap/centos
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

DockerFile(重点)!!!

  • 定义

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

  • Dockerfile内容基础知识
  1. 每天保留字指令都必须为大写字母,且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
  • Docker执行Dockerfile的大致流程
  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新的容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

在这里插入图片描述

  • DockerFile体系结构(保留字指令)

FROM
基础镜像,当前编写的这个新的镜像是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露的端口号
WORKDIR
指定在容器创建后,终端默认登录进来的工作目录,一个落脚点;
如果没有指定则默认进入根目录
ENV
用来在构建镜像过程中设置环境变量
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样
比如:
定义:ENV MY_PATH /usr/local
使用:WORKDIR $MY_PATH
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置,但不会处理URL和解压缩
COPY src dest #shell脚本的写法
COPY [“src”,“dest”]
二者都可
VOLUME
容器数据卷,用于数据保存和持久化
CMD
指定一个容器启动时要运行的命令
CMD指令的格式和RUN相似,也是有两种格式:
shell 格式:CMD<命令>
exec格式:CMD [“可执行文件”,“参数1”,“参数2”…]
参数列表格式:CMD [“参数1”,“参数2”,…]在指定了ENTRYPOINT指令后,用CMD指定更具体的参数。
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数


ENTRYPOINT与CMD命令的区别就是,在运行run命令时,追加的参数会覆盖CMD的命令,而ENTRYPOINT的命令是追加
ONBUILD
触发器:
当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发
也就是当有镜像被继承时,当build新镜像时将执行被继承镜像dockerfile中的ONBUILD指令

USER
指定用户组或用户id可以运行此Dockerfile
.dockerignore
添加构建镜像需要忽略的

  • 列出镜像的变更历史

docker history [镜像名]

  • 补充知识centos 7安装docker

  1. 安装gcc yum -y install gcc
  2. yum -y install gcc-c++
  3. 根据docker官网要求卸载旧版
  • 安装后无法启动docker服务 注意centos7中新版docker服务启动的命令变为systemctl start docker

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种轻量级的容器化技术,可以将应用程序及其依赖打包成一个独立的容器,方便在不同环境中进行部署和运行。在使用Docker过程中,我总结了一些配套的笔记,以帮助更好地理解和使用Docker。 首先,搭建Docker环境是很重要的一步。通过安装Docker引擎,可以在本地或云服务器上运行和管理Docker容器。在安装好Docker后,需要配置Docker Swarm或Kubernetes集群,以实现容器的高可用和自动化管理。 其次,了解Docker镜像的概念。镜像Docker的基本单位,类似于虚拟机中的镜像文件。Docker镜像可以通过Dockerfile定义,其中包含了构建镜像的指令和依赖关系。我们可以通过Docker官方提供的镜像仓库Docker Hub)或私有镜像仓库获取自己所需的镜像,也可以通过自己构建镜像来满足特定的需求。 接着,理解容器的概念和使用方法。容器是镜像的实例,类似于一个独立的操作系统环境,但并不是一个完整的虚拟机。容器可以通过Docker命令进行创建、启动、停止、删除等操作。在容器内可以运行各种应用程序,并且容器与容器之间相互隔离,互不干扰。 此外,掌握Docker网络和存储管理。Docker网络可以通过创建自定义网络、容器互联等方式进行配置,以实现容器之间的通信。存储管理方面,Docker提供了多种存储驱动方式,可以创建并挂载数据卷,实现数据的持久化。 最后,学习Docker的监控和日志管理。通过使用Docker自带的监控工具或第三方监控工具,可以监控Docker容器的资源使用情况和运行状态。此外,Docker容器的日志输出也需要进行管理,可以将日志导出到文件或集中存储到外部系统中。 总之,Docker作为一种高效的容器化技术,能够提升应用的可移植性和可扩展性。熟悉这些配套笔记内容,可以帮助更好地理解和使用Docker,实现快速部署和迁移应用的目标。 ### 回答2: 狂神说是一位知名的程序员在网络上分享的教学视频,其中有关于Docker的配套笔记Docker是一个开源的容器化平台,使开发者能够在容器中打包应用程序和所有相关的依赖项,并进行部署和管理。在这个配套笔记中,狂神详细介绍了Docker的基本概念、背景和原理,并提供了许多实际操作的案例。 笔记首先介绍了Docker的背景和出现的原因。随着软件开发的快速发展,传统的应用部署方式面临着多种挑战,如环境配置困难、资源浪费、部署速度慢等。Docker应运而生,通过将应用程序封装成独立的容器,实现了快速部署、隔离和可移植性。 笔记接着介绍了Docker的基本概念。Docker使用镜像(image)作为容器的基础,镜像是包含了操作系统和运行应用程序所需的全部组件的文件。容器是在镜像的基础上创建的,它是一个运行时环境,可以单独运行应用程序。通过镜像和容器的组合使用,开发者可以实现应用程序的快速开发、测试和部署。 在笔记的后半部分,狂神提供了一些实践案例来帮助读者更好地理解和运用Docker。例如,如何使用Docker部署Web应用程序、数据库、消息队列等常见的应用组件;如何在不同的环境中创建和管理容器,如开发、测试和生产环境;如何使用Docker Compose管理多个容器之间的依赖关系等等。 总之,狂神说的Docker配套笔记是一个全面而实用的学习资源,它可以帮助开发者快速上手并深入理解Docker的基本原理和应用方法。无论是初学者还是有一定经验的开发者,都能够通过这些笔记来加深对Docker的理解,并在实际项目中应用它带来的好处。 ### 回答3: Docker是一种开源的容器化平台,能够将应用程序和其依赖的库、环境一同封装成一个独立的容器,使其可以在任何环境中运行。狂神在他的言论中提到了一些关于Docker的配套笔记。 首先,狂神提到了Docker的基本概念和工作原理。他解释了容器与虚拟机的区别,指出Docker是一种轻量级虚拟化技术,可以快速启动和部署。狂神还介绍了容器镜像的概念,它是用来创建和运行容器的基础,可以通过Docker官方提供的仓库或自己构建。 其次,狂神强调了Docker的优势和应用场景。他指出Docker能够提高应用程序的可移植性、可扩展性和可靠性,方便在各种不同的环境中进行部署和管理。他举了一些实际的例子,如开发环境的快速部署、持续集成和持续部署等。 接着,狂神介绍了Docker的基本操作和命令。他讲解了如何创建、运行和停止容器,如何管理容器的网络和存储等。狂神还向读者展示了如何使用Docker Compose来管理多个容器,并介绍了一些常用的Docker镜像和容器的使用技巧。 最后,狂神提到了Docker的进阶主题和相关技术。他提到了Docker的安全性和性能优化的问题,并介绍了一些解决方案。狂神还提到了Kubernetes和Docker Swarm等容器编排工具,让读者了解如何在生产环境中进行容器的管理和调度。 总的来说,狂神的Docker配套笔记是一个非常实用的指南,能够帮助读者快速入门并深入了解Docker的原理和应用。无论是初学者还是有一定经验的开发者,都可以从中获得丰富的知识和实践经验,加快自己的学习和工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值