Docker 基础
理解Docker容器
- 从面向对象角度,Docker利用容器独立运行一个或一组应用。容器类似于虚拟化的运行环境。
- 镜像: 类
- 容器: 镜像的实例
- 仓库: 远程的镜像
- 从镜像容器角度,可以把容器看做一个简易版的Linux环境和运行在其中的应用程序。
# 1. systemstl 命令和Docker简单命令
- 启动:
systemstl start docker
- 停止:
systemstl stop docker
- 停止所有:
docker stop $(docker ps -a -q)
- 重启:
systemstl restart docker
- 查看docker状态:
systemstl status docker
- 开机启动:
systemctl enable docker
- 启动容器
docker run hello-world
- 查看docker概要信息:
docker info
- 查看docker帮助文档:
docker --help
- 查看docker命令的帮助文档:
docker 具体命令 --help
# 2. 容器命令
新建+启动容器:
docker run [options] image名称 [command] [arg]
[options]
说明:--name=
:指定容器的名称-d
:后台运行(后台守护式容器)并返回容器ID-i
:以交互模式运行-t
:为容器重新分配一个伪输入终端-it
:前台有伪终端,等待交互(前台交互式容器)-P
:随机端口映射-p
:指定端口映射(前面的是容器之外服务器端口,后面的是容器内端口)--memory
,也就是-m
:内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M--memory-swap
:内存+交换分区大小总限制。格式同上
列出当前正在运行的容器:
docker ps [options]
,[options]
为-a
时,也列出历史上的容器退出容器并停止容器:
exit
退出容器,不停止容器:
快捷键ctrl+p+q
启动已停止的容器:
docker start 容器ID或容器名
重启容器:
docker restart 容器ID或容器名
停止容器:
docker stop 容器ID或容器名
强制停止容器:
docker kill 容器ID或容器名
删除已停止的容器:
docker rm 容器ID或容器名
删除所有exited状态的容器
docker rm $(docker ps -a -q --filter status=exited)
删除关键字的容器:
docker rm $(docker ps | grep "XXX关键字" | awk '{print $1}')
重新进入容器:
docker exec 容器ID
:在容器中打开新的终端,可以开始新的进程,用exit退出,不会导致容器的停止docker attach 容器ID
:直接进入容器启动命令的终端,不启动新的进程,用exit退出,会导致容器的停止
从容器内拷贝文件到主机上:
docker cp 容器ID:容器内路径 目的主机路径
导出整个容器:
docker export 容器ID > 文件名.tar
导入整个容器:
cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
# docker 监测
- 查看容器内存等资源使用情况
docker stats --no-stream
# 3. 镜像
# 镜像简单命令
docker images
: 列出本地主机上的镜像docker search 某镜像名
docker pull 某镜像名``docker pull 某镜像名:Tag
docker system df
:查看镜像/容器/数据卷所占的空间docker rmi 某镜像名ID
:删除镜像,docker rmi -f 某镜像名ID
强制删除docker rmi $(docker images -a -q)
删除所有镜像docker rmi $(docker images | grep "XXX关键字" | awk '{print $3}')
根据关键字删除镜像
打包好的运行环境就是image镜像文件。包括代码、运行时需要的库、环境变量和配置文件。
# Docker镜像加载原理
Docker的镜像是由一层一层的文件系统组成,这个层级的文件系统是UnionFS。
- bootfs: 在Docker的最底层是引导文件系统bootfs(boof file system)。和Linux/Unix系统一样。
- rootfs: 然后是rootfs(root file system),在bootfs之上,包含经典的Linux系统中的
/dev
,/proc
,/bin
,/etc
等标准目录和文件。 rootfs就是各种不同的操作系统发行版。 - 镜像层:只读
- 容器层:可写
# Docker镜像commit操作
提交容器副本,使之成为新的镜像:docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
新镜像是从原有镜像一层一层向上叠加。
# Docker镜像发布push操作
在阿里云容器镜像服务的镜像仓库中获取以下代码:
docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/[命名空间名字]/[仓库名]:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/[命名空间名字]/[仓库名]:[镜像版本号]
# 4. Docker容器数据卷
Docker容器数据卷的作用:映射,持久化、备份重要数据到主机目录。privileged含义:享有特权的。
命令:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
特点:
- 数据卷的更改不会包含在镜像的更新之中
- 可在容器之间共享数据
- 卷中的更改实时生效
如何查看是否挂载成功: docker inspect 容器ID
, 查看"Mounts","Source"为宿主机目录,"Destination"为容器内目录。
容器内只读设置:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
ro
表示read only
容器继承数据卷命令:docker run -it --privileged=true --volumes-from 父类容器名 --name=容器名 镜像名