导航

楔子:
不止于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
				
		  
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