导航
楔子:
不止于linux指令,本文涵盖Idea、git、docker等常用指令,适合收藏,仅当做工具即可,需要时翻出来检索后直接使用。
工具是人类为实现目标所运用的物质或抽象载体。
IDEA 快捷
快捷键 | 说明 |
---|---|
Ctrl + O | 重写 |
Ctrl + I | 实现 |
Ctrl + H | 查看类关系 |
Ctrl + ALT + H | 查看方法调用 |
Alt + F7 | 查看项目中被调用 |
Ctrl + F | 当前页面查找 |
Ctrl + R | 当前页面替换 |
Ctrl + Shift + F | 自定义范围查找 |
Ctrl + ALT + T | try…catch for if等 |
Alt + Insert | 构造函数,set get等 |
Ctrl + Y | 删除 |
Ctrl + D | 复制 |
Ctrl+ ALT + L | 格式化 |
F7 | debug 进入代码 |
F8 | debug 下一步 |
F9 | debug 恢复程序 |
Alt + Shift + F7 | debug 强制进入代码 |
Shift + F8 | debug 下一个断点 |
Alt + F9 | debug 到光标处 |
Git命令
Git常用
命令 | 说明 |
---|---|
git init [file name] | 指定目录,新建代码仓库;不指定目录默认当前目录 |
git clone [url] | 下载远程仓库和所有历史 |
git remote rename [remote-name] [newName] | 修改远程仓库名称,默认origin |
git remote add [shortname] [url] | 增加一个新的远程仓库,并指定名称 |
git config user.name/email | 查看全局名/邮件 |
git config --global user.name/email “newInfo…” | 设置新的名或邮件 |
git add [file1] [file2] | 将几个指定文件放到暂存区 |
git add [dir] | 指定目录放到暂存区 |
git add . | 当前工作区全部放到暂存区 |
git reset head [filename] | add反操作,撤销暂存区的某个文件add操作 |
git reset head | add反操作,撤销暂存区的所有add操作 |
git rm [file1] [file2] | 删除文件,并同步暂存区 |
git rm --cached [file] | 指定文件,删除暂存区,保留工作区 |
git commit -m [msg] | 提交当前暂存区到本地仓库 |
git commit [file1] [file2] … -m [msg] | 指定暂存区的文件,提交到本地仓库 |
git commit -a | 工作区直接提交到本地仓库 |
git branch | 查询所有分支,-r 查远程分支, -a 查询本地+远程 |
git branch [branch-name] | 新建分支,但停留在当前分支,-b 代表切换到新分支 |
git checkout [branch-name] | 切换到指定分支 |
git branch -d [branch-name] | 删除本地分支 |
git branch -dr [remote-name]/[branch-name] | 删除远程仓库的分支 |
git merge [branch-name] | 将指定分支合并到当前分支 |
git cherry-pick [commitId] | 将指定的一次提交,合并到当前分支 |
git tag [tagName] | 以当前分支为准,创建本地tag 增加[commitId]可以根据指定提交创建tag |
git checkout [tagName] | 切换到指定tag |
git push [remote-name] [tagName] | 指定本地tag推送到远程仓库 |
git push [remote-name] --tags | 本地所有tag推送到远程仓库 |
git pull | 默认下载远程仓库关联的分支到当前分支,直接合并 |
git pull [remote-name] [branch-name] | 下载指定的远程仓库和分支,与当前本地分支合并 |
git push | 推送本地仓库的当前分支,到远程关联的仓库分支 |
git push [remote-name] [branch-name] | 推送本地仓库分支到指定的远程仓库分支 |
工作区/暂存区操作
命令 | 说明 |
---|---|
git add . | 工作区所有修改添加到暂存区 |
git add [file1] [file2] | 指定工作区的文件添加到暂存区 |
git rm [file1] [file2] | 删除工作区文件,并将删除记录添加到暂存区,彻底删除 |
git rm --cached [file] | 工作区保留,但删除记录添加到暂存区,不再受版本控制 |
git mv oldName newName | 更改文件名,并添加到暂存区 |
提交本地仓库
命令 | 操作 |
---|---|
git commit -m [message] | 暂存区提交到本地仓库 |
git commit [file]1 [file2] -m [msg] | 指定暂存区的文件,提交到本地仓库 |
git commit -v | 提交时展示所有对比信息 |
git commit --amend -m [msg] | 替代上一次提交 |
git commint --amend [file1] [file2] -m [msg] | 替代上一次提交,并指定文件的变化 |
分支操作
命令 | 说明 |
---|---|
git branch | 展示本地所有分支 |
git branch -r | 展示所有远程分支 |
git branch -a | 展示本地+远程所有分支 |
git branch [branch-name] | 新建一个分支,但停留在当前分支 |
git checkout -b [branch-name] | 新建一个分支,并切换到该分支 |
git branch --track [branch-name] [remoteName]/[branch-name] | 新建一个分支,并建立远程分支关联关系 |
git branch --set-upstream-to [remote]/[branch] | 指定当前分支与远程分支的关联关系 |
git checkout [branch-name] | 切换到指定分支 |
git checkout - | 切换到上一个分支 |
git merge [branch-name] | 把[branch-name]分支合并到当前分支 |
git cherry-pick [commitId] | 把指定的commit合并进当前分支 |
git branch -d [branch-name] | 删除本地分支 |
git push origin --delete [branch-name] | 删除远程分支 |
git branch -dr [branch-name] | 删除远程分支 |
标签操作
命令 | 说明 |
---|---|
git tag [tagName] | 以当前分支为准,创建本地tag |
git tag [tagName] [commitId] | 根据指定的提交ID,创建tag |
git push [remote-name] [tagName] | 指定本地tag推送到远程仓库 |
git push [remote-name] --tags | 本地所有tag推送到远程仓库 |
git checkout -b [branch-name] [tagName] | 新建一个分支并创建tag |
git checkout [tagName] | 切换到指定tag |
git tag --list | 查看所有tag |
git tag -d [tagName] | 删除tag |
git push origin :refs/tags/[tagName] | 删除远程tag |
远程仓库与同步
命令 | 说明 |
---|---|
git fetch [remote-name] | 下载远程仓库的所有变动记录到本地仓库,需手动合并 |
git fetch [remote-name] [branch-name] | 下载指定分支的更新记录到本地仓库,需手动合并 |
git merge [remote-name]/[branch-name] | fetch后,当前分支合并远程分支 |
git fetch [remote-name] [branch-name]:tmp | 从远程仓库下载指定分支,并建立tmp新分支 |
git merge tmp | 当前本地分支,合并tmp分支 |
git remote show [remote-name] | 展示远程仓库的信息 |
git remote add [shortname] [url] | 增加一个新的远程仓库,并指定名称 |
git pull [remote-name] [branch-name] | 下载指定分支的更新记录,并与本地仓库合并 |
git push [remote-name] [branch-name] | 上传本地分支到远程仓库 |
git push [remote-name] | 上传当前分支到远程仓库 |
git push [remote-name] --force | 强制上传当前分支到远程仓库,忽略冲突 |
git push [remote-name] all | 推送所有本地分支到远程仓库 |
撤销操作
命令 | 说明 |
---|---|
git checkout [filename] | 暂存区的文件,恢复到工作区 |
git checkout [commitId] [filename] | 将某次commit指定的文件,恢复到工作区和暂存区 |
git checkout . | 暂存区所有文件,恢复到工作区 |
git reset [file name] | 将暂存区的指定文件,恢复到上次commit,工作区不变 |
git reset --hard | 工作区和暂存区,全部恢复到上次commit |
git reset [commitId] | 暂存区恢复指定commit,工作区不变 |
git reset --hard [commitId] | 工作区和暂存区,全部恢复到指定commit |
git reset --keep [commitId] | 工作区和暂存区不变,但是提交跟踪,恢复到指定的commit |
git reset head [filename] | add反操作,撤销暂存区某个文件的add操作 |
git reset head | add反操作,撤销暂存区的所有add操作 |
git revert [commitId] | 取消指定的commit |
git stash | 保存当前工作区和暂存区的状态 |
git stash pop | 恢复上次工作区和暂存区的状态 |
查看信息
命令 | 说明 |
---|---|
git log | 查询当前分支的历史版本 |
git status | 查询所有变更文件 |
git log --stat | 查询每次commit发生变更的文件 |
git log -S [keyword] | 关键字搜索commit -m信息 |
git log -p [file name] | 查询指定文件相关的diff |
git shortlog -sn | 查询提交过的用户,按提交次数排序 |
git blame [file name] | 查询文件被改修的时间、用户 |
git diff | 暂存区和工作区的差异 |
git diff --cached [file name] | 暂存区的文件与上一个commit的差异 |
git diff HEAD | 工作区与上次commit的差异 |
git show --name-only [commitId] | 查询指定commit的文件变化 |
Linux
Linux基本
cd 路径 改变当前路径
ls 查看当前路径下的文件
- -a 显示所有文件及目录
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r 将文件以相反次序显示(原定依英文字母次序)
- -t 将文件依建立时间之先后次序列出
- -R 若目录下有文件,则以下之文件亦皆依序列出
查看日志
cat /日志路径
tail -f /日志路径
日 志 文 件 说 明:
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
系统
uname -a 查看内核/操作系统/CPU信息
cat /etc/issue
cat /etc/redhat-release 查看操作系统版本
cat /proc/cpuinfo 查看CPU信息
hostname 查看计算机名
lspci -tv 列出所有PCI设备
lsusb -tv 列出所有USB设备
lsmod 列出加载的内核模块
env 查看环境变量
资源
free -m 查看内存使用量和交换区使用量
df -h 查看各分区使用情况
du -sh <目录名> 查看指定目录的大小
grep MemTotal /proc/meminfo 查看内存总量
grep MemFree /proc/meminfo 查看空闲内存量
uptime 查看系统运行时间、用户数、负载
cat /proc/loadavg 查看系统负载
rm -rf 目录名 删除文件
chown username /abc -R 将目录/abc所有者设置为username
磁盘和分区
mount | column -t 查看挂接的分区状态
mount /dev1 /mnt 将/dev1挂载到/mnt下
fdisk -l 查看所有分区
swapon -s 查看所有交换分区
hdparm -i /dev/hda 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE 查看启动时IDE设备检测状况
df -h 查看分区使用情况
文件
mkdir /xx/xx 创建文件夹
touch x.md 创建文件实例
rm -rf 目录名 删除文件夹和实例
rm -f /xx/a.log 删除文件实例
cp 源文件(/a/x.txt) 目标文件(/b/x.txt) 复制,如果复制整个目录需要参数 -R
mv 源文件 目标文件 移动,-b当文件存在时创建备份, -f直接覆盖
tar -zxvf 文件名.tar.gz/xz/bzip2 目标目录 解压缩tar
网络
ifconfig 查看所有网络接口的属性
iptables -L 查看防火墙设置
route -n 查看路由表
netstat -lntp 查看所有监听端口
netstat -antp 查看所有已经建立的连接
netstat -s 查看网络统计信息
lsof -i:8081 查看指定端口情况信息
进程
ps -ef|grep <启动命令相关关键字> 查看所有进程,概要信息
top 实时显示进程状态
ps -aux|grep <启动命令相关关键字> 查看所有进程,详细信息
用户
w <用户名>,查看活动用户
id <用户名>,查看指定用户信息
last <用户名>, 查看用户登录日志
cut -d: -f1 /etc/passwd,查看系统所有用户
cut -d: -f1 /etc/group 查看系统所有组
crontab -l 查看当前用户的计划任务
groupadd <用户组>,添加用户组
useradd <用户名> -g<用户组> -p<密码>,添加用户
userdel -r <用户名>, 彻底删除用户
服务
chkconfig --list ,列出所有系统服务
chkconfig --list | grep on ,列出所有启动的系统服务
chkconfig --add <服务名>,添加/etc/init.d/服务名
chconfig 服务名 on,设置服务开机启动
service sshd,查看SSH服务
service NetworkManager stop,停止网络模块
chkconfig NetworkManager off,停止网络模块
chkconfig --list sshd 查看系统服务名称类似sshd的服务
systemctl start/stop/restart <服务名>,服务启停
systemctl status <服务名> ,查看服务信息
systemctl enable <服务名> ,设置服务开机启动
systemctl disable <服务名 >,取消服务开机启动
Docker
docker基础命令
设置docker hub镜像地址和docker存储地址
编辑daemon.json
{
"registry-mirrors": [
"https://8d489jr8.mirror.aliyuncs.com"
],//dockerhub 镜像地址
"insecure-registries": [],//设置私有仓库
"debug": true,
"experimental": true,
"log-level": "warn",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
},
"graph":"/var/lib/docker" //docker本地存储数据的地址,镜像、数据卷、容器等
}
清理空间(pull挂起的、无tag的镜像,未启动的容器,无用的网络等)
docker system prune
容器内访问宿主机地址 host.docker.internal
查看容器日志
docker logs -f -t --tail 100 容器ID
登录镜像仓库
docker login --username=账号 仓库地址(默认DockerHub)
镜像
搜索镜像
docker search xxx
查看本地镜像
docker images
删除镜像
docker rmi 镜像id 或 镜像名:tag
根据现有容器创建镜像
docker commit -a “作者” -m “说明” -p 容器ID 镜像名:tag
打标签,一般用于私有库上传
docker tag 源镜像ID 仓库地址/新镜像名:版本
拉取镜像,不指定tag则最新,指定仓库地址在xxx:tag前仓库地址
docker pull xxx:tag
上传镜像,指定仓库在xxx:tag前加仓库地址
docker push xxx:tag
导出镜像
docker save 镜像名 > /xxx.tar
导入镜像
docker load --input /xxx.tar
容器
查看本地容器
docker ps -a
启停容器
docker start/stop 容器id 或 name
重启容器
docker restart 容器id 或name
删除容器,参数-v 代表同时删除数据卷,如果有其它容器在使用,则不会删除
docker rm 容器id 或 name
根据镜像生成容器
docker run 参数… 镜像id 或者 镜像名:tag 指令[可选,会覆盖Dockerfile的CMD]
- -d 后台运行容器,并返回容器ID
- –restart = 重启策略
- 默认no,退出时不启动
- always退出容器时,总是启动
- unless-stopped,退出时保持启动,忽略docker停止容器指令
- on-failure,故障退出时启动
- on-failure:3,故障退出时启动,最多尝试3次
- –name 容器名
- –hostname 主机名
- -p 暴露端口,对外暴露端口:容器内部服务端口
- –net 指定容器使用的网络
- -e 设置环境变量,格式 -e “key=val”
- –env 设置环境变量,格式 --env key1=“val1” key2=“val2”
- –ip 分配docker网络里的固定ip给容器
- –dns 指定dns服务器地址
- -m或–memory 容器内存上限,单位B、K、M、G
- –cpus 容器cpu上限,核心数
- –it 生成容器并进入
- –link 源容器:目标容器,单向打通网络
- 挂载数据卷
在指定的容器上执行指令, -user root代表强制root身份,例如模拟一个终端:
docker -exec -it 容器id /bin/bash
容器修改后做新镜1像
docker commit -a “sine” -m “说明描述” -p 容器ID 新镜像名:tag
复制宿主机文件到容器
docker cp 文件完整路径 容器ID或name:目标路径
复制容器文件到宿主机
docker cp 容器ID或name:容器内文件完整路径 宿主机路径
修改容器启动参数
docker container update 参数… 容器id或name
查看容器网络所有信息,包括LABEL、网络等
docker inspect 容器ID
docker网络
查看所有网络
docker network ls
创建自定义网络
docker network create 网络名
-
–driver,网络类型,默认bridge
- none,容器不做任何配置,只有一个127本地回环IP
- bridge,docker节点内子网,按网段分配容器IP,容器未指定 IP则自动分配子网IP
- host,容器共享宿主机IP,端口不可冲突
- overlay,docker集群子网
-
–subnet,子网段,如10.100.0.0/16代表10.100.0.1到10.100.255.255
10.0.0.0/8代表10.0.0.1至10.255.255.255
-
–gateway,网关,如10.100.0.1
创建自定义子网
docker network create --driver bridge --subnet 10.100.0.0/16 网络名
删除网络
docker network rm 网络名
删除所有未使用的网络
docker network prune
查看网络明细
docker network inspect 网络名
容器加入指定网络(可加入多个网络,便于打通不同网段)
docker network connect 网络名 容器ID
断开容器与指定的网络
docker network disconnect 网络名 容器ID
数据卷
修改数据卷路径,在默认路径/var/lib/docker,编辑daemon.json
{
"log-level": "warn",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
},
"graph":"/var/lib/docker"
}
查看所有数据卷
docker volume ls
创建一个自定义容器卷
docker volume create volumeName
查看指定容器卷详情信息
docker volume inspect volumeName
删除数据卷
docker volume rm volumeName
匿名挂载,不显示指定数据卷名
docker run … -v /容器路径
具名挂载
docker run … -v 数据卷名:/容器路径
指定宿主机路径挂载
docker run … -v /宿主机路径:/容器路径
共享指定容器的挂载
docker run … --volumes-from 容器名/ID
Dockerfile
指定dockerfile文件制作镜像
docker build -f dockerfile路径 -t 镜像名:tag .
Dockerfile指令
指令 | 示例 | 说明 |
---|---|---|
FROM | FROM java:8 | 当前制作镜像的基础镜像 |
MAINTAINER | MAINTAINER sine666@live.com | 镜像作者 |
LABEL | LABEL key1=“val1” key2=“val2” | 容器的元数据信息 docker inspect 容器ID可查询 |
COPY | COPY lib/jar/ /usr/local/app/jar/ | 把当前上下文目录的源文件, 复制到容器的指定路径 容器路径不存在则自动创建 |
ADD | 与COPY用法一致 复制gzip、xz、bzip2这些tar时 会自动解压 | |
WORKDIR | WORKDIR /usr/local/myapp | 指定工作目录 也就是RUN执行命令时的当前目录 |
ENV | ENV JAVA_HOME=“…” | 设置环境变量 |
EXPOSE | EXPOSE 8000 | 镜像暴露的端口 |
VOLUME | VOLUME “容器路径” | 设置匿名卷挂载 |
RUN | RUN echo “run info” | 制作镜像过程中执行的命令 可以多个RUN build过程中,每个RUN都是新建的一层 |
CMD | CMD echo “single info…” | 启动容器时执行的命令 会被docker run参数覆盖 |
ENTRYPOINT | ENTRYPOINT echo “entrypoint…” | 启动容器时一定会被执行的命令 不会被docker run参数覆盖 |
ONBUILD | ONBUILD echo “heihei…” | 本镜像不会执行的命令 FROM这个镜像时,会执行 |
shell和exec
RUN、CMD、ENTRYPOINT都支持shell格式和exec格式的命令行
# shell
RUN yum -y install vim
CMD yum -y install vim
ENTRYPOINT yum -y install vim
# exec
RUN ["yum", "-y", "install", "vim"]
CMD ["yum", "-y", "install", "vim"]
ENTRYPOINT ["yum", "-y", "install", "vim"]
执行多条指令,使用&&拼接
RUN yum install -y vim && echo "ok..."
CMD yum -y install vim \
&& echo "ok..."
ENTRYPOINT yum -y install vim \
&& echo "ok..."
Dockerfile模板
#基础父镜像
FROM chinasine/centos:7
#当前镜像作者
MAINTAINER 张三<666@163.com>
#复制应用文件
COPY /app/xx.jar /usr/local/app/xx.jar
#复制ENTRYPPOINT执行的shell文件,比如指定DNS
#entrypoint.sh 内容假设为 echo nameserver 219.141.140.10 >> /etc/resolv.conf
COPY entrypoint.sh /usr/local/entrypoint.sh
#指定工作目录
WORKDIR /usr/local/app
#设置环境变量
ENV MYSQL_USER_NAME=root \
MYSQL_PASSWORD=root
#制作镜像时执行的shell
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN yum -y install vim
#启动容器时的指令
CMD ["java", "-jar", "-server", "-Xms2048M", "-Xmx4096M", "-Xmn1536", "-XX:MaxTenuringThreshold=20", "xx.jar"]
#启动容器时,一定会执行的指令
ENTRYPOINT sh /usr/local/entrypoint.sh
docker-compose
按照docker-compose.yaml的规则策略,配置一组服务,这些服务可以根据镜像构建并生成容器
compose指令
docker-compose基本参数
-f,指定docker-compose文件
-p,指定项目名称
–env-file,指定环境变量文件(格式key=val)
指令 | 说明 |
---|---|
docker-compose start | 启动服务(启动一组容器) |
docker-compose stop | 停止服务(停止一组容器) |
docker-compose restart | 重启服务 |
docker-compose build | 构建或重建服务中的镜像 |
docker-compose create | 创建服务但不启动 |
docker-compose down | 停止和删除容器、镜像、网络、数据卷 |
docker-compose up | 重新构建镜像并启动服务,-d 后台运行 |
docker-compose exec | 和docker exec功能一致, 容器名参数改为服务名 例如,docker-compose exec 服务名 /bin/bash |
docker-compose kill | 停止服务容器,-s 参数指定信号,默认SIGINT 例如docker-compose kill -s SIGTERM |
docker-compose logs | 显示日志, -f 跟踪实时日志,–tail 200截取最后200条日志 |
docker-compose pause | 暂停服务容器 |
docker-compose pull | 拉取compose文件中build的镜像 |
docker-compose push | 推送compose文件中build的镜像 |
docker-compose rm | 删除服务已停止的服务容器,-f强制删除 |
docker-compose run | 和docker run功能一致,在指定的服务容器上执行指令 例如docker-compose run 服务名1 /bin/bash |
docker-compose scale | 指定服务的容器数量 例如docker-compose scale 服务名1=2 服务名2=5 |
yaml配置文件
#docker-compose版本号
version: '3'
#网络定义
networks:
#自定义网络名称
custom_network:
#网络类型,bridge(子网段)、overlay(docker集群子网段)、host(共享宿主机IP)、none
driver: bridge
ipam:
driver: default
config:
#网段设置10.200.0.1到10.200.255.255
- subnet: 10.200.0.0/16
#数据卷定义
volumes:
app_data:
mysql_data:
#服务定义
services:
#应用服务名
app:
#根据dockerfile构建镜像
build:
#dockerfile 上下文路径
context: .
#dockerfile文件名
dockerfile: dockerfile
#dockerfile中使用的变量,$apppath
args:
apppath: /usr/local/app
#对外暴露端口:容器内部服务端口
ports:
- "9000:8000"
- "9001:7002"
#容器名
container_name: app
#网络配置,可加入多个网络
networks:
#自定义网络的名称
custom_network:
#指定IP4,也可以不指定IP由docker分配,也可指定IPV6 ipv6_address
ipv4_address: 10.200.1.2
#环境变量文件(格式key=val),当前yaml配置文件${key}引用
env_file: /usr/local/docker/custom.env
#定义容器中的环境变量
environment:
MYSQL_HOST: "10.200.1.1"
MYSQL_DATABASE: "app_db"
MYSQL_USERNAME: "root"
MYSQL_PASSWORD: "root"
#no,默认禁止自动重启容器;always,任何情况都保持容器启动;出现on-failure错误时才自动启动
restart: on-failure
#数据卷持久化定义,也可以直接 宿主机目录:容器目录 直接定义
volumes:
#数据卷app_ata对应容器里/usr/local/app/logs
- app_data:/usr/local/app/logs
#单向打通容器间网络,同网段可忽略
links:
- mysql
#当前服务,依赖的其它服务,其他服务启动完成才处理当前服务
depends_on:
- mysql
#deploy配置为swarm集群相关参数
#deploy:
#mysql服务名
mysql:
#直接根据镜像构建服务
image: mysql:5.7.16
#对外暴露端口:容器内部服务端口
ports:
- "3306:3306"
#容器名
container_name: mysql
#网络配置,可加入多个网络
networks:
#自定义网络的名称
custom_network:
#指定IP4, 也可以不指定IP由docker分配,也可指定IPV6 ipv6_address
ipv4_address: 10.200.1.1
#直接定义容器中的环境变量
environment:
TZ: "Asia/Shanghai"
MYSQL_DATABASE: "app_db"
MYSQL_ROOT_PASSWORD: "root"
#no,默认禁止自动重启容器;always,任何情况都保持容器启动;出现on-failure错误时才自动启动
restart: always
#数据卷持久化定义,也可以直接 宿主机目录:容器目录 直接定义
volumes:
#数据卷mysql_data对应容器里的路径
- mysql_data:/var/lib/mysql
- mysql_data:/etc/my.cnf
DockerSwarm
docker多宿主机节点集群,容器南北通信使用的是docker_gwbridge/bridge网络,容器间通信使用overlay网络,南北docker_gwbridge网络其默认网段172.18.0.0/16可能存在冲突,通常需要在创建docker集群前创建网络:
docker network create --subnet 172.100.0.0/16 \
--gateway 172.100.0.1
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
创建自定义overlay网络时,需要指定–attachable参数,表示不仅仅comspose文件中deploy定义的或者docker stack定义的服务容器才能加入,任何容器都能加入该网络。
docker network create --attachable --driver overlay --subnet 10.200.0.0/16 \
--gateway 10.200.0.1 \
--opt com.docker.network.driver.overlay.vxlanid_list=4096
ingress
swarm集群节点
指令 | 说明 |
---|---|
docker swarm init | 初始化docker集群节点 –advertise-addr 指定宿主机IP –force-new-cluster 除当前节点外,都为work节点 |
docker swarm join --token 令牌… 管理者节点IP:2377 | 当前docker节点加入集群 |
docker swarm join-token worker | 查看工作者节点加入令牌token |
docker swarm join-token manager | 查看管理者节点加入令牌token |
docker swarm leave | 当前节点离开集群 管理者节点需要–force参数强制离开 |
docker node ls | 查看所有docker节点 |
docker node demote hostname | 根据主机名,把该docker节点降为工作者节点 |
docker node promote hostname | 根据主机名,把该docker节点升为管理者节点 |
docker node inspect --pretty hostname | 查看docker节点详细信息 |
swarm服务管理
service是基于docker-compose或者docker service指令创建和管理,运行在容器之上。
指令 | 说明 |
---|---|
docker service create 参数… 镜像 | 创建服务,参数说明: –replicas 副本数(多个容器) –name 服务名 –hostname 容器主机名 –update-delay 10s更新多个副本时,间隔时间 –update-parallelism 更新时,同时更新的副本数 –update-failure-action 更新失败的处理策略, pause停止或者continue继续,默认pause –rollback-monitor 容器回滚的时间间隔,默认20s –network 指定网络 创建一个volume数据卷并挂载 –mount type=volume,src=volume名称,dst=容器目录 创建bind挂载 –mount type=bind,src=宿主目录,dst=容器目录 –mode replicated(默认)或global, global强制每个节点只能运行服务的一个副本容器 -p 暴露端口:容器内部端口 |
docker service update 参数… 服务名 | 更新服务,参数说明: –image 新镜像 –rollback 回滚 –network-add 网络名,把容器加入新网络 –network-rm 网络名,把容器从指定网络摘除 –publish-add 暴露端口:容器端口,新增端口 –publish-rm 暴露端口:容器端口,删除端口 –relipcas 3,设置服务的容器副本数 |
docker service scale 服务名=副本数 | 设置服务的容器副本数 |
docker service ls | 查看服务列表 |
docker service rm 服务名 | 删除服务 |
docker service ps | 查看服务的任务信息 |
stack编排服务
service服务是运行在容器之上,stack则是运行在service之上,stack是一组service的集合
基本指令
指令 | 说明 |
---|---|
docker stack deploy 编排服务名(stack name) | 创建一个stack编排服务: -c 指定compose编排文件 |
docker stack ls | 查看所有的编排服务stack |
docker stack ps 编排服务名(stack name) | 查看编排服务的任务信息 |
docker stack rm 编排服务名 | 删除一个编排服务stack |
docker stack services 编排服务名 | 查看一个编排服务里的所有服务信息 |
stack服务编排,在传统的docker-compose.yml文件中使用deploy节点配置实现集群方面的配置,并且使用docker-compose命令时,配置文件中的deploy节点配置会被过滤,如下所示:
#docker-compose版本号
version: '3'
#网络定义
#networks: ......
#数据卷定义
#volumes: ......
#服务定义
services:
#应用服务名
app:
#其它传统docker-compose 配置......
#deploy配置为swarm集群相关参数
deploy:
#容器副本数
replicas: 3
#3.0以上版本配置
#vip(默认) Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址
#dnsrr DNS轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表, 客户端直接访问其中的一个地址
endpoint_mode: vip
# global 每个集群节点都只有服务的一个容器
# replicated 用户自定义容器的副本数量
mode: replicated
#尝试重启策略,on-failure表示出现failure错误时,
#none 不重启, any 任何时候退出容器都要重启
restart_policy:
condition: on-failure
#尝试重启的间隔,默认0秒
delay: 0s
#尝试重启的次数,不指定无限尝试
max_attempts: 3
#服务更新配置
update_config:
#服务更新时,一次更新多少个容器副本
parallelism: 1
#服务更新时,每批容器副本之间的时间间隔
delay: 10s
#服务更新失败的处理策略
#默认暂停pause,continue继续更新,rollback回滚
failure_action: pause
#回滚期间容忍的失败率百分比,默认0
max_failure_ratio: 0.2
resources:
#容器的资源限制
limits:
cpus: "1.5"
memory: 1024M
#容器兜底资源
reservations:
cpus: "0.5"
memory: 256M
#compose 3.7后新增配置
rollback_config:
#服务每一批回滚的容器副本数,0表示表示服务的所有容器副本一起回滚
parallelism: 0
#每批回滚的间隔,默认0s
delay: 0s
#回滚失败时的处理策略,continue继续回滚,pause暂停
failure_action: continue
#回滚期间容忍的失败率百分比,默认0
max_failure_ratio: 0.2