一、服务编排概念
服务编排:按照一定的业务规则批量管理容器。
二、Docker Compose
2.1 安装 Docker Compose
centos7 系统安装
shell
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
ubuntu18.04 系统安装
yaml
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose version
2.2 卸载 Docker Compose
shell
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
2.3 使用docker compose编排nginx+springboot项目
- 创建docker-compose目录
shell
mkdir ~/docker-compose
cd ~/docker-compose
- 编写 docker-compose.yml 文件
shell
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
参数说明:
version
:docker-compose 的版本。services
:表示你要启动的服务。
此处的 nginx 和 app 可以自定义名字。
ports
:端口映射。links
:当前的nginx项目,可以访问到 app 项目。volumes
:数据卷。expose
:暴露的端口。
- 创建./nginx/conf.d目录
shell
mkdir -p ./nginx/conf.d
- 在./nginx/conf.d目录下 编写zzy.conf文件
shell
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
参数说明:
listen 80
:监听 80 端口。access_log off
:关闭日志。proxy_pass [http://app:8080](http://app:8080)
:反向代理的地址- 如果要访问 80 端口,那么 nginx 的反向代理会直接去
[http://app:8080](http://app:8080)
这个地方 - 此处的 app 为上面 docker-compose.yml 文件中的
- 如果要访问 80 端口,那么 nginx 的反向代理会直接去
- 在~/docker-compose 目录下 使用docker-compose 启动容器
shell
docker-compose up
- 测试访问
shell
http://你云服务器ip/hello
若要停止容器:
shell
docker-compose down
三、扩展
以下使用 ubuntu18.04 操作系统
修改 IP 和 DNS
有时候演示代码会采用多虚拟机模拟分布式场景,为了防止 IP 冲突、无法联网等问题,需要预先设置号主机名、IP、DNS配置
修改主机名
- 修改
cloud.cfg
防止重启后主机名还原
shell
vi /etc/cloud/cloud.cfg
# 该配置默认为 false,修改为 true 即可
preserve_hostname: true
- 修改主机名
shell
# 修改主机名
hostnamectl set-hostname deployment # 修改主机名为 deployment
# 配置 hosts
cat >> /etc/hosts << EOF
172.17.88.193 deployment
EOF
其中,172.17.88.193 是通过 ip a
命令来查询的:
修改 IP
编辑 vi /etc/netplan/50-cloud-init.yaml
配置文件,修改内容如下:
yaml
network:
ethernets:
eth0:
addresses: [172.17.88.193/20]
gateway4: 172.17.95.253
nameservers:
addresses: [172.17.95.253]
参数说明:
- ,配置 DNS,配置跟网关一样的 IP 就行了。
- :网关地址
可使用命令
ip route
来查询网关地址:
- :network网络,ethernets网卡,eth0网卡名,addresses网卡的ip地址。
使用 netplan apply
命令让配置生效。
修改 DNS
yaml
# 取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启计算机
vi /etc/systemd/resolved.conf
# 重启
reboot
四、Docker Compose 部署应用程序
部署 Tomcat
在 /usr/local/docker/tomcat 目录下创建 docker-compose.yml
shell
version: '3.1'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
volumes:
- ./webapps:/usr/local/tomcat/webapps
environment:
TZ: Asia/Shanghai
shell
docker-compose up -d
部署 MySQL
shell
version: '3.1'
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
# MySQL 的 web 客户端
adminer:
image: adminer
restart: always
ports:
- 8081:8080
docker-compose up -d 后台启动后,打开网页进入8081端口,可以进入 mysql 的web客户端:(用户名:root,密码:yml文件里设置的默认密码)
其中这里面的命令可以在 web 客户端里的 变量去找:
五、Docker Compose 部署 GitLab
什么是 GitLab
部署 GitLab
使用 Docker 来安装和运行 GitLab 中文版,docker-compose.yml
配置如下:
shell
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh:11.1.4'
restart: unless-stopped
hostname: '192.168.40.138'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.40.138'
gitlab_rails['gitlab_shell_ssh_port']= 2222
unicorn['port'] = 8888
nginx['listen_port'] = 80
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- ./config:/etc/git1ab
- ./data:/var/opt/gitlab
- ./logs:/var/1og/gitlab
六、Docker Compose 部署 Nexus
什么是 Nexus
部署 Nexus
使用 Docker 来安装和运行 Nexus,docker-compose.yml
配置如下:
shell
version: '3.1'
services:
nexus:
restart: unless-stopped
image: sonatype/nexus3
container_name: nexus
ports:
- '8081:8081'
volumes:
- nexus-data:/nexus-data
volumes:
nexus-data:
注意 :启动时如果出现权限问题可以用 chmod 777 /usr/local/docker/nexus/data
赋予数据卷目录可读可写的权限。