容器命令
docker container run
1. run 创建容器
docker container run
-it
--name <custom_name>
-d
-p <expose_port>:<container_port>
--env <env_key>=<env_value>
-v <volume_name>:<path_in_docker>
--network <虚拟网络> --network-alias 虚拟网络别名名称
<image>:<tag>
<command_to_exec>
docker container run与docker run相同,只是docker run相对早(docker 1.13 之前)
-
-i:表示运行容器 -
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 -
-it进入容器交互环境,是-i和-t的组合 -
--name:为创建的容器命名 -
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录), 可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 -
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行 (这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。 -
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 -
--network设置网络。 Docker本身有自己的虚拟网络,通过该命令,可以指定虚拟网络,也可以指定直接通过NAT使用host网络, 如:--network <custom_network_name> -
--env/-e设置环境变量
2. ls 显示 container 列表
-
显示
运行中的containerdocker container ls -
显示
所有containerdocker container ls -a
3. rm 删除container
-
删除指定container
#按照containId删除 docker container rm <containerID> #按照名称删除 docker container rm name -
-f强制删除(可删除运行中的container)#按照containId强制删除 docker container rm -f <containerID> #按照名称强制删除 docker container rm -f name
4. top 查询容器中的进程
- docker container top
#查询指定containerID的Container进程详情 docker container top <containID> #查询指定name的Container进程详情 docker container top <name>
5. stats 查询所有容器的状态
-
实时返回所有容器的运行状态
docker container stats -
根据指定容器ID/名称显示
#查询指定containerID的Container配置详情 docker container stats <containID> #查询指定name的Container配置详情 docker container stats <name>
6. exec在container中执行命令 可以进入到容器中
-
当使用这种方式执行命令时,使用
exit会退出容器,但是容器不会停止 -
使用方式如下:
docker container exec -it <container_name> <command_to_exec>比如:
docker container exec -it server-redis bashcommand_to_exec 的
bash也可以是/bin/bash的方式container_name 也可以是容器的id的形式
7.port查看容器端口映射
- 使用方法
#查询指定containerID的端口映射 docker container port <containerID> #查询指定name的Container的端口映射 docker container port <name> - 可看到Dockerfile中对EXPOSE指定的端口有对宿主机的映射,
9999与6688为EXPOSE指定的端口9999/tcp -> 0.0.0.0:55000 6688/tcp -> 0.0.0.0:55001
网络命令
docker network
-
1 .
ls显示所有网络- 默认网络为
bridge或者docker0,与host以NAT形式通讯 host网络是跳过docker的虚拟网络,直连到主机网络,这种方式牺牲了容器的安全性none网络是在容器中移除了eth0只剩下localhost网络接口
docker network ls - 默认网络为
-
2 .
inspect查看网络具体信息- 以Json形式返回具体的网络信息,其中
IPAM显示驱动名称,网关和网段 Containers显示连接到该网络的Container信息以为IP地址
docker network inspect <network_name> - 以Json形式返回具体的网络信息,其中
-
3 .
create创建网络创建网络时默认使用
bridge驱动,在创建的时候也可以指定第三方驱动来创建含有特定驱动的网络,如weave驱动
此命令还有其他选项可以在创建时指定,如:ip等,具体查看help即可#创建默认驱动的网络 docker network create <custom_network_name> #创建指定驱动的网络 docker network create --driver <driver_name> <custom_network_name> #创建可互相通讯的network docker network create --driver overlay <custom_network_name> -
4 .
connect连接指定网络到容器docker network connect <network_id> <container_id> -
5 .
disconnect取消连接指定网络到容器docker network disconnect <network_id> <container_id> -
6 . 运行时指定需要暴露的端口,这样能保护docker内部的端口,只能在虚拟网络里访问,外部可访问的只有暴露出的端口
-
7 . docker container run 创建容器的时候,通过
--network使用创建的网络,并且可以通过--network-alias设置网络别名docker run -d --name redis --network test-net --network-alias redis redis:latest docker run -p 8080:8080 --name test -v D:/test:/app --network test-net -d test:v1程序代码中使用网络如下:
const redis = require('redis') const rds = redis.createClient({ url: 'redis://redis:6379' //使用创建的redis网络 }) rds.on('connect', () => { console.log('redis connect') })
参考文章: