概念
《Docker — 从入门到实践》介绍:
- 容器是独立运行的一个或一组应用,以及它们的运行态环境
- 虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境) 和跑在上面的应用
命令说明
docker命令帮助: docker --help
用法: docker [OPTIONS] COMMAND
具体某个COMMAND的用法可以进一步help: docker COMMAND --help
所以此处不会一一列举所有的相关命令
启动容器
镜像是固定不变的模板,容器是在镜像基础上面的增量,同一个镜像创建出来的多个容器共用一个镜像,维护各自的增量
基于镜像新建一个容器并启动
1.下载一个镜像(镜像部分再介绍)
$ docker pull centos
2.新建容器并启动
docker run [OPTIONS] 镜像名:tag [COMMAND] [ARGS]
$ docker run centos /bin/echo "hello world"
输出:hello world
以上命令仅输出了hello world,该容器的使命便结束了。并没有像我期待的那样,进行centos的系统。原因是概述里说的那样,docker运行的是一个或一组应用,以及他的环境。以上命令创建了centos容器,但是执行的命令为“ /bin/echo "hello world"”,当执行完时,这个容器的使命就结束了,进程便退出了。故如果想要容器长久的运行,【COMMADN】执行的任务必须永久存活。
又如反例:【COMMAND】为service xxx start,虽然启动的服务是后台,但是docker执行完“service xxx start”就没事干了,容器便退出,导致即使xxx后台运行,但是容器退出,任务服务也就消失殆尽。
先介绍下docker run常用的OPTIONS
- --name :新创建的容器指定一个名字
- -d: 后台运行容器
- -it:以交互的模式前台运行容器
- -p: 本地主机端口映射到容器端口,如 -p 8081:8080
启动centos容器
方式一:
$ docker run -it --name myContainer centos /bin/bash
方式二(后台运行):
$ docker run -itd --name myContainer centos /bin/bash
启动一个之前退出运行的容器(启动后后台运行)
$ docker start 容器名/id
查看容器
docker ps [OPTIONS]
OPTIONS:
- -a: 列出所有容器(默认仅列出运行中的容器)
- -q: 仅展示容器id
- -l: 仅列出最近创建的一个容器
- -n: 列出最近创建的n个容器
关闭容器
docker stop 容器名/id
docker kill 容器名/id (强制关闭)
在容器内部:
exit 或快捷键ctrl+d 退出并关闭容器
ctrl+p+q快捷键 退出容器,但不关闭容器
重启容器
docker restart 容器名/id
进入容器
方式一:
docker attach 容器名/id
方式二(推荐使用):
docker exec -it 容器名/id /bin/bash
推荐使用的原因:使用该方式,在容器内exit命令只退出容器,不关闭容器。
attach、exec执行时主机启动都会启动一个进程去连接容器,不同的是attach多个进程连接的是同一个容器交互终端(容器启动时),在一个attach的操作,会同步到其他的attach连接。所以容器内执行exit,因为交互终端断开而容器将关闭。而exec连接容器的交互终端是各自新创建的,执行exit时仅退出各自的终端,对其他的没影响,则不会关闭容器。
docker exec也可以在主机执行容器内部的命令:docker exec -it 容器名/id ls -l (此处ls -l将输出容器内部)
导出/导入容器快照
导出:docker export 容器id > filename.tar
导入(导入为镜像): cat filename.tar | docker import - test/importImage:tag
删除容器
docker rm 容器ID
docker rm -f 容器ID (强制删除启动中的)
docker rm -f $(docker ps -a -q) 删除所有容器
docker container prune 删除所有关闭状态的容器
其他命令
查看容器内运行的进程:docker top 容器id
查看容器信息(如容器分配的ip、卷等):docker inspect 容器id
查看容器输出日志: docker logs -f -t --tail 容器id
拷贝本地文件到容器中:docker cp 本地文件名全路径 容器id:容器目录
拷贝容器中的文件到本地:docker cp 容器id:文件全路径 本地目录