docker run
docker run 命令用于运行一个容器。
常用参数
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
-p参数用于端口映射关系的指定。上述命令将容器的8080端口绑定到tcp端口80上,而80端口在主机的127.0.0.1上。记住映射顺序:在前面的是主机端口(主机是宿主,容器寄生在主机上)
docker run -p 80:8080 ubuntu bash #此命令更加简洁常用,虽没指定ip,但端口端口80仍然可以让外部机器访问
-p 8000-9000:5000 #绑定容器的5000端口到主机上8000~9000间任意一个可以访问的端口
-i #打开STDIN
-t #分配一个伪tty
--name ContainerName #指明启动的容器的名字。(不允许启动重名容器)
--rm #容器停止后自动删除
-P #将容器的任意一个(容器端口号大于主机端口号)端口映射到主机上针对应用的临时端口
--link #连接一个存在的容器
--env="ENVIRONMENT_VARIABLE_NAME=ENVIROMENT_VARIABLE_VALUE" #启动时指明一个环境变量
--env-file #读取一个文件中的环境变量
--network #设置容器启动时绑定的网络,如自定义的网络
docker run -d -P --name web --link mysqlLink webimage #webimage是一个web镜像的名字。--link指明启动的web容器要连接上已经启动的mysql容器mysqlLink(容器名)
#上述命令的说明:此连接允许源容器(mysqlLink)向接收容器(web)提供信息。即web容器可以访问myslqLink容器的信息。
#环境变量和/etc/hosts(容器内文件系统)提供了连接的相关信息
环境变量
当启动一个要连接上其他容器的容器时,docker会创建一些环境变量。例如--link参数的使用。docker会暴露出所有源容器的环境变量,这些环境变量包括:Dockerfile中设定的环境变量,docker run启动使用-e,--env,--env-file参数指明的环境变量。注意:一个容器的所有环境变量都可以被任何连接上它的容器访问。
docker run -d -P --name web --link db:webdb training/webapp #--link参数的前一个db指明要连接的容器名称,webdb是一个连接名。training/webapp是一个docker镜像
docker inspect web |grep webdb #可以看到一个/web/db这个环境变量。处于web容器中(接收容器)
docker run --rm --name web2 --link mysqlLink:webdb training/webapp env #启动一个运行后自动删除的容器,查看容器环境变量。(只需改--name值,不用指定端口映射)
上述命令运行结果如下:
说明:
上述的WEBDB_NAME环境变量是启动时使用了--link参数产生的。WEBDB是连接名,来自前面的启动命令。
docker也定义了一些环境变量,它们是关于源容器所暴露的端口的。它们的格式为:
[name]_PORT_[port]_[protocol] #name是连接名,protocol是TCP/UDP
如:WEBDB_PORT_3306_TCP_PORT=3306
另外:*_ADDR环境变量指明了来自url的IP,如WEBDB_PORT_3306_TCP_ADDR=172.17.0.7;*_PORT环境变量指明来自url的端口号,如WEBDB_PORT_3306_TCP_PORT=3306;*_PROTO环境变量指明了来自url的协议
最后:[name]_PORT环境变量指明源容器第一次暴露的端口的url,如WEBDB_PORT=tcp://172.17.0.7:3306。
可以用以上这些环境变量配置应用,连接上一个数据库。
注意:存放在/etc/hosts中的IP当原容器重启时会自动更新,但以上环境变量存放的IP当容器重启时,不会自动更新。因此建议用/etc/hosts中的主机入口去解析互连容器的IP
docker inspect
格式:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
options:
--format/-f 输出指定格式信息
--size/-s 显示总共的文件的大小
--type 返回指定类型的JSON
例子
docker inspect ContainerID/Name #查看容器完整信息
docker cp
在本地文件系统和容器间复制文件
格式:
docker cp [OPTIONS] ContainerID:SORUCE_PATH DESTINATION_PATH
docker cp [OPTIONS] SOURCE_PATH ContainerID:DEST_PATH
例子:
docker cp c801acddc69e:/etc/hosts . #将容器ID为c801acddc69e中的/etc/host文件复制到宿主机器的当前目录。当然,也可拷贝一个文件夹到另一个文件夹。
docker cp aa c801acddc69e:/ #将宿主机器的文件aa拷贝到容器的根目录(前为源,后为目标)
docker exec
在一个运行的容器中运行命令
格式:
docker exec [OPTIONS] ContainerID Command
例子:
docker exec -it ContainerID /bin/bash #进入一个容器
docker exec -d web touch aa #在容器名为web的容器中,在当前目录创建一个文件aa
docker exec -it web pwd #查看容器web的当前目录
docker exec web /bin/bash -c "ls;echo aaa" #在容器的当前目录执行多个命令
docker exec -w / web /bin/bash -c "ls;echo aaa" #在容器web中指定的根目录/下执行两条命令。
docker logs
获取容器的日志
格式:
docker logs [OPTIONS] ContainerID
[OPTIONS]:
-f 跟踪日志输出,ctrl+c退出
--since 显示某个开始时间的所有日志
-t 显示时间戳
--tail 仅仅列出最新N条容器日志
例子:
docker logs --tail 5 web #列出最新5条日志
docker logs --since="2021-04-02" web #显示从2021.04.04及其以后的日志
docker ps
列出容器
docker ps [OPTIONS]
[OPTIONS]:
-a:显示所有容器
-f:根据条件过滤显示的内容
--format:指定返回值的模板文件
-l:显示最近创建的容器
-n:列出最近创建的n个容器
-q:只显示容器编号(ContainerID)
-s:显示总的文件大小
例子:
docker ps -n 3 #显示最近创建的3个容器
docker ps |cut -d " " -f 1 #只显示容器ID
docker network
和网络互连有关
例子:
docker network ls #列出主机上所有和docker有关的网络
docker network inspect networkname #查看一个具体的docker网络的信息
#上述命令可以查看到绑定到某一网络的容器有哪些(Containers标志后面)。查看结果如下图片
docker network create --driver bridge new_nw #创建一个名为new_nw的网络,其中,--driver参数指明网络驱动器
docker network connect networkName ContainerName #将一个运行的容器连接上一个网络
docker network disconnect networkName ContainerName #上个命令的逆操作。容器名前可以加一个-f参数(强制断掉连接)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。