docker 常用命令

340 阅读4分钟

容器命令

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 rundocker 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 列表

  • 显示运行中的container

    docker container ls
    
  • 显示所有container

    docker 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 bash

    command_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>
    
  • 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')
    })
    

参考文章:

  1. Docker 快速入门

    Docker 视频学习

  2. z

  3. z