新建并启动容器命令 docker run

docker run = docker create image_id + docker start container_id

nexus docker proxy 配置_重启

基本语法docker run --help

nexus docker proxy 配置_重启_02


1,基础命令 docker run image

查看已有镜像

nexus docker proxy 配置_docker_03


使用redis:1.0镜像运行容器

nexus docker proxy 配置_IP_04


创建容器后,立即退出,仅仅是创建个容器,容器的状态是终止状态。

nexus docker proxy 配置_IP_05


2,基础命令 docker run image command

nexus docker proxy 配置_重启_06


创建容器后,运行命令,后立即退出,就像执行完一个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查看网络有关命令。

nexus docker proxy 配置_docker_07


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命令行的样子

nexus docker proxy 配置_重启_08

-t 分配一个伪造的终端

nexus docker proxy 配置_container_09


进入了这个容器,但是输入完全没有反应,是因为缺少交互参数-i的缘故。

-i -t通常同时使用,既能进入容器,又能交互。

和我们熟悉的linux命令行一样了。

nexus docker proxy 配置_重启_10

--network 将容器连接到网络(默认为“default”) | 默认bridge

docker network --help

nexus docker proxy 配置_docker_11


docker network ls 列出网络名称

nexus docker proxy 配置_docker_12


docker network inspect network_id

nexus docker proxy 配置_重启_13


nexus docker proxy 配置_IP_14


新建两个容器并不退出,它默认就是桥接模式

nexus docker proxy 配置_docker_15


重点来了,回到上文所说:

每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker容器的IP地址就变了。什么意思呢?把这两个容器停止。然后与上次启动的顺序不同,先启动redis2再启动redis1,对照上图发现

nexus docker proxy 配置_重启_16


原来docker是按照启动顺序分配ip的,也就是说容器的ip会随着重启而改变,所以当一些应用依赖某些容器时,或者容器与容器之间保持连接,需要解决这个问题。

--ip 指定容器ip

nexus docker proxy 配置_docker_17


报错:“来自守护进程的错误响应:仅在用户定义的网络上支持用户指定的IP地址。”

原因:桥接网络的特点,按照顺序分配ip,所以不能指定ip。

所以只能在用户自定义的网络的容器上使用--ip参数。

-p小写 -P大写 将指定的容器的端口发布到主机

nexus docker proxy 配置_IP_18


比如我的镜像redis:1.0 开放的端口是6379(在Dockfile中的EXPOSE),-P 会随机映射一个端口到6379,而-p则可以指定映射的端口,通常使用-p。新建立一个容器,指定映射端口6380到6379:

nexus docker proxy 配置_container_19


可以用docker inspect container_id or image_id 命令查看详情

nexus docker proxy 配置_重启_20


nexus docker proxy 配置_IP_21


自定义网络和指定ip 容器互联 在下一节介绍

进入容器

如果这个容器是停止的,那么docker没有给它分配进程和进程空间,是无法进入的。

则需要docker start container_id启动容器,然后进入容器进行操作。这里的要点主要是-it的理解,-i只交互但不直观操作不方便,-t不能交互,-it其实就是打开一个我们常见的Linux命令行的模式,就这么简单。

nexus docker proxy 配置_IP_22