Devops

Devops,第1张

Devops

来自视频课件

一、docker安装

官网:https://docs.docker.com/engine/install/centos/

卸载旧版本docker,
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum install docker-ce docker-ce-cli containerd.io -y

systemctl start docker
systemctl enable docker
二、安装docker-compose

官网:https://docs.docker.com/compose/install/
(我的gitee地址docker-compose版本为2.4.1)

git clone -b docker-compose https://gitee.com/cyx199602/devops.git
cd devops && bash install.sh
gitlab安装(太占内存,所以我直接用的gitee)

官网:https://about.gitlab.cn/install/

1、采用Docker安装
docker run --detach \
  --hostname gitlab.example.com \
  --publish 10443:443 --publish 10080:80 --publish 10022:22 \
  --name gitlab \
  --restart always \
  --volume /root/cicd/gitlab/config:/etc/gitlab \
  --volume /root/cicd/gitlab/logs:/var/log/gitlab \
  --volume /root/cicd/gitlab/data:/var/opt/gitlab \
  --shm-size 256m \
   gitlab/gitlab-ce:latest
2、采用docker-compose安装

docker search gitlab
docker pull gitlab/gitlab-ce
mkdir -p cicd/gitlab
cd cicd/gitlab
#编辑docker-compose.yml
vi docker-compose.yml

version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://localhost:81'
      gitlab_rails['gitlab_shell_ssh_port'] = 22
    ports:
      - '10000:81'
      - '10022:22'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
#执行
docker-compose up -d

解析
image:选择的镜像
container_name:容器名
restart: 重启策略,always 任何情况都重启,这里让开机自启动

environment:环境变量
结合yum安装gitlab查看
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
#基础配置
#这里方便举例,我用端口81,将环境变量带入容器中,其实不用这么复杂,这里只是方便理解
external_url ‘http://gitlab.example.com/’
#用户访问所使用的URL,域名或者IP地址
gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’
#时区
SSH配置
gitlab_rails[‘gitlab_shell_ssh_port’] = 22

ports:
主机端口:容器内部端口
volumes:
主机目录:容器目录
其他docker-compose详解请在 docker-compose.yml详解查看

三、Jenkins安装 1、安装jenkins
#拉取Jenkins镜像
#编写docker-compose.yml,首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限
mkdir -p /root/cicd/jenkins/data
chmod -R a+w /root/cicd/jenkins/data
docker pull jenkins/jenkins
cd /root/cicd/jenkins/
vi docker-compose.yml

version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports:
      - 10000:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/

查看初始密码

#容器中查看
docker exec -it jenkins bash
cat /var/jenkins_home/secrets/initialAdminPassword

#或者在映射的目录中查看
cat /root/cicd/jenkins/data/secrets/initialAdminPassword

选社区和自定义安装都可以

下载完成后修改密码
设置------下面找到password

2、安装插件并添加ssh服务器

manager Jenkins------manager plugins
下载插件Publish Over SSH和 Git Parameter

可以在"高级"设置下载源


添加ssh服务器

3、配置jdk1.8+maven3 配置jdk1.8

可以直接下载我下好的 jdk1.8
链接:https://pan.baidu.com/s/111VQY0X21Qa8v0kUKY0fJA?pwd=1111
提取码:1111
上传到虚拟机

tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/local/bin/
vi /etc/profile

export JAVA_HOME=/usr/local/bin/jdk1.8.0_333
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile
java -version

因为jenkins是docker安装,所以这些环境需要配置在容器中

docker cp /usr/local/bin/jdk1.8.0_333 716:/usr/local/bin/jdk1.8.0_333
配置maven3
git clone -b maven3 https://gitee.com/cyx199602/devops.git
tar -zxvf devops/apache-maven-3.6.3-bin.tar.gz -C /usr/local/bin/
vi /etc/profile
export MAVEN_HOME=/usr/local/bin/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH

source /etc/profile
mvn -v

因为jenkins是docker安装,所以这些环境需要配置在容器中

#716容器id前3位
docker cp /usr/local/bin/apache-maven-3.6.3 716:/usr/local/bin/apache-maven-3.6.3
docker cp /etc/profile 716:/etc/profile
docker exec -it 716 bash
source /etc/profile
在manager jenkins-----Global Tool Configuration中添加jdk和java的容器路径

四、idea测试代码

这里省去windows安装git,jdk和maven
创建一个spring web测试代码

