…
好记性不如烂笔头,特将最近用到的一些命令记录在我的小仓库。
一、简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
二、架构
Docker 包括三个基本概念: 镜像Image,容器Container,仓库Repository。
其中,
- 镜像(Image) 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。此外镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
例如docker中的centos和正常下载的centos的区别主要在于docker里的centos是精简版的,里面很多软件没有,相应的很多命令用不了。 - 容器(Container):镜像(Image)和容器(Container)的关系,就好比在OOP类与实例的关系,根据镜像可以创建多个容器。
- 仓库(Repository) 是集中存放镜像的地方,它的主要作用就是负责存储和分发docker镜像,镜像仓库分为公共镜像仓库和私有镜像仓库,公有镜像仓库是可以被任何人使用的,而私有镜像仓库则主要用于自身应用Docker镜像存储和分发。
三、命令
- docker command --help
了解docker使用方法
- docker search [option] image-name
docker search image-name 会在docker中央仓库进行查找并反馈结果,配合docker pull 即可拉取。
对于[option]中的一些命令有兴趣的可以了解一下,主要可以用来过滤信息。
- docker pull [option] image-name[:tag|@digest]
- [option]说明
- -a :拉取所有 tagged 镜像
- –disable-content-trust :忽略镜像的校验,默认开启
例如:
docker pull java 从docker中央仓库拉取java最新版镜像
docker pull -a java 从docker中央仓库拉取java的所有镜像
- docker ps [option]
列出容器,包括容器名,镜像名,时间等等
- [option]说明
- -a 显示所有的容器,包括未运行的。
- -l 显示最近创建的容器。
- -n 列出最近创建的n个容器。
- -q 静默模式,只显示容器编号。
- -s 显示总的文件大小。
- …等等
- docker run [option] image-name [command] [args…]
运行新容器
- -d 后台运行容器,并返回容器ID。
- -i 以交互模式运行容器,通常与 -t 同时使用。
- -P 随机端口映射,容器内部端口随机映射到主机的端口。
- -p 指定端口映射,格式为:主机(宿主)端口 容器端口。
- -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
- –name=“nginx-lb” 为容器指定一个名称。
- –dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致。
- –dns-search example.com 指定容器DNS搜索域名,默认和宿主一致。
- -h “mars” 指定容器的hostname。
- -e username=“ritchie” 设置环境变量。
- –env-file=[] 从指定文件读入环境变量。
- –cpuset=“0-2” or --cpuset=“0,1,2” 绑定容器到指定CPU运行。
- -m 设置容器使用内存最大值。
- –net=“bridge” 指定容器的网络连接类型,支持 bridge/host/none/container 四种类型。
- –link=[] 添加链接到另一个容器。
- –expose=[] 开放一个端口或一组端口。
- --volume , -v 绑定一个卷
- /bin/bash 放在镜像名后的是命令,若希望有个交互式 Shell,用 /bin/bash。
例如 docker run -it ubuntu /bin/bash 启动容器,并通过参数进入ubuntu 容器内部
- docker start container-id
可以根据docker ps -a 查看所有容器信息,然后根据container-id 进行启动容器
- docker stop container-id
同理,docker ps [ -a ] 获取 container-id 后停止容器
- docker restart container-id
同理,docker ps [ -a ] 获取 container-id 后重启容器
- docker rm [option] container-id
删除容器
- [option]说明
- -f 强制删除。
- docker rmi [option] iamge-name
删除镜像
- [option]说明
- -f 强制删除。
以上是最常用的命令。
四、不常用的命令
1.进入正在运行的Docker容器的4种方式
- docker attach container-id
不适用于生产环境。
若是多个用户使用该命令进入同一容器,窗口将会同步显示,若一个窗口阻塞中,其他窗口无法操作。
- docker SSH
略
- docker nsenter
略
- docker exec
docker 1.3.X版本之后可以使用docker exec
docker exec -it container-id /bin/bash
- docker volume [option]
镜像变成容器之后若是因为一些原因我需要把该容器删除,那么该容器的数据该何去何从?
可以在创建的时候映射出一个 volume,这样容器和本地磁盘就有了一个交互空间。
2.docker 导入导出
在之后的一段时间中,我需要特定环境进行自动化测试,因此还是要了解了解的。
主要命令有 export、import、save,load
其中 save,load 针对镜像的导入导出;export,import 是将容器与镜像相互转换的过程。
- save
docker save -o nginx.tar nginx:latest
or
docker save > nginx.tar nginx:latest
其中 -o 和 > 表示输出到文件,nginx.tar 为目标文件,nginx:latest 是源镜像名(name:tag)
- load
docker load -i nginx.tar
or
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
- export
docker export -o nginx-test.tar nginx-test
其中-o表示输出到文件,nginx-test.tar 为目标文件,nginx-test 是源容器名(name)
- import
docker import nginx-test.tar nginx:imp
or
cat nginx-test.tar | docker import - nginx:imp
- docker cp container-id [option]
docker cp container-id:/etc/nginx/nginx.conf /opt 把容器里面的文件cp出来到宿主机
docker cp /opt/nginx.conf container-id:/etc/nginx/nginx.conf 把宿主机文件拷贝到容器里面
- docker inspect container-id
查看docker内容信息
- docker system df
查看空间占用
- docker kill container-id
杀死一个正在运行的容器
- docker logs -f -t container-id or docker logs -f -t --tail=100 container-id
获取容器日志
- docker build
用来构建dockerfile镜像,略
- docker version
查看 docker 版本
- docker logout
用来登录