新建并启动容器命令 docker run
docker run = docker create image_id + docker start container_id
基本语法docker run --help
1,基础命令 docker run image
查看已有镜像
使用redis:1.0镜像运行容器
创建容器后,立即退出,仅仅是创建个容器,容器的状态是终止状态。
2,基础命令 docker run image command
创建容器后,运行命令,后立即退出,就像执行完一个php脚本一样
[Options简介:]
-
-d
= ‘detach’ 分离模式| Run container in background and print container ID | 在后台运行容器并打印容器ID -
-i
= 'interactive’互动 | Keep STDIN open even if not attached | STDIN=standard(标准),in即input(输入);标准输入,一般就是指键盘输入到缓冲区里的东西 | 保持输入流开放即使没有附加输入流 -t
= Allocate a pseudo-TTY | 分配一个伪造的终端输入 | 这里的参数-t 和 docker build -t含义是不同的。-i -t启动一个终端,允许用户进行交互。
终端,用户访问计算机主机的硬件设备,可以理解为一个显示器和一个键盘的组合。
伪终端,即在键盘(输入)、显示器(读取)与 cli模式 之间,同屏运行多个终端模拟器、并实现远程登录,还可以为输入与显示控制和辅助。(课题太大,临时了解的,错误之处请谅解)
-
--name
= Assign a name to the container | 为容器分配一个名称 -
--network
= Connect a container to a network (default"default") | 将容器连接到网络(默认为“default”) | 默认bridge
docker network --help查看网络有关命令。
bridge:桥接网络
每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了
host: 主机网络
-network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中.
none:无指定网络
–network=none ,docker 容器就不会分配局域网的IP
-
--ip
= IPv4 address (e.g.,172.30.100.104) | IPv4地址(例如,172.30.100.104) -
-p小写
= port | Publish a container’s port(s) to the host | 将指定的容器的端口发布到主机 | 可以多次使用来绑定多个端口 -
-P大写
= port | Publish all exposed ports to random ports | 随机映射一个49000~49900 的端口到内部容器开放的网络端口 -
--rm
当容器退出时自动删除它
[option:详解]
-d
后台运行
-d参数与不加-d,区别在于不加-d,执行命令的结果输出在当前宿主机。当运行的命令耗时比较长时,会长期占用窗口。而-d后台运行后,不会影响当然窗口继续其他操作,它是通过docker container logs中查看结果的。
注: 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。
-i
交互模式
标准输入,一般就是指键盘输入到缓冲区里的东西 | 保持输入流开放即使没有附加输入流。演示一下。
-i模式下,也是命令行模式,只不过不像我们常见的linux命令行的样子
-t
分配一个伪造的终端
进入了这个容器,但是输入完全没有反应,是因为缺少交互参数-i的缘故。
-i -t
通常同时使用,既能进入容器,又能交互。
和我们熟悉的linux命令行一样了。
--network
将容器连接到网络(默认为“default”) | 默认bridge
docker network --help
docker network ls 列出网络名称
docker network inspect network_id
新建两个容器并不退出,它默认就是桥接模式
重点来了,回到上文所说:
每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker容器的IP地址就变了。什么意思呢?把这两个容器停止。然后与上次启动的顺序不同,先启动redis2再启动redis1,对照上图发现
原来docker是按照启动顺序分配ip的,也就是说容器的ip会随着重启而改变,所以当一些应用依赖某些容器时,或者容器与容器之间保持连接,需要解决这个问题。
--ip
指定容器ip
报错:“来自守护进程的错误响应:仅在用户定义的网络上支持用户指定的IP地址。”
原因:桥接网络的特点,按照顺序分配ip,所以不能指定ip。
所以只能在用户自定义的网络的容器上使用--ip参数。
-p小写
-P大写
将指定的容器的端口发布到主机
比如我的镜像redis:1.0 开放的端口是6379(在Dockfile中的EXPOSE),-P 会随机映射一个端口到6379,而-p则可以指定映射的端口,通常使用-p。新建立一个容器,指定映射端口6380到6379:
可以用docker inspect container_id or image_id 命令查看详情
自定义网络和指定ip 容器互联 在下一节介绍
进入容器
如果这个容器是停止的,那么docker没有给它分配进程和进程空间,是无法进入的。
则需要docker start container_id启动容器,然后进入容器进行操作。这里的要点主要是-it的理解,-i只交互但不直观操作不方便,-t不能交互,-it其实就是打开一个我们常见的Linux命令行的模式,就这么简单。