docker的命令分老版命令格式和新版命令格式,新版命令主要是更直观了,添加了镜像[image]和容器[container]来区分命令,简单举例对比:
docker ps
新版命令:docker container ls
docker images
新版命令: docker image ls
docker rmi centos:latest
新版命令: docker image rm centos:latest
docker search xxx
选镜像的建议:优先考虑官方镜像,然后是starts
数量多的镜像
docker image pull centos
docker image push centos
在/etc/docker/daemon.json
文件中写上仓库和地址,详见docker部署章节
docker image ls
docker image rm centos
docker image save centos > docker-centos7.4.tar.gz
docker image load -i docker-centos7.4.tar.gz
参数名 | 功能 | 不带此参数时 |
---|---|---|
-d | 将容器放在后台运行 | 前台运行,会占用终端 |
-p | 进行端口映射 | 有些复杂,单独说明 |
-it | 分配新终端并进入容器 | 不会进入容器内部 |
--name | 指定容器的名字 | 随机命名 |
cmd | 覆盖容器的初始命令 | 使用容器的初始命令 |
--cpus | 限定cpu的权重 | 不限制 |
-memory | 限定内存的大小 | 不限制 |
-h | 指定容器的主机名 | 以容器端ID命名 |
docker container stop 容器ID|容器名
docker container kill 容器ID|容器名
docker container rm 容器ID|容器名
docker container rm -f $(docker container ls -a -q)
docker container inspect 容器ID|容器名
进入容器的目的:排错,调试
docker container attach [OPTIONS] 容器ID|容器名
此方法会是进入容器当前终端,会实时打印容器的输出信息,退出很麻烦[Ctrl+p Ctrl+q ],容易按成[Ctrl+c]导致容器被关闭docker container exec [OPTIONS] 容器ID|容器名 {命令}
常用docker exec -it xxx /bin/bash
的方法打开新终端进入容器默认情况下,容器使用的ip网段是172.17.0.0/16,外界的用户只能访问宿主机的10.0.0.0/24网段,无法访问172.17.0.0/16网段。 而我们运行容器的目的,是希望运行在容器中的服务,能够被外界访问,这里就涉及到了外网10.0.0.0/24到容器内网172.17.0.0/16网段的转换,所以需要做端口映射。
docker 的端口映射是通过自动添加一条iptables规则实现的
语法 | 举例 | 说明 |
---|---|---|
-p hPort:cPort | -p 8800:80 | 主机8800映射容器80 |
同上,指定多个-p | -p 81:80 -p 443:443 | 一次映射多个端口 |
-p ip:hPort:cPort | -p 10.0.0.11:8800:80 | 指定主机IP |
-p crPort | -p 80 | 随机端口映射容器80 |
-p ip::crPort | -p 10.0.11::80 | IP指定,主机端口随机 |
-p hPort:cPort:udp | -p 8800:80:udp | 默认tcp映射,改为UDP |
docker run -P
将dockerfile
创建镜像时指定的,需要映射出来的内网端口,做外网随机映射一个 docker host 上会运行若干容器,每个容器都需要 CPU、内存和 IO 资源,Docker 提供了资源限制的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。
与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。
-m
或 --memory
:设置内存的使用限额,例如 100M, 2G。--memory-swap
:设置 内存+swap 的使用限额。-m
参数,那么 --memory-swap
默认为 -m
的两倍命令案例:
docker run -m 200M --memory-swap=300M ubuntu
允许该容器最多使用 200M 的内存和 100M 的 swap。
动态修改运行中的容器内存限额,需要用到update
参数,并且不能只修改内存限制,需要同步修改swap限制,否则会报错,报错详见:
参考链接
docker update --memory 2048m --memory-swap -1 gitlab
通过 -c
设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。
-c
或 --cpu-shares
设置容器使用 CPU 的权重。案例:在 host 中启动了两个容器:
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu
container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。
这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。
Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论。
目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。
--blkio-weight
参数来改变容器 block IO 的优先级。
--blkio-weight
与 --cpu-shares
类似,设置的是相对权重值,默认为 500。
在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。
docker run -it --name container\_A --blkio-weight 600 ubuntu docker run -it --name container\_B --blkio-weight 300 ubuntu--device-read-bps
,限制读某个设备的 bps。--device-write-bps
,限制写某个设备的 bps。--device-read-iops
,限制读某个设备的 iops。--device-write-iops
,限制写某个设备的 iops。下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s docker run -it --device-write-bps /dev/sda:30MB ubuntu
docker volume create xxx
docker volume ls
docker volume rm
docker volume inspect
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。