docker-compose的安装文档


安装docker-compose

1
2
3
4
5
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 给执行权限
chmod +x /usr/local/bin/docker-compose
# 使用命令查看版本
docker-compose --version

查看编辑配置文件

cd /home/
vi docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '1'
services:
mysql1:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123456
ports:
- 28002:3306
mysql2:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123456
ports:
- 28003:3306

常用命令

1
2
3
4
5
6
docker-compose up -d # 运行起来
docker logs -f mysql1 # 查看有日志说明运行起来了

docker-compose start
docker-compose stop
docker-compose rm # 移除 compose 容器(先 stop 后 rm)

使用示例详细记录

docker 搭建接口管理平台(doclever) 环境
DOClever git地址

cd /home/
mkdir doclever
cd doclever
vi docker-compose.yml # vi 创建并编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: "2"
services:
DOClever:
image: lw96/doclever
restart: always
container_name: "DOClever"
ports:
- 10000:10000
volumes:
- /srv/doclever/file:/root/DOClever/data/file
- /srv/doclever/img:/root/DOClever/data/img
- /srv/doclever/tmp:/root/DOClever/data/tmp
environment:
- DB_HOST=mongodb://mongo:27017/DOClever
- PORT=10000
links:
- mongo:mongo

mongo:
image: mongo:latest
restart: always
container_name: "mongodb"
volumes:
- /srv/doclever/db:/data/db
  • 首次启动docker-compose up -d
  • 如果没权限先执行:chmod +x /usr/local/bin/docker-compose
  • 查看启动的容器:docker ps
  • 查看并过滤启动的容器:docker ps | grep doclever
    1
    2
    3
    4
    5
    6
    firewall-cmd --state # 查看防火墙状态
    firewall-cmd --list-all # 查看放行的端口
    firewall-cmd --add-port=20080/tcp --zone=public --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    # 还需在云服务器上设置防火墙规则
  • 打开 cxvh.com:10000
  • 登录 -> 管理总后台 -> DOClever -> 修改密码

部署doclever

  • docleverdocker hub的地址,下面配置docker-compose.yml
  • 启动后默认账号密码都是DOClever
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # docker-compose.yml
    services:
    DOClever:
    image: lw96/doclever
    restart: always
    container_name: "DOClever"
    ports:
    - 10000:10000
    volumes:
    - /srv/doclever/file:/root/DOClever/data/file
    - /srv/doclever/img:/root/DOClever/data/img
    - /srv/doclever/tmp:/root/DOClever/data/tmp
    environment:
    - DB_HOST=mongodb://mongo:27017/DOClever
    - PORT=10000
    links:
    - mongo:mongo

    mongo:
    image: mongo:latest
    restart: always
    container_name: "mongodb"
    # 在 win 上面非常诡异的问题是,先把下面两行注释掉运行起来,再暂停去掉注释重启启动就好了
    volumes:
    - /srv/doclever/db:/data/db

部署gitlab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
version: '2.3'
services:
redis:
restart: always
image: redis:5.0.9
command:
- --loglevel warning
volumes:
# 设置路径
- redis-data:/var/lib/redis:Z

postgresql:
restart: always
image: sameersbn/postgresql:11-20200524
volumes:
# 设置路径
- postgresql-data:/var/lib/postgresql:Z
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm,btree_gist

gitlab:
restart: always
image: sameersbn/gitlab:13.5.3
depends_on:
- redis
- postgresql
ports:
# 端口映射 和下面 gitlab 对应上
- "10080:80"
- "10022:22"
volumes:
# 设置路径
- gitlab-data:/home/git/data:Z
healthcheck:
test: ["CMD", "/usr/local/sbin/healthcheck"]
interval: 5m
timeout: 10s
retries: 3
start_period: 5m
environment:
- DEBUG=false

- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production

- REDIS_HOST=redis
- REDIS_PORT=6379

- TZ=Asia/Kolkata
- GITLAB_TIMEZONE=Kolkata

# 改成 true 就是自签名的方式
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false

# gitlab 改成云服务器的域名,需要配置域名解析
- GITLAB_HOST=localhost
# 端口
- GITLAB_PORT=10080
# ssh 端口
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
# 这三个可以去生成个 uuid
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