1、git 提交代码

新建class代码,测试成功后上传

package com.cyx.mytest.controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class testController {
    @GetMapping("/test")
    public String test() {
        return "111111111111111111111111111111111111111111111111";
    }
}

新建docker目录,写入Dockerfile和docker-compose

#dockerfile
FROM java:8u40-jdk
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

#docker-compose
version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1
    container_name: mytest
    ports:
    - 20000:8080


2、在目录用命令提交代码,直接在项目文件夹,比如html。
git config --global user.name "..."
git config --global user.email "..."
创建 git 仓库:

git init 
git add .
git commit -m "mytest"
git remote add origin https://gitee.com/cyx199602/html.git
git branch test
git checkout test
git push -u origin "test" -f

其他git命令请看git命令模块

五、jenkins的使用 1、持续集成 jenkins添加git,测试拉取




jenkins服务器工作目录中查看拉去成功

构建容器 *** 作

调用顶层maven 打包

clean package -Dskip test


多了一个target目录

目标服务器192.168.0.5查看

target/*jar docker/*


构建镜像(下面的内容在目标服务器的运作,所以查看目标服务器的路径配置)
#使用绝对路径
cd /root/docker
#将target的jar包移动到当前目录
mv ../target/*.jar ./
#停止之前的docker-compose并构建
docker-compose down
docker-compose up -d --build
删除none镜像
docker image prune -f


2、持续交付

之前下载的 Git Parameter



保存后再构建,会出现选择标签栏,再构建

git命令
git commit --allow-empty -m "first commit"
Git 全局设置:

git config --global user.name "..."
git config --global user.email "..."
创建 git 仓库:

mkdir html
cd html
git init 
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/cyx199602/html.git
git push -u origin "master"
已有仓库?

cd existing_git_repo
git remote add origin https://gitee.com/cyx199602/html.git
git push -u origin "master"

标签
git tag
git tag v2.4.1
git push -u origin master v2.4.1
若存在很多未推送的本地标签,你想一次全部推送的话:
git push origin --tags
查看本地所有 tag:
git tag 或者 git tag -l
查看远程所有 tag:
git ls-remote --tags origin
3.删除标签
本地 tag 的删除:
git tag -d <tagName>
远程 tag 的删除:
git push origin :refs/tags/<tagName>

1、基础 *** 作
#提交代码
git add .
git commit -m "注释"
git push origin "分支"

#查询状态
git status

#查看日志
git log --stat
git reflog --date=iso

#建立分支
git checkout test
git push
git push --set-upstream origin test
#展示文件  
ls
#删除文件  
git rm test.txt 
#撤销 *** 作  
git checkout -- test.txt

#添加文件到缓存:
git add test.txt    单个文件
git add .           当前目录全部文件

#提交(包含注释)到本地仓库: 
git commit -m '第一次版本提交' 


#上传文件到远程仓库:
git push origin [本地分支名]:[远端分支名]  
#当然如果本地分支名和远端分支名是一样的,那么就只需要git push origin [分支名称]就可以了。 
git push 

#恢复最近版本文件
git fetch
git reset --hard origin/master   //恢复到远程仓库,删除git add和commit的文件


git pull   #拉取 从远程拉取最新版本到本地,并自动合并 merge
git fetch  #获取 从远程获取最新版本到本地,不会自动合并 merge,需要手动合并
git merge  #合并 使用fetch 可以在merge之前可以看清楚更新情况,再决定是否合并。
git merge --abort  #中止合并

#git 一个分支完全覆盖另一个分支 ,如下:aa覆盖bb
git checkout aa
git reset --hard bb
git push origin bb -f


#不允许推送  You are not allowed to force push code to a protected branch on this project
"Settings" -> "Repository" -> scroll down to "Protected branches".
#git回滚之前的版本
git log   #查询日历记录
git reset --hard "版本id"  #回滚到之前的版本
git push origin HEAD --force   #强制提交

#还原本地文件 git reset -hard 

git reset —soft + 版本号
#回退到某个版本,只回退了commit的信息,不会改变已经修改过的代码。
git reset --soft HEAD^
git reset -hard + 版本号
git reset --hard orgin
#彻底回退到某个版本,本地的代码也会改变上一个版本内容。

#本地仓库回退到上一次提交  
git reset --hard 
git reset --hard HEAD
#回退到当前版本的前一个版本
git reset --hard HEAD^

#回退到当前版本的上上个版本
git reset --hard HEAD^^

#回退到当前版本之前的10个版本
#git reset --hard HEAD~10


#丢弃本地提交,强制回到线上最新版本
git fetch --all
git reset --hard origin/你需要下拉的分支(默认master) 
git fetch

#2、设置配置:
git config --global pack.windowMemory 1024m

git config --global pack.packsizelimit 1g
 
git config --global http.postBuffer 1g

#删除配置:
git config --global --unset pack.deltacachesize


#查看分支      git branch -a
#删除本地分支  git branch -D branch-name
#删除远程分支  git push origin --delete branch-name

#查看当前配置有哪些远程仓库
git remote -v

#彻底删除文件--会删除对应提交记录(包含正常文件的提交历史)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test彻底删除.txt' --prune-empty --tag-name-filter cat -- --all

# 重命名远程分支对应的本地分支
git branch -m oldName newName

#删除远程分支
git push --delete origin oldName

#上传新命名的本地分支
git push origin newName

#把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName


#查看文件状态及日志
git status 命令用于查看项目的当前状态。
git status -s  查看详情
git diff   
git diff --stat
#执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 有两个主要的应用场景。
#尚未缓存的改动:git diff 
#查看已缓存的改动:git diff --cached 
#查看已缓存的与未缓存的所有改动:git diff HEAD 
#显示摘要而非整个 diff:git diff --stat
#退出git diff  : q
#查看全部分支的已经commit但是没有push的:
git log --branches --not --remotes
git cherry -v   只能查看未传送提交的描述/说明
git log master ^origin/master  则可以查看未传送提交的详细信息

#查看全部分支的全部的最近的commit:
git log --branches --not --remotes --simplify-by-decoration --decorate --online

#查看日志
git log
git log --oneline -3    #当前分支的最近三次提交记录

#stash暂存	
git stash 			#备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git stash pop		# 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash list		#显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear		#清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

git stash apply		#恢复暂存之后不删除暂存
git stash pop		#恢复暂存之后删除暂存
git stash drop		#从Git栈删除最旧的一个暂存
#修改注释信息
#git使用amend选项提供了最后一次commit的修改。对于历史提交呢,必须使用rebase。 
git rebase -i HEAD~3 
#表示要修改当前版本的倒数第三次状态。 
pick:******* 
pick:******* 
pick:******* 
#如果你要修改哪个,就把那行的pick改成edit,然后退出。 
#再通过git log你可以发现,git的最后一次提交已经变成你选的那个,再使用: 
git commit --amend 
#然后
git rebase --continue 
git rebase --abort

docker-compose命令

二、Docker-Compose常用命令

1、Docker-Compose命令格式

原文链接:https://blog.csdn.net/weixin_43972854/article/details/106712978

docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
命令选项如下:
-f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
-p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
-verbose输出更多调试信息
-v,–version打印版本并退出
2、docker-compose up
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
选项包括:
-d 在后台运行服务容器
–no-color 不使用颜色来区分不同的服务的控制输出
–no-deps 不启动服务所链接的容器
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
–no-build 不自动构建缺失的服务镜像
–build 在启动容器前构建服务镜像
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
–remove-orphans 删除服务中没有在compose文件中定义的容器
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
docker-compose up
启动所有服务
docker-compose up -d
在后台所有启动服务
-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
3、docker-compose ps
docker-compose ps [options] [SERVICE...]
docker-compose ps
列出项目中目前的所有容器
4、docker-compose stop
docker-compose stop [options] [SERVICE...]
选项包括:
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
docker-compose stop
停止正在运行的容器,可以通过docker-compose start 再次启动
5、docker-compose -h
docker-compose -h
查看帮助
6、docker-compose down
docker-compose down [options]
停止和删除容器、网络、卷、镜像。
选项包括:
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
–remove-orphans,删除服务中没有在compose中定义的容器
docker-compose down
停用移除所有容器以及网络相关
7、docker-compose logs
docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose logs
查看服务容器的输出
8、docker-compose build
docker-compose build [options] [--build-arg key=val...] [SERVICE...]
构建(重新构建)项目中的服务容器。
选项包括:
–compress 通过gzip压缩构建上下环境
–force-rm 删除构建过程中的临时容器
–no-cache 构建镜像过程中不使用缓存
–pull 始终尝试通过拉取 *** 作来获取更新版本的镜像
-m, –memory MEM为构建的容器设置内存大小
–build-arg key=val为服务设置build-time变量
服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务
9、docker-compose pull
docker-compose pull [options] [SERVICE...]
拉取服务依赖的镜像。
选项包括:
–ignore-pull-failures,忽略拉取镜像过程中的错误
–parallel,多个镜像同时拉取
–quiet,拉取镜像过程中不打印进度信息
docker-compose pull
拉取服务依赖的镜像
10、docker-compose restart
docker-compose restart [options] [SERVICE...]
重启项目中的服务。
选项包括:
-t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)
docker-compose restart
重启项目中的服务
11、docker-compose rm
docker-compose rm [options] [SERVICE...]
删除所有(停止状态的)服务容器。
选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
docker-compose rm
删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
12、docker-compose start
docker-compose start [SERVICE...]
docker-compose start
启动已经存在的服务容器。
13、docker-compose run
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服务上执行一个命令。
docker-compose run ubuntu ping www.baidu.com
在指定容器上执行一个ping命令。
14、docker-compose scale
docker-compose scale web=3 db=2
设置指定服务运行的容器个数。通过service=num的参数来设置数量
15、docker-compose pause
docker-compose pause [SERVICE...]
暂停一个服务容器
16、docker-compose kill
docker-compose kill [options] [SERVICE...]
通过发送SIGKILL信号来强制停止服务容器。
支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT
17、dokcer-compose config
docker-compose config [options]
验证并查看compose文件配置。
选项包括:
–resolve-image-digests 将镜像标签标记为摘要
-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
–services 打印服务名,一行一个
–volumes 打印数据卷名,一行一个
18、docker-compose create
docker-compose create [options] [SERVICE...]
为服务创建容器。
选项包括:
–force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
–no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
–no-build:不创建镜像,即使缺失
–build:创建容器前,生成镜像
19、docker-compose exec
docker-compose exec [options] SERVICE COMMAND [ARGS...]
选项包括:
-d 分离模式,后台运行命令。
–privileged 获取特权。
–user USER 指定运行的用户。
-T 禁用分配TTY,默认docker-compose exec分配TTY。
–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
20、docker-compose port
docker-compose port [options] SERVICE PRIVATE_PORT
显示某个容器端口所映射的公共端口。
选项包括:
–protocol=proto,指定端口协议,TCP(默认值)或者UDP
–index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
21、docker-compose push
docker-compose push [options] [SERVICE...]
推送服务依的镜像。
选项包括:
–ignore-push-failures 忽略推送镜像过程中的错误
22、docker-compose stop
docker-compose stop [options] [SERVICE...]
显示各个容器运行的进程情况
23、docker-compose unpause
docker-compose unpause [SERVICE...]
恢复处于暂停状态中的服务。
24、docker-compose version
docker-compose version
docker-compose.yml配置详解

此处全部摘取作者:https://blog.csdn.net/qq_37768368/article/details/120583141

Compose和Docker兼容性:
    Compose 文件格式有3个版本,分别为1, 2.x 和 3.x
    目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本

常用参数:
    version           # 指定 compose 文件的版本
    services          # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称

        build                 # 指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile 文件以及 args 参数值
            context               # context: 指定 Dockerfile 文件所在的路径
            dockerfile            # dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile)
            args                  # args: Dockerfile 在 build 过程中需要的参数 (等同于 docker container build --build-arg 的作用)
            cache_from            # v3.2中新增的参数, 指定缓存的镜像列表 (等同于 docker container build --cache_from 的作用)
            labels                # v3.3中新增的参数, 设置镜像的元数据 (等同于 docker container build --labels 的作用)
            shm_size              # v3.5中新增的参数, 设置容器 /dev/shm 分区的大小 (等同于 docker container build --shm-size 的作用)

        command               # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式

        configs               # 不知道怎么用

        cgroup_parent         # 不知道怎么用

        container_name        # 指定容器的名称 (等同于 docker run --name 的作用)

        credential_spec       # 不知道怎么用

        deploy                # v3 版本以上, 指定与部署和运行服务相关的配置, deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarm
            endpoint_mode         # v3.3 版本中新增的功能, 指定服务暴露的方式
                vip                   # Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址
                dnsrr                 # DNS轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表, 客户端直接访问其中的一个地址
            labels                # 指定服务的标签,这些标签仅在服务上设置
            mode                  # 指定 deploy 的模式
                global                # 每个集群节点都只有一个容器
                replicated            # 用户可以指定集群中容器的数量(默认)
            placement             # 不知道怎么用
            replicas              # deploy 的 mode 为 replicated 时, 指定容器副本的数量
            resources             # 资源限制
                limits                # 设置容器的资源限制
                    cpus: "0.5"           # 设置该容器最多只能使用 50% 的 CPU 
                    memory: 50M           # 设置该容器最多只能使用 50M 的内存空间 
                reservations          # 设置为容器预留的系统资源(随时可用)
                    cpus: "0.2"           # 为该容器保留 20% 的 CPU
                    memory: 20M           # 为该容器保留 20M 的内存空间
            restart_policy        # 定义容器重启策略, 用于代替 restart 参数
                condition             # 定义容器重启策略(接受三个参数)
                    none                  # 不尝试重启
                    on-failure            # 只有当容器内部应用程序出现问题才会重启
                    any                   # 无论如何都会尝试重启(默认)
                delay                 # 尝试重启的间隔时间(默认为 0s)
                max_attempts          # 尝试重启次数(默认一直尝试重启)
                window                # 检查重启是否成功之前的等待时间(即如果容器启动了, 隔多少秒之后去检测容器是否正常, 默认 0s)
            update_config         # 用于配置滚动更新配置
                parallelism           # 一次性更新的容器数量
                delay                 # 更新一组容器之间的间隔时间
                failure_action        # 定义更新失败的策略
                    continue              # 继续更新
                    rollback              # 回滚更新
                    pause                 # 暂停更新(默认)
                monitor               # 每次更新后的持续时间以监视更新是否失败(单位: ns|us|ms|s|m|h) (默认为0)
                max_failure_ratio     # 回滚期间容忍的失败率(默认值为0)
                order                 # v3.4 版本中新增的参数, 回滚期间的 *** 作顺序
                    stop-first            #旧任务在启动新任务之前停止(默认)
                    start-first           #首先启动新任务, 并且正在运行的任务暂时重叠
            rollback_config       # v3.7 版本中新增的参数, 用于定义在 update_config 更新失败的回滚策略
                parallelism           # 一次回滚的容器数, 如果设置为0, 则所有容器同时回滚
                delay                 # 每个组回滚之间的时间间隔(默认为0)
                failure_action        # 定义回滚失败的策略
                    continue              # 继续回滚
                    pause                 # 暂停回滚
                monitor               # 每次回滚任务后的持续时间以监视失败(单位: ns|us|ms|s|m|h) (默认为0)
                max_failure_ratio     # 回滚期间容忍的失败率(默认值0)
                order                 # 回滚期间的 *** 作顺序
                    stop-first            # 旧任务在启动新任务之前停止(默认)
                    start-first           # 首先启动新任务, 并且正在运行的任务暂时重叠

            注意:
                支持 docker-compose up 和 docker-compose run 但不支持 docker stack deploy 的子选项
                security_opt  container_name  devices  tmpfs  stop_signal  links    cgroup_parent
                network_mode  external_links  restart  build  userns_mode  sysctls

        devices               # 指定设备映射列表 (等同于 docker run --device 的作用)

        depends_on            # 定义容器启动顺序 (此选项解决了容器之间的依赖关系, 此选项在 v3 版本中 使用 swarm 部署时将忽略该选项)
            示例:
                docker-compose up 以依赖顺序启动服务,下面例子中 redis 和 db 服务在 web 启动前启动
                默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系

                version: '3'
                services:
                    web:
                        build: .
                        depends_on:
                            - db      
                            - redis  
                    redis:
                        image: redis
                    db:
                        image: postgres                             

        dns                   # 设置 DNS 地址(等同于 docker run --dns 的作用)

        dns_search            # 设置 DNS 搜索域(等同于 docker run --dns-search 的作用)

        tmpfs                 # v2 版本以上, 挂载目录到容器中, 作为容器的临时文件系统(等同于 docker run --tmpfs 的作用, 在使用 swarm 部署时将忽略该选项)

        entrypoint            # 覆盖容器的默认 entrypoint 指令 (等同于 docker run --entrypoint 的作用)

        env_file              # 从指定文件中读取变量设置为容器中的环境变量, 可以是单个值或者一个文件列表, 如果多个文件中的变量重名则后面的变量覆盖前面的变量, environment 的值覆盖 env_file 的值
            文件格式:
                RACK_ENV=development 

        environment           # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)

        expose                # 暴露端口, 但是不能和宿主机建立映射关系, 类似于 Dockerfile 的 EXPOSE 指令

        external_links        # 连接不在 docker-compose.yml 中定义的容器或者不在 compose 管理的容器(docker run 启动的容器, 在 v3 版本中使用 swarm 部署时将忽略该选项)

        extra_hosts           # 添加 host 记录到容器中的 /etc/hosts 中 (等同于 docker run --add-host 的作用)

        healthcheck           # v2.1 以上版本, 定义容器健康状态检查, 类似于 Dockerfile 的 HEALTHCHECK 指令
            test                  # 检查容器检查状态的命令, 该选项必须是一个字符串或者列表, 第一项必须是 NONE, CMD 或 CMD-SHELL, 如果其是一个字符串则相当于 CMD-SHELL 加该字符串
                NONE                  # 禁用容器的健康状态检测
                CMD                   # test: ["CMD", "curl", "-f", "http://localhost"]
                CMD-SHELL             # test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] 或者 test: curl -f https://localhost || exit 1
            interval: 1m30s       # 每次检查之间的间隔时间
            timeout: 10s          # 运行命令的超时时间
            retries: 3            # 重试次数
            start_period: 40s     # v3.4 以上新增的选项, 定义容器启动时间间隔
            disable: true         # true 或 false, 表示是否禁用健康状态检测和 test: NONE 相同

        image                 # 指定 docker 镜像, 可以是远程仓库镜像、本地镜像

        init                  # v3.7 中新增的参数, true 或 false 表示是否在容器中运行一个 init, 它接收信号并传递给进程

        isolation             # 隔离容器技术, 在 Linux 中仅支持 default 值

        labels                # 使用 Docker 标签将元数据添加到容器, 与 Dockerfile 中的 LABELS 类似

        links                 # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)

        logging               # 设置容器日志服务
            driver                # 指定日志记录驱动程序, 默认 json-file (等同于 docker run --log-driver 的作用)
            options               # 指定日志的相关参数 (等同于 docker run --log-opt 的作用)
                max-size              # 设置单个日志文件的大小, 当到达这个值后会进行日志滚动 *** 作
                max-file              # 日志文件保留的数量

        network_mode          # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项)         

        networks              # 将容器加入指定网络 (等同于 docker network connect 的作用), networks 可以位于 compose 文件顶级键和 services 键的二级键
            aliases               # 同一网络上的容器可以使用服务名称或别名连接到其中一个服务的容器
            ipv4_address      # IP V4 格式
            ipv6_address      # IP V6 格式

            示例:
                version: '3.7'
                services: 
                    test: 
                        image: nginx:1.14-alpine
                        container_name: mynginx
                        command: ifconfig
                        networks: 
                            app_net:                                # 调用下面 networks 定义的 app_net 网络
                            ipv4_address: 172.16.238.10
                networks:
                    app_net:
                        driver: bridge
                        ipam:
                            driver: default
                            config:
                                - subnet: 172.16.238.0/24

        pid: 'host'           # 共享宿主机的 进程空间(PID)

        ports                 # 建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式
            SHORT 语法格式示例:
                - "3000"                            # 暴露容器的 3000 端口, 宿主机的端口由 docker 随机映射一个没有被占用的端口
                - "3000-3005"                       # 暴露容器的 3000 到 3005 端口, 宿主机的端口由 docker 随机映射没有被占用的端口
                - "8000:8000"                       # 容器的 8000 端口和宿主机的 8000 端口建立映射关系
                - "9090-9091:8080-8081"
                - "127.0.0.1:8001:8001"             # 指定映射宿主机的指定地址的
                - "127.0.0.1:5000-5010:5000-5010"   
                - "6060:6060/udp"                   # 指定协议

            LONG 语法格式示例:(v3.2 新增的语法格式)
                ports:
                    - target: 80                    # 容器端口
                      published: 8080               # 宿主机端口
                      protocol: tcp                 # 协议类型
                      mode: host                    # host 在每个节点上发布主机端口,  ingress 对于群模式端口进行负载均衡

        secrets               # 不知道怎么用

        security_opt          # 为每个容器覆盖默认的标签 (在使用 swarm 部署时将忽略该选项)

        stop_grace_period     # 指定在发送了 SIGTERM 信号之后, 容器等待多少秒之后退出(默认 10s)

        stop_signal           # 指定停止容器发送的信号 (默认为 SIGTERM 相当于 kill PID; SIGKILL 相当于 kill -9 PID; 在使用 swarm 部署时将忽略该选项)

        sysctls               # 设置容器中的内核参数 (在使用 swarm 部署时将忽略该选项)

        ulimits               # 设置容器的 limit

        userns_mode           # 如果Docker守护程序配置了用户名称空间, 则禁用此服务的用户名称空间 (在使用 swarm 部署时将忽略该选项)

        volumes               # 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级键和 compose 顶级键, 如果需要跨服务间使用则在顶级键定义, 在 services 中引用
            SHORT 语法格式示例:
                volumes:
                    - /var/lib/mysql                # 映射容器内的 /var/lib/mysql 到宿主机的一个随机目录中
                    - /opt/data:/var/lib/mysql      # 映射容器内的 /var/lib/mysql 到宿主机的 /opt/data
                    - ./cache:/tmp/cache            # 映射容器内的 /var/lib/mysql 到宿主机 compose 文件所在的位置
                    - ~/configs:/etc/configs/:ro    # 映射容器宿主机的目录到容器中去, 权限只读
                    - datavolume:/var/lib/mysql     # datavolume 为 volumes 顶级键定义的目录, 在此处直接调用

            LONG 语法格式示例:(v3.2 新增的语法格式)
                version: "3.2"
                services:
                    web:
                        image: nginx:alpine
                        ports:
                            - "80:80"
                        volumes:
                            - type: volume                  # mount 的类型, 必须是 bind、volume 或 tmpfs
                                source: mydata              # 宿主机目录
                                target: /data               # 容器目录
                                volume:                     # 配置额外的选项, 其 key 必须和 type 的值相同
                                    nocopy: true                # volume 额外的选项, 在创建卷时禁用从容器复制数据
                            - type: bind                    # volume 模式只指定容器路径即可, 宿主机路径随机生成; bind 需要指定容器和数据机的映射路径
                                source: ./static
                                target: /opt/app/static
                                read_only: true             # 设置文件系统为只读文件系统
                volumes:
                    mydata:                                 # 定义在 volume, 可在所有服务中调用

        restart               # 定义容器重启策略(在使用 swarm 部署时将忽略该选项, 在 swarm 使用 restart_policy 代替 restart)
            no                    # 禁止自动重启容器(默认)
            always                # 无论如何容器都会重启
            on-failure            # 当出现 on-failure 报错时, 容器重新启动

        其他选项:
            domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir
            上面这些选项都只接受单个值和 docker run 的对应参数类似

        对于值为时间的可接受的值:
            2.5s
            10s
            1m30s
            2h32m
            5h34m56s
            时间单位: us, ms, s, m, h
        对于值为大小的可接受的值:
            2b
            1024kb
            2048k
            300m
            1gb
            单位: b, k, m, g 或者 kb, mb, gb
    networks          # 定义 networks 信息
        driver                # 指定网络模式, 大多数情况下, 它 bridge 于单个主机和 overlay Swarm 上
            bridge                # Docker 默认使用 bridge 连接单个主机上的网络
            overlay               # overlay 驱动程序创建一个跨多个节点命名的网络
            host                  # 共享主机网络名称空间(等同于 docker run --net=host)
            none                  # 等同于 docker run --net=none
        driver_opts           # v3.2以上版本, 传递给驱动程序的参数, 这些参数取决于驱动程序
        attachable            # driver 为 overlay 时使用, 如果设置为 true 则除了服务之外,独立容器也可以附加到该网络; 如果独立容器连接到该网络,则它可以与其他 Docker 守护进程连接到的该网络的服务和独立容器进行通信
        ipam                  # 自定义 IPAM 配置. 这是一个具有多个属性的对象, 每个属性都是可选的
            driver                # IPAM 驱动程序, bridge 或者 default
            config                # 配置项
                subnet                # CIDR格式的子网,表示该网络的网段
        external              # 外部网络, 如果设置为 true 则 docker-compose up 不会尝试创建它, 如果它不存在则引发错误
        name                  # v3.5 以上版本, 为此网络设置名称
文件格式示例:
    version: "3"
    services:
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/868214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存