docker速查

Centos7 安装 Docker

阿里镜像安装

官方repo地址被墙,所以我用阿里

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker

加速

国内镜像慢,所以我用阿里

sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

命令速查表

常用度排序

镜像操作

功能 命令
拉取镜像 docker pull [镜像名称:版本]
镜像列表 docker images
删除镜像 docker rmi [镜像名称:版本]
镜像操作记录 docker history [镜像名称:版本]
给镜像设置新的仓库 docker tag [镜像名称:版本] [新镜像名称:新版本]
查看镜像详细 docker inspect [镜像名称:版本]
搜索镜像 docker search [关键字]
仓库登录 docker login

docker tag 指令得到了一个新的,和原来的镜像一模一样的镜像。后续文谈到私仓非常有用。

容器操作

功能 命令
启动容器并进入 docker run -ti --name [容器名称] [镜像名称:版本] bash
容器列表 docker ps -a
容器提交为新的镜像 docker commit [容器名称] my_image:v1.0
容器后台运行 docker run -d --name [容器名称] [镜像名称:版本] bash -c "echo hello world"
容器结束后自动删除 docker run --rm --name [容器名称] [镜像名称:版本] bash -c "echo hello world"
删除容器 docker rm [容器名称]
进入容器 exec docker exec -ti [容器名称] bash
进入容器 attach docker attach [容器名称]
停止容器 docker stop [容器名称]
Docker 日志 docker logs [容器名称]
查看容器详细 docker inspect [容器名称]
查看容器最近一个进程 docker top [容器名称]
继续运行被停止的容器 docker restart [容器名称]
暂停一个容器进程 docker pause [容器名称]
取消暂停 docker unpause [容器名称]
终止容器 docker kill [容器名称]
端口映射 docker run -ti --name [容器名称] -p 8080:80 [镜像名称:版本] bash
容器互联 docker run -ti --name [容器名称] --link [被互联容器名称]:[容器内名称] net:v1.0 bash
复制容器文件到宿主 docker cp [容器名称]:[容器内目录] .
  • execattach 区别

在 exec 里面执行 exit 命令,你只是关掉了 exec 命令新开的进程,而主进程依旧在运行,所以容器并不会停止
在 attach 里面运行 exit 命令,你实际是终止了主进程,所以容器也就随之被停止了

  • -p 配置

-p hostPort:containerPort 映射所有 IP 地址上的指定端口到容器内部
-p ip:hostPort:containerPort 映射指定 IP 地址上的指定端口到容器内部
-p ip::containerPort 映射指定 IP 地址上的任意端口到容器内部

内存限制

参数 简介
-m, - -memory 内存限制,格式:数字+单位,单位可以是b, k, m, g,最小4M
-- -memory-swap 内存和交换空间总大小限制,注意:必须比-m参数大

CPU限制

参数 简介
-- -cpuset-cpus="" 允许使用的CPU集
-c,- -cpu-shares=0 CPU共享权值
-- -cpu-quota=0 限制CPU CFS配额,必须不小于1ms,即>=1000
cpu-period=0 限制CPU CFS调度周期,范围是100ms~1s,即[1000, 1000000]
sudo docker run -ti --cpuset-cpus="1,3" --name cpuset [镜像名称:版本] bash

比如下面的指令指定容器进程可以在 CPU1 和 CPU3 上运行

数据卷

功能 命令
创建一个卷 docker run -ti --name [容器名称] -v /[数据卷名称] [镜像名称:版本] bash
删除一个数据卷 docker rm -v [数据卷名称]
挂载宿主目录 docker run -ti --name [容器名称] -v [宿主目录]:[容器内目录] [镜像名称:版本] bash
数据卷容器 docker run -ti -d -v /[数据卷名称] --name [数据卷容器名称] [镜像名称:版本]
使用数据卷容器 docker run -ti --volumes-from [数据卷容器名称] --name [新容器名称] [镜像名称:版本] bash
清除所有 docker volume prune
备份数据卷 1 - 建立容器 docker run -it --name vol_simple -v /data ubuntu /bin/bash
备份数据卷 2 - 备份 docker run --rm --vloumes-from vol_simple -v$(pwd):/backup ubuntu tar cvf /backup/data.tar /data
恢复数据卷 1 - 建立目标容器 docker run -it --name vol_bck -v /data ubuntu /bin/bash
恢复数据卷 2 - 解压 docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /

备份数据卷: 指令启动了一个临时的容器,这个容器挂载了两个volume,第一个volume与要备份的volume共享,第二个volume将宿主机的当前目录挂载到容器的/backup下。容器运行后将要备份的内容(/data文件夹)备份到/backup/data.tar,然后删除容器,备份后的data.tar就留在了当前目录。

恢复数据卷: 首先运行了一个新容器作为数据恢复的目标。第二行指令启动了一个临时容器,这个容器挂载了两个volume,第一个volume与要恢复的volume共享,第二个将宿主机的当前目录挂载到容器的/backup下。由于之前备份的data.tar在当前目录下,那么它在容器中的/backup也能访问到,容器启动后将这个存档文件中的/data恢复到跟目录下,然后删除容器,恢复后的数据在vol_bck的volume中了。

参考

推荐阅读更多精彩内容