# 管理员的密码 必须 8 位
- GITLAB_ROOT_PASSWORD=12345678
# 配置管理员邮箱
- GITLAB_ROOT_EMAIL=info@cxvh.com

- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
- GITLAB_NOTIFY_PUSHER=false

- GITLAB_EMAIL=notifications@example.com
- GITLAB_EMAIL_REPLY_TO=noreply@example.com
- GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com

# 备份周期 daily(每天) 凌晨 1点
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
# 只保留最近七天备份,第八天删除第一天备份,第九天删除第二天备份 604800/7/60/60=24
- GITLAB_BACKUP_EXPIRY=604800

# 邮件服务
- SMTP_ENABLED=false
- SMTP_DOMAIN=www.example.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=mailer@example.com
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login

- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=mailer@example.com
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_STARTTLS=false

- OAUTH_ENABLED=false
- OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
- OAUTH_ALLOW_SSO=
- OAUTH_BLOCK_AUTO_CREATED_USERS=true
- OAUTH_AUTO_LINK_LDAP_USER=false
- OAUTH_AUTO_LINK_SAML_USER=false
- OAUTH_EXTERNAL_PROVIDERS=

- OAUTH_CAS3_LABEL=cas3
- OAUTH_CAS3_SERVER=
- OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
- OAUTH_CAS3_LOGIN_URL=/cas/login
- OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
- OAUTH_CAS3_LOGOUT_URL=/cas/logout

- OAUTH_GOOGLE_API_KEY=
- OAUTH_GOOGLE_APP_SECRET=
- OAUTH_GOOGLE_RESTRICT_DOMAIN=

- OAUTH_FACEBOOK_API_KEY=
- OAUTH_FACEBOOK_APP_SECRET=

- OAUTH_TWITTER_API_KEY=
- OAUTH_TWITTER_APP_SECRET=

- OAUTH_GITHUB_API_KEY=
- OAUTH_GITHUB_APP_SECRET=
- OAUTH_GITHUB_URL=
- OAUTH_GITHUB_VERIFY_SSL=

- OAUTH_GITLAB_API_KEY=
- OAUTH_GITLAB_APP_SECRET=

- OAUTH_BITBUCKET_API_KEY=
- OAUTH_BITBUCKET_APP_SECRET=

- OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
- OAUTH_SAML_IDP_CERT_FINGERPRINT=
- OAUTH_SAML_IDP_SSO_TARGET_URL=
- OAUTH_SAML_ISSUER=
- OAUTH_SAML_LABEL="Our SAML Provider"
- OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
- OAUTH_SAML_GROUPS_ATTRIBUTE=
- OAUTH_SAML_EXTERNAL_GROUPS=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=

- OAUTH_CROWD_SERVER_URL=
- OAUTH_CROWD_APP_NAME=
- OAUTH_CROWD_APP_PASSWORD=

- OAUTH_AUTH0_CLIENT_ID=
- OAUTH_AUTH0_CLIENT_SECRET=
- OAUTH_AUTH0_DOMAIN=
- OAUTH_AUTH0_SCOPE=

- OAUTH_AZURE_API_KEY=
- OAUTH_AZURE_API_SECRET=
- OAUTH_AZURE_TENANT_ID=

volumes:
redis-data:
postgresql-data:
gitlab-data:

  • docker-compose up -d 添加或改完配置文件后是直接运行这个
  • docker ps | grep gitlab_ 筛选下 gitlab
  • docker logs -f gilab_gitlab_1 查看下几个服务有没有正常跑起来
  • 启动常见错误
  • 常见错误
    • 运行后 502 一般 2 个原因导致的
    • 端口是否占用
    • swap是否配置,如未配置可参考下面操作,或者在宝塔控制面板操作
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      # 启动 swap 分区
      创建swap大小为bs*count=4294971392(4G)
      cat /proc/swaps
      free
      dd if=/dev/zero of=/mnt/swap bs=512 count=8388616
      mkswap /mnt/swap
      # vm.swappiness 中的数值是否为 0,为 0 则根据实际需要调整成 60
      sudo vim /etc/sysctl.conf
      swapon /mnt/swap
      echo "/data/swap swap swap defaults 0 0" >> /etc/fstab
      cat /proc/swaps
      free

