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值,不用指定端口映射)

上述命令运行结果如下:

image.png
说明:
上述的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标志后面)。查看结果如下图片

image.png

docker network create --driver bridge new_nw #创建一个名为new_nw的网络,其中,--driver参数指明网络驱动器
docker network connect networkName ContainerName #将一个运行的容器连接上一个网络
docker network disconnect networkName ContainerName #上个命令的逆操作。容器名前可以加一个-f参数(强制断掉连接)

酒千殇
3 声望0 粉丝

下一篇 »
docker基础