如何开始docker - docker容器
docker容器
docker容器就是程序真正跑起来的地方,容器里面就是以镜像为模板,然后跑起一个或者一组应用。
容器运行
docker run → create → start → running → process exit → stopped → docker rm → deleted
1、docker run从镜像里面创建一个容器,并开始运行;
2、根据镜像的内容来启动应用程序, 进行支持;
3、如果程序退出了,没有程序在前台运行,容器就退出执行了,处于stooped状态;
4、如果我们不需要再执行这个容器了,我们可以执行docker rm删除容器,释放磁盘空间,容器里面的东西都会被删除。
创建新容器
docker create 和docker run都可以创建新的容器,只是docker create创建的容器并不是直接运行,而是直接处于stopped状态,需要手动去启动起来。这两命令的语法是一致的。
docker run 执行过程:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
docker run常用创建参数
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="opcailinux1": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "opcailinux1": 指定容器的hostname;
-e username="opcai": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值(单位:bytes);
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
例子
1、创建一个有名字的容器
docker run -itd --name=opcailinux centos:latest
2、映射随机端口
docker run -itd --name=opcailinux1 -P nginx:latest
3、手动映射端口
docker run -itd --name=opcailinux2 -p 81:80 nginx:latest
4、挂载数据目录到容器里面
docker run -itd --name=opcailinux3 -v /data/docker/nginx:/data nginx:latest
查看容器
docker ps #查看正在运行或者暂停的容器
docker ps -a #查看所有的容器(包括停止的)
docker ps -l #查看最后一个创建的容器信息
docker ps -a -s #统计所有容器的大小
进入容器操作
docker exec -it [容器ID] /bin/bash
这里的/bin/bash 是容器里面的/bin/bash,就是启动一个bash shell,提供操作,有些镜像没有使用bash,就需要运行其他终端,一般都有/bin/sh这个软链接来链接到默认的shell程序。
容器状态控制
1、启动stopped的容器
docker start [容器ID]
2、重启容器
docker restart [容器ID]
3、停止容器
docker stop [容器ID]
4、暂停容器(暂停只容器进程暂停,分配的资源没有回收,stop就回收了)
docker pause [容器ID]
5、暂停恢复容器
docker unpause [容器ID]
6、查看容器标准输出日志(有时候,容器异常退出的时候,需要看下输出,来排查问题)
docker logs [容器ID]
容器导入导出
docker提供export、import命令来导出容器快照,和导入快照成为镜像
1、导出容器快照
docker export [容器ID] > opcailinux1.tar
2、导入快照文件成为镜像
docker import opcailinux1.tar opcailinux:v1.0
容器清理
容器如果在运行或者暂停中,默认是不允许删除的,需要加 -f 参数
docker rm [容器ID]
强制删除
docker rm -f [容器ID]
清理所有处于终止状态的容器
docker rm $(docker ps -a -q)