docker常用命令

官方文档:https://docs.docker.com/engine/reference/commandline/docker/

一.创建容器

1.搜索镜像并下载
搜索镜像可以去:https://hub.docker.com/,上面有详细的版本信息以及下载和启动的命令

docker search mysql

docker pull mysql    # 下载最新版
docker pull mysql:5.7.29    # 下载执行版本

2.启动容器

# 这样启动会失败,因为启动mysql的镜像需要提供一些参数
docker run --name mysql01 -d mysql
docker ps -a    # 查看启动失败后的容器id
docker logs 42f09819908b    # 查看启动失败的原因

# 正确的命令,-p端口映射,--name指定容器名,-e指定参数,-d后台运行,mysql对应了镜像名
docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

# 更高级的启动命令,具体可以参考docker hub
docker run -p 13306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

# -v 共享卷
docker run -d --name mrdoc -p 10086:10086 -v ~/mrdoc:/app/MrDoc/config -v ~/mrdoc/media:/app/MrDoc/media jonnyan404/mrdoc-alpine

补充

# 启动一个centos容器,--name执行容器的名字,-it支持交互模式,centos为镜像名
# 后面跟的是容器启动后执行的命令,输出的是容器的长id
[root@VM_0_46_centos ~] docker run --name "mycentos" -d -it centos

3.工具类容器:提供一个临时的工作环境,通常以 run -it 方式运行
run -it 的作用是在容器启动后就直接进入
执行 exit 退出终端,同时容器停止

[root@VM_0_46_centos ~]# docker run -it busybox
/ # 
/ # wget www.baidu.com
Connecting to www.baidu.com (180.101.49.12:80)
saving to 'index.html'
index.html           100% |*****************************************************************************************************************************************************************|  2381  0:00:00 ETA
'index.html' saved
/ # exit
[root@VM_0_46_centos ~]# 

3.先创建,后启动
docker run 命令实际上是 docker create 和 docker start 的组合

docker create httpd    # 创建容器,这里的httpd是镜像
docker start d9e219772096    # 启动容器

二.容器的进入和退出

1.attach

# 进入容器,支持容器名或者短id
# 启动容器时如果加了-it参数,在容器内可通过ctrl+p然后ctrl+q退出
[root@VM_0_46_centos ~] docker attach mycentos
I am in container
I am in container
···

2.exec

# 第二种进入方式exec,可通过exit退出
# docker exec -it <container> bash|sh 是执行 exec 最常用的方式。
# 进入容器,打开一个bash终端
[root@VM_0_46_centos ~] docker exec -it mycentos bash
# 在容器种执行了一次ps命令
[root@d9e219772096 /] ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  2971 do_wai 14:55 pts/0    00:00:00 /bin/bash -c while true; do sleep 1; echo 'I am in container'; done
4 S root       466     0  0  80   0 -  3004 do_wai 15:02 pts/1    00:00:00 bash
4 R root       499   466  0  80   0 - 10984 -      15:03 pts/1    00:00:00 ps -elf
0 S root       500     1  0  80   0 -  5753 hrtime 15:03 pts/0    00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

# 停止容器
docker stop d9e219772096

3.attach 与 exec 主要区别:

  • attach 直接进入容器 启动命令 的终端,不会启动新的进程。
  • exec 则是在容器中打开新的终端,并且可以启动新的进程。
  • 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。

如果只是为了查看启动命令的输出,可以使用 docker logs 命令

# -f 的作用与 tail -f 类似,能够持续打印输出。
docker logs -f mycentos

三.常用操作

1.stop/start/restart 容器

docker ps    # 查看运行中的容器
docker ps -a    # 查看所有容器
docker start/stop/restart 容器名/id    # 启动,停止和重启
docker kill mycentos    # 快速停止容器

2.自动重启

docker run -d --restart=always httpd    # 容器停止后自动重启
# 启动进程退出代码非0,则重启容器,最多重启3次。
docker run -d --restart=on-failure:3 httpd

3.暂停
让容器暂停工作一段时间,处于暂停状态的容器不会占用 CPU 资源,直到通过 docker unpause 恢复运行

docker pause mycentos
docker unpause mycentos

4.删除
使用 docker 一段时间后,host 上可能会有大量已经退出了的容器,这些容器依然会占用 host 的文件系统资源

docker ps -a
docker rm hardcore_babbage festive_leakey    # 删除2个容器
docker rm -v $(docker ps -aq -f status=exited)    # 批量删除所有已经退出的容器
docker images
docker rmi centos_with_vim    # 删除镜像

四.资源限额

1.内存限制
计算机对内存分为物理内存与虚拟内存,物理内存就是计算机的实际内存大小,虚拟内存则是虚拟出来的、使用磁盘代替内存
swap全称为swap place,即交换区,当内存不够的时候,进程被踢出,暂时存储到交换区。当需要这条被踢出的进程时,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。

限额参数

  • -m 或 --memory:设置内存的使用限额,例如 100M, 2G。
  • –memory-swap:设置 内存+swap 的使用限额。
    如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍
# 允许该容器最多使用 200M 的内存和 100M 的 swap。
# 默认情况下,两组参数为 -1,即对容器内存和 swap 的使用没有限制
docker run -m 200M --memory-swap=300M ubuntu

2.CPU限制
默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制。
Docker 可以通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重
换句话说:通过 cpu share 可以设置容器使用 CPU 的优先级。

docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu

这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。

3.Block IO :磁盘的读写
–blkio-weight 参数来设置容器 block IO 的优先级(权重)

docker run -it --name container_A --blkio-weight 600 ubuntu   
docker run -it --name container_B --blkio-weight 300 ubuntu

bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数。

五.容器的底层实现技术

cgroup 实现资源限额, namespace 实现资源隔离。

cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。
每个容器配置的对应目录: /sys/fs/cgroup/cpu/docker/长id/

namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离。
Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User

参考:《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值