部署jenkins

jenkins官网安装文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
jenkins:
container_name: "jenkins"
# lts 意思是长期支持版
image: jenkins/jenkins:lts
restart: always
user: jenkins:994
ports:
- "10055:8080"
- "50005:50000"
- "10056:10051"
volumes:
- ./data:/var/jenkins_home
- ./docker:/usr/bin/docker
- ./doocker.sock:/var/run/doocker.sock
  • docker-compose命令
    • docker-compose up -d首次启动
    • docker-compose start启动
    • docker-compose restart重启
    • docker-compose stop停止
    • docker-compose rm移除掉
  • 小技巧
    • 一直启动运行失败?
      • chmod -R 777 data
      • chmod -R 777 ./
    • 浏览器访问一直转圈圈?
      • 改为清华源:vim data/hudson.model.UpdateCenter.xml
      • or vim /var/jenkins_home/hudson.model.UpdateCenter.xml
    • 查看密码
      • cat data/secrets/initialAdminPassword
      • or cat /var/jenkins_home/secrets/initialAdminPassword
    • 安装完成后密码在日志 or
      • git bash cat ./data/secrets/initialAdminPassword
  • 插件(建议配置镜像地址后再安装插件)
    • Update Site 配置加速地址
    • 原始地址:https://updates.jenkins.io/update-center.json
    • 清华加速地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    • 在插件页面的控制台运行,然后点安装
      1
      2
      3
      4
      5
      6
      7
      8
      9
      var arr="Display URL API||Mailer||LDAP||Oracle Java SE Development Kit Installer||Structs||Pipeline: Step API||Credentials||Plain Credentials||SSH Credentials||Credentials Binding||Authentication Tokens API||Docker Commons||SCM API||Script Security||Pipeline: API||Pipeline: Supporting APIs||Token Macro||Build Timeout||Durable Task||Pipeline: Nodes and Processes||Plugin Utilities API||Font Awesome API||Popper.js API||JQuery3 API||Bootstrap 4 API||Snakeyaml API||Jackson 2 API||ECharts API||Checks API||JUnit||Matrix Project||Command Agent Launcher||Resource Disposer||Workspace Cleanup||Command Agent Launcher||Apache HttpComponents Client 4.x API||JSch dependency||Git client||GIT server||Pipeline: Build Step||Pipeline: SCM Step||bouncycastle API||MapDB API||Subversion||External Monitor Job Type||Folders||JavaScript GUI Lib: ACE Editor bundle||Pipeline: Groovy||Branch API||Pipeline: Job||Pipeline: Multibranch||JAXB||Config File Provider||Pipeline NPM Integration||Token Macro||Branch API||SSH Build Agents||Docker API||Docker||Pipeline: Shared Groovy Libraries||Git||Pipeline: GitHub Groovy Libraries||Snakeyaml API||docker-build-step||OkHttp||Gitlab Authentication||Docker Compose Build Step||Display URL API||OWASP Markup Formatter||Ant||Pipeline Utility Steps||JavaScript GUI Lib: ACE Editor bundle||Durable Task||Pipeline: Input Step||Pipeline: Stage Step||Pipeline Graph Analysis||Pipeline: REST API||JavaScript GUI Lib: Handlebars bundle||JavaScript GUI Lib: Moment.js bundle||Pipeline: Stage View||Git||Plain Credentials||Pipeline: Job||Pipeline: API||Pipeline: Stage Step||SSH Credentials||Credentials||Javadoc||Credentials Binding||WMI Windows Agents||Matrix Authorization Strategy||jQuery||PAM Authentication||jQuery UI||Pipeline: SCM Step||Docker Slaves||Matrix Authorization Strategy||Pipeline: Milestone Step||Pipeline: Input Step||WMI Windows Agents||JavaScript GUI Lib: Handlebars bundle||bouncycastle API||JavaScript GUI Lib: jQuery bundles (jQuery and jQuery UI)||Pipeline: Stage Tags Metadata||Infrastructure plugin for Publish Over X||JavaScript GUI Lib: Moment.js bundle||Email Extension||Authentication Tokens API||JUnit||Pipeline: Groovy||Pipeline Graph Analysis||Timestamper||Pipeline: Model API||Pipeline: Declarative Extension Points API||Pipeline: Shared Groovy Libraries||GitHub API||GitHub||GitHub Branch Source||Pipeline: Basic Steps||Docker Pipeline||SCM API||Apache HttpComponents Client 4.x API||Oracle Java SE Development Kit Installer||Pipeline: Model API||Docker API||Pipeline: Declarative Agent API||JSch dependency||Config File Provider||ruby-runtime||Gitlab Hook||Mailer||Structs||GitHub||Pipeline: Nodes and Processes||Extended Read Permission||MapDB API||Pipeline: Basic Steps||Folders||GitLab||Jackson 2 API||Pipeline: Declarative||Git client||SSH Build Agents||Script Security||GitHub API||Pipeline: Step API||Matrix Project||PAM Authentication||Qy Wechat Notification||Localization Support||Trilead API||Localization: Chinese (Simplified)||AnsiColor||Build With Parameters||ThinBackup||Role-based Authorization Strategy".split("||")
      var tab=document.getElementById('plugins')
      for(var i=0;i<arr.length;i++){
      for(var j=1;j<tab.tBodies[0].rows.length;j++){
      if(tab.tBodies[0].rows[j].cells[1]&&tab.tBodies[0].rows[j].cells[1].getElementsByTagName('a')[0].innerText===arr[i]){
      tab.tBodies[0].rows[j].cells[0].getElementsByTagName('input')[0].checked=true
      }
      }
      }

