format: docker search TERM demo: docker search ubuntu
NAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDubuntu Ubuntu is a ... 7076 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 156 [OK]
docker pull
docker pull命令用于从远程下载镜像,可以通过NAME:TAG或NAME@DIGEST的格式来指明目标镜像。
当只提供了镜像NAME时,默认下载tag为latest的镜像。
$docker pull ubuntu $docker pull ubuntu:16.04 $docker pull ubuntu@sha256:fbaf303d18563e57a3c1a0005356ad102509b60884f3aa89ef9a90c0ea5d1212NAME也可以是私有仓库中一个REPOSITORY的URI。
docker rmidocker rmi用于删除镜像,可以使用IMAGE ID或REPOSITORY:TAG来标记一个容器。
容器 docker rundocker run命令用于新建一个容器并启动, 是最重要的和最常用的docker命令之一。
format: docker run IMAGE CMD ARGSdocker run命令的标准执行流程包括:
检查本地是否包含指定的镜像,若不存在就从公有仓库下载
在只读的基础镜像层上挂载一个可读写层,创建容器的文件系统
根据文件系统启动容器
将容器与宿主机桥接
用指定的身份登录容器,并在指定目录下执行CMD ARGS参数指定的命令
在命令执行完成后关闭容器
docker容器在命令执行完毕后会自动退出, 容器的生存周期仅决定于执行命令所需的时间。 如果在容器中执行bash等长期运行的命令, 就可以保证容器长期运行。
docker run命令默认会把标准输出流(stdout)重定向到终端,并与容器保持连接状态(attach)。
在attach状态下, 容器退出之前doceker run命令不会返回,而是在终端回显容器的输出。 若发出kill信号(如ctrl + c快捷键)杀死docekr run, 那么容器也会提前退出。
容器对文件系统的修改在可读写层,不会对镜像产生影响, 除非使用docker commit创建新的镜像层。 容器退出后其文件系统仍将保存在磁盘中,下次启动后会保留所有修改。
打开终端
docker run命令默认将容器的标准输出流重定向到终端, 但是没有将终端的标准输入流(stdin)重定向到容器。 也就是说,容器无法���收我们在终端中输入的命令。
使用-i或--interactive选项会保持容器的输入流(stdin)打开,即使docker run不与容器保持attach状态。
docker run -i ubuntu bash命令可以打开一个ubuntu终端, 该终端也可以接受我们输入的指令。
和标准的Linux系统一样,docker镜像也为用户指定了默认终端。 使用-t或--tty选项会打开一个虚拟终端(Pseudo-TTY)。
也就是说,docker run -it ubuntu命令可以轻松地打开一个可交互ubuntu虚拟环境。
后台运行
docker run命令默认与容器保持连接状态(attach), -d或--detach选项可以与容器断开连接。 docker run命令在显示容器ID后立即返回,容器则会在后台运行。
上文redis-server的示例即使用了-d选项, docker run立即返回, redis-server在后台继续运行。
$ docker run -p 6379:6379 -d redis 3a5748eef653 $ redis-cli 127.0.0.1:6379>端口映射
如上文中redis-server示例, 我们经常使用docker容器提供服务,因此需要docker容器监听宿主机的某个端口。
docker run -p 6379:6379 -d redis将对宿主机TCP6379端口的访问映射到容器的TCP6379端口。
-p 6379:6379/udp则可以映射udp访问(虽然对redis-server来说没有意义)。 多个-p选项可以映射多个端口docker run -p 80:8080 -p 8080:8081 -d my_server.
端口映射是将对宿主机某个端口的访问映射到容器的某个端口上, 容器访问宿主机端口不需要配置端口映射。
挂载数据卷