docker使用
2021/12/5 6:21:09
本文主要是介绍docker使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
《Docker必知必会系列》
容器、镜像、仓库
- 镜像就是一个只读模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
- Docker利用容器独立运行一个或一组应用,容器是用镜像创建的运行实例。可以被启动、开始、停止、删除。
- 可以把容器看做是一个简易版的LInux环境
- 仓库是存放镜像的地方
镜像加速
点击这里获取阿里云docker加速URL
至于如何使用, 可以看网站的教程
常用命令
帮助命令
- docker version
docker版本 - docker info
docker信息,如多少个镜像,内存等信息。 - docker --help
帮助信息
镜像命令
-
docker images
列出本机上的镜像
-a
列出本地所有的镜像(含中间映射层) (重要)
-q
只显示镜像ID (重要)
--digests
显示镜像的摘要信息
--no-trunc
显示完整的镜像信息 -
docker search 某个XXX镜像的名字
去www.dockerhub.com
搜索
--no-trun
显示完整的镜像描述
-s
列出收藏数不小于指定值的镜像(重要)
--automated
只列出 automated build类型的镜像 -
docker pull 某个镜像的名字
下载镜像
指定tag:docker pull 镜像名字[:TAG]
,默认最新 -
docker rmi 某个XXX镜像的名字ID
删除镜像
删除单个 docker rm -f 镜像ID
删除多个 docker rm -f 镜像名1:TAG 镜像名2:TAG
删除全部 docker rmi -f ${docker images -qa} -
docker history 镜像id
列出镜像的构建历史
容器命令
有镜像才能创建容器,这是根本前提(下载一个Centos镜像演示)
运行容器docker run
创建并运行一个容器(本地没有镜像时,将从云端下载)
docker run的流程:
命令: docker run [OPTIONS] IMAGE [COMMAND][ARG]
参数
--name="容器新名字"
:为容器指定一个名称-d
:后台运行容器,并返回容器ID, 也即启动守护式容器-i
:以交互模式运行容器,通常与-t同时使用-t
:为容器重新分配一个伪输入终端,通常与-i同时使用-P
:随机端口映射(大写)-p
:指定端口映射,有以下四种格式:ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
例子:
$docker run -d -p 8080:8080 tomcat
查看容器 docker ps
列出当前所有正在运行的容器
命令: docker ps [OPTIONS]
参数
-a
:列出当前所有正在运行的容器+历史上运行过的-|
:显示最近一个创建的容器-n n
:显示最近n个创建的容器-q
:静默模式,只显示容器编号--no-trunc
:不截断输出
例子:
$docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp mynginx 96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
退出容器
在容器中的两种退出方式:
exit
容器停止退出ctrl+P+Q
容器不停止退出
启动/停止/重启容器
启动已经存在的容器: docker start 容器ID或容器name
重启已经存在的容器: docker restart 容器ID或容器name
停止已经存在的容器: docker stop 容器ID或容器name
强制停止容器: docker kill 容器ID或容器签名
例子:
$docker start container $docker stop container $docker restart container
-
docker rm 容器ID -f
删除已停止的容器
一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
-
docker logs -f -t --tail 容器ID
查看容器日志
-t
是加入时间戳
-f
跟随最新的日志打印
--tail
数字显示最后多少条 -
docker top 容器ID
查看容器内的进程 -
docker inspect 容器ID
查看容器内部细节 -
docker exec -it 容器ID bashShell
进入正在运行的容器并以命令行交互重新进入docker attach 容器ID
- attach 直接进入容器启动命令的终端,不会启动新的进程
- exec 实在容器中打开新的终端,并且可以穷的那个新的进程
- docker cp
容器ID:容器内路径
目的主机路径
从容器内拷贝文件到主机上
-
docker commit
docker commit 提交容器副本使之称为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
Docker镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的有内容,包括代码、运行时、库、环境变量和配置文件
docker底层
UnionFS(联合文件系统): 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修作为一 次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a singlevirtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像)可以制作各种具.体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文 件系统会包含所有底层的文件和目录
加载原理
Docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
botfs(boot file system)主要包含bootloader和kernel, bootloader主 要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一-层与我们典型的Linux/Unix系统是- - -样的,包含boot加载器和内核。当boot加载完成之 后整个内核就都在内存中了,此时内存的使用权己由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system),在bootfs之 上。 包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就 是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
平时我们安装的虚拟机的Centos都是好几个G ,为什么docker这里才要200m
对于一个精简的OS, rootfs可 以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自只需要提供rootfs就行了。
由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别,因此不同的发行版可以公用bootfs。
优点
为什么 Docker纪念馆想要采用这种分层结构?
最大的一个好处就是-共享资源 比如:有多个镜像都从相同的base镜像构建而来,
那么宿主机只需在磁盘上保存一份base镜像, 同时内存中也只需加载一份base镜像,就可以为所有容器服务了。
而且镜像的每一层都可以被共享。
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称为容器层,容器层之下都叫镜像层
容器数据卷
是什么
一句话:有点类似我们Redis里面的rdb和aof文件,做宿主机与容器之间的数据同步
特点:
- 1:数据卷可在容器之间共享或重用数据
- 2:卷中的更改可以直接生效
- 3:数据卷中的更改不会包含在镜像的更新中
- 4:数据卷的生命周期一直持续到没有容器使用它为止
使用
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
不带权限,读写docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
带权限
使用
docker inspect 容器ID
命令可以清楚看到绑定了哪些数据卷,以及数据卷的权限。
使用dockerfile构建内置数据卷
即不需要手动指定
VOLUME指令来给镜像添加一个或多个数据卷
可以参考Dockerfile章节
宿主机对应地址通过docker inspect
命令查看。
Docker挂载主机目录Docker访问出现
cannot open directory . Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
数据卷容器
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器.
即多个容器之间数据共享
使用方法:
- 创建容器a
- 创建容器b,指定参数
--volumes -from a
- 这样就实现数据同步了
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
Dockerfile
Dockerfile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本
构建三步骤
- 编写Dockerfile文件
- docker build
- docker run
编写Dockerfile
Dockerfile内容基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从.上到下,顺序执行
-
表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程
- docker 从基础镜像运行一个容器
- 执行一-条指令并对容器作出修改
- 执行类似docker commit的操作提交- -个新的镜像层
- docker再基 于刚提交的镜像运行一一个新容器
- 执行dockerfile中的 下一条指令直到所有指令都执行完成
Dockerfile常用指令
https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html
- FROM
基础镜像,当前新镜像基于哪个镜像 - MAINTAINER
镜像维护者的姓名和邮箱地址 - RUN
容器构建时需要运行的命令 - EXPOSE
当前容器对外暴露的端口 - WORKDIR
指定创建容器后,终端默认登录进来的工作目录 - ENV
用来在构建镜像过程中设置环境变量 - ADD
将宿主机目录下的文件拷贝进镜像,会自动处理URL和解压tar压缩包 - COPY
类似ADD,拷贝文件和目录到镜像中,但不会自动解压 - VOLUME
容器数据卷,用于数据保存和持久化工作 - CMD
容器启动时执行的命令,多个时,最后一个生效
会被docker run后面的参数替换(假如指定的话) - ENTRYPOINT
容器启动时执行的命令
docker run后面命令会将成为ENTRYPOINT的参数,然后拼接成新的命令 - ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像被子镜像继承后父镜像的ONBUILD会被触发
部署
https://zhuanlan.zhihu.com/p/145364353
docker compose
使用步骤:
- 定义dockerfile
- 定义docker-compose.yaml
- 执行docker-compose up命令或docker-compose up --build
容器编排
yaml规则
3层
- version
版本 - services
服务配置 - 其它配置
volumes
networks
configs
官方文档,全部配置都有
这篇关于docker使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-29100 个常见的 Docker 错误及解决方案
- 2024-09-26制作 llama3 RAG 系统的 Docker 容器
- 2024-09-25Podman — 一个简单、轻量的 Docker 替代品
- 2024-09-25Docker 快速参考指南(初学者版) ??
- 2024-09-25使用 Docker 在单个 VPS 上部署多个应用
- 2024-09-21Docker环境部署资料:新手入门指南
- 2024-09-20Docker环境部署项目实战:新手入门全攻略
- 2024-09-20Docker环境部署:新手入门教程
- 2024-09-20Docker环境部署学习:从入门到实践
- 2024-09-20Docker环境部署入门:新手必读指南