部署mongo

  • 官网
  • mongodockerhub地址
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    version: '3.1'
    services:
    mongo:
    image: mongo
    restart: always
    ports:
    - 27017:27017
    environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: 101123
    # 数据持久化
    volumes:
    - /home/mongotest:/data/db
    # win用户路径如:- E:/learn/mongo/db:/data/db
  • 配置完后运行:docker-compose up -d
  • docker ps # 查看 mongodb 容器名称 —> mongo_mongo_1
  • docker exec -it mongo_mongo_1 mongo 连接到 mongo 数据库交互终端(mongodb 的 shell 工具)
  • show dbs
  • use admin
  • db.auth('root','123') # 出来 1 说明连接成功
  • show dbs
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    use testdb
    # 添加用户角色 dbOwner(角色:数据库的所有者)
    db.createUser({user:'test',pwd:'123456',roles:[{role:'dbOwner',db:'testdb'}]})
    ctr+c
    docker-compose stop
    docker-compose start
    docker ps # 查看启动成功没
    docker exec -it mongo_mongo_1 mongo
    use testdb # 如果出错就重来
    db.auth('test','123456')
    db.users.insertOne({name:'cxvh',age:12,email:'info@cxvh.com'})
    show collections
    db.users.find({})
    db.users.insertOne({name:'test',age:13})
    db.users.find({})
    db.users.updateOne({name:'test',{$set:{email:'test@qq.com'}}}) # 更新数据
    db.users.find({})
    db.users.deleteOne({name:'test'}) # 删除
    db.users.find({})
  • 语法文档
  • 添加用户、角色db.createUser({user:'admin',pwd:'123456',roles:[{role:'dbOwner',db:'doclever'}]})

部署redis

  • 点击dockerhub查看官方文档安装方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # docker-compose.yml
    version: "3"
    services:
    redis-cxvh:
    image: "redis" # redis:5 ---> 5 是版本号 默认最新版本可以去掉:5
    restart: always
    container_name: "redis-cxvh" # 起个名字 方便管理
    ports:
    - 15001:6379
    volumes:
    - E:/learn/大前端/01.阶段一-开启大前端的大门/05.NoSQL数据库的设计与集成/rediscxvh:/data # 数据映射到数组机,持久化 # - /home/rediscxvh:/data
    command: ["redis-server", "--requirepass","123456"] # 设置 redis 默认密码

docker-compose相当于 docker的启动方式-> docker run -itd --restart=always --name redis-cxvh -p 15002:6379 -v /home/rediscxvh:/data:/data redis redis-server --requirepass 123456