将容器保存为镜像
1
| docker commit 容器名 复制镜像名 可加参数-a=“作者名”
|
将镜像打包成文件
1
| docker save -o 文件名.tar 镜像名
|
查询 Images 镜像 latest 版本号
1
| docker image inspect (docker image名称):latest|grep -i version
|
将文件导入镜像
将容器导出为文件
创建自定义网络
docker network create –subnet=[自定义网络广播地址]/[子网掩码位数] [自定义网络名]
1
| docker network create --subnet=192.168.11.0/24 testnet
|
删除自定义网络
1
| docker network rm testnet
|
固定容器 IP 地址
docker run -it –name [容器名] –net [网络名] –ip [选定网络下固定 IP 地址] ubuntu:latest /bin/bash
1
| docker run -it --rm --name=test --net=testnet --ip=192.168.11.99 alpine /bin/sh
|
使用容器网络
1
| docker run -it --rm --name=lhwl --net=container:容器ID
|
更新 docker 参数
1
| docker update --restart=always 容器ID
|
停止容器时自动删除掉容器
1
| docker run -it --rm --name test 容器ID
|
控制容器的 CPU 优先级 (每个容器默认值为 1024)
1
| docker run -it --cpu-shares 512 -name test 容器ID
|
绑定指定 CPU 到容器 (绑定 CPU0 和 1 两核)
1
| docker run -it --cpuset-cpus 0-1 centos
|
控制容器使用的内存容量
1
| docker run -it -m 128m centos
|
控制容器写入速度
1
| docker run -it -name test --device /dev/sda:/dev/sda --device-write-bps /dev/sda:1mb centos
|
容器变量时区设置
1
| docker run -e TZ="Asia/Shanghai" #运行时添加上TZ选项
|
容器重命名
1
| docker rename name1 name2
|
指定容器主机名 (-h)
1
| docker run -it --name=test -h=test centos
|
清理所有无用镜像
清理所有无用数据卷
清理所有停止的容器
Docker ps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| docker ps -a :会列出当前服务器中所有的容器,无论是否在运行。 docker ps -s :会列出容器的文件大小(容器增加的大小/容器的虚拟大小) docker ps -q :仅列出CONTAINER ID 字段 docker ps -l : 显示最后一个运行的容器(无论该容器目前处于什么状态) docker ps -n 5 :显示最后 x 个运行容器,当x为1时和 -l 含义相同。(无论该容器目前处于什么状态) docker ps --no-trunc :不对输出进行截断操作,此时可以看到完整的COMMAND,CONTAINER docker -f :使用过滤器来过滤输出 id (容器的id) label name(容器名称) exited (整数-容器退出状态码,只有在使用-all才有用) status 容器状态(created,restarting,running,paused,exited,dead) ancestor 过滤从指定镜像创建的容器 before (容器的名称或id),过滤在给定id或名称之后创建的容器 isolation (default process hyperv) (windows daemon only) volume (数据卷名称或挂载点),--过滤挂载有指定数据卷的容器 network(网络id或名称),过滤连接到指定网络的容器
|
批量导入镜像
1
| ll *.tar|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash
|
Docker 创建时自动建好 MYSQL 仓库
1 2
| FROM mysql:5.7 COPY sql/*.sql /docker-entrypoint-initdb.d/
|
Dockerfile
1 2 3 4
| FROM centos:8 基础镜像 LABEL name=zhuchuanliang power=NB 容器说明 ADD rtorrent.rt /rtorrent.rt 添加rtorrent.rt文件到容量 ESXPOSE 80 容器开放的端口
|
Docker Swarm
初始化 swarm manager 并制定网卡地址
1
| docker swarm init --advertise-addr 182.48.115.237
|
查看 swarm worker 的连接令牌
1
| docker swarm join-token worker
|
查看 swarm manager 的连接令牌
1
| docker swarm join-token manager
|
加入 docker swarm 集群,作为 worker 节点
1
| docker swarm join --token SWMTKN-1-4roc8fx10cyfgj1w1td8m0pkyim08mve578wvl03eqcg5ll3ig-f0apd81qfdwv27rnx4a4y9jej 182.48.115.237:2377
|
使旧令牌无效并生成新令牌
1
| docker swarm join-token --rotate
|
查看集群中的节点
查看集群中节点信息
1
| docker node inspect swarm-node1 --pretty
|
调度程序可以将任务分配给节点
1
| docker node update --availability active swarm-node1
|
调度程序不向节点分配新任务,但是现有任务仍然保持运行
1
| docker node update --availability pause swarm-node1
|
调度程序不会将新任务分配给节点。调度程序关闭任何现有任务并在可用节点上安排它们。也就是线下节点,不参与任务分配.
1
| docker node update --availability drain swarm-node1
|
添加节点标签
1
| docker node update --label-add label1 --label-add bar=label2 swarm-node1
|
删除节点标签
1
| docker node update --label-rm label1 swarm-node1
|
将 worker 节点升级为 manager 节点
1
| docker node promote swarm-node1
|
将 manager 节点降级为 worker 节点
1
| docker node demote swarm-manager-node
|
查看服务列表
查看服务的具体信息
1
| docker service ps my-test
|
创建一个不定义 name,不定义 replicas 的服务. (如下的 nginx 是 docker 的 nginx 镜像名称,不是服务名称)
1
| docker service create nginx
|
创建一个指定 name 的服务
1
| docker service create --name my-nginx nginx
|
创建一个指定 name、run cmd 的服务
1
| docker service create --name my-nginx nginx ping www.baidu.com
|
使用 yaml 文件创建 test 容器
1
| docker stack deploy -c deploy.yml test
|
重启 docker 集群
1
| docker service scale srment_nacos=0 && docker service scale srment_nacos=1
|
创建一个指定 name、version、run cmd 的服务
1 2
| docker service create --name my-redis redis:3.0.6 docker service create --name my-nginx nginx:1.8 /bin/bash
|
创建一个指定 name、port、replicas 的服务
1
| docker service create --name my-nginx --replicas 3 -p 80:80 nginx
|
为指定的服务更新一个端口
1
| docker service update --publish-add 80:80 my-nginx
|
为指定的服务删除一个端口
1
| docker service update --publish-rm 80:80 my-nginx
|
将 redis:3.0.6 更新至 redis:3.0.7
1
| docker service update --image redis:3.0.7 redis
|
配置运行环境,指定工作目录及环境变量
1
| docker service create --name my-nginx --env MYVAR=myvalue --workdir /data/www --user my_user nginx ping www.baidu.com
|
创建一个 my-nginx 的服务
1
| docker service create --name my-nginx nginx ping www.baidu.com
|
更新 my-nginx 服务的运行命令
1
| docker service update --args "ping www.baidu.com" my-nginx
|
删除一个服务
1
| docker service rm my-nginx
|
在每个群组节点上运行 web 服务
1
| docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest
|
创建一个 overlay 网络
1 2
| docker network create --driver overlay my-network docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 haha-network
|
创建服务并将网络添加至该服务
1
| docker service create --name my-test --replicas 3 --network my-network redis
|
删除群组网络
1
| docker service update --network-rm my-network my-test
|
更新群组网络
1
| docker service update --network-add haha-network my-test
|
创建群组并配置 cpu 和内存
1
| docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx
|
更改所分配的 cpu 和内存
1
| docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx
|
创建服务时自定义的几个参数
- 指定每次更新的容器数量
--update-parallelism
- 指定容器更新的间隔
--update-delay
- 定义容器启动后监控失败的持续时间
--update-monitor
- 定义容器失败的百分比
--update-max-failure-ratio
- 定义容器启动失败之后所执行的动作
--update-failure-action
例: 比如:创建一个服务并运行 3 个副本,同步延迟 10 秒,10% 任务失败则暂停
1
| docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
|
回滚至之前版本
1 2 3 4 5
| docker service update --rollback mysql
# 自动回滚 # 如果服务部署失败,则每次回滚2个任务,监控20秒,回滚可接受失败率20% docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest
|
创建服务并将目录挂在至 container 中
1 2 3 4 5 6
| docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
# 需要注意使用bind绑定宿主机目录会带来的风险 # - 绑定的主机路径必须存在于每个集群节点上,否则会有问题; # - 调度程序可能会在任何时候重新安排运行服务容器,如果目标节点主机变得不健康或无法访问; # - 主机绑定数据不可移植,当你绑定安装时,不能保证你的应用程序开发方式与生产中的运行方式相同;
|
添加 swarm 配置
1
| echo "this is a mysql config" | docker config create mysql -
|
查看配置
查看配置详细信息
1
| docker config inspect mysql
|
删除配置
添加配置
1
| docker service update --config-add mysql mysql
|
删除配置
1
| docker service update --config-rm mysql mysql
|
添加配置
1
| docker config create kevinpage index.html
|
启动容器的同时添加配置
1
| docker service create --name nginx --publish 80:80 --replicas 3 --config src=kevinpage,target=/usr/share/nginx/html/index.html nginx
|