新手入门 - 6. Docker 服务编排

一、服务编排概念

服务编排:按照一定的业务规则批量管理容器。

二、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项目

  1. 创建docker-compose目录
shell 复制代码
mkdir ~/docker-compose
cd ~/docker-compose
  1. 编写 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:暴露的端口。
  1. 创建./nginx/conf.d目录
shell 复制代码
mkdir -p ./nginx/conf.d
  1. 在./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 文件中的
  1. 在~/docker-compose 目录下 使用docker-compose 启动容器
shell 复制代码
docker-compose up
  1. 测试访问
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赋予数据卷目录可读可写的权限。

相关推荐
无序的浪36 分钟前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
溜达的大象5 小时前
极空间部署Traggo时间追踪工具:Docker安装、标签管理与cpolar远程访问
运维·docker·容器
脏脏a5 小时前
极空间部署 Dashlet:Docker 搭建私人导航仪表盘,再配置固定公网访问
运维·docker·容器
User_芊芊君子6 小时前
Prometheus接入Pushgateway实战:二进制与Docker部署、指标推送及远程上报
docker·容器·prometheus
databook6 小时前
手把手带你走一遍:机器学习模型如何用FastAPI和Docker部署
python·docker·fastapi
江湖有缘7 小时前
3款开源日记工具整理合集,可Docker一键部署!
docker·容器·开源
EatFans19 小时前
Docker 实战部署:从本地镜像到云服务器,一篇走通 FastAPI + Celery + MySQL + Redis + Nginx
docker·fastapi
judezh19 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
暗不需求19 小时前
Docker 入门:从「光盘与 DVD」到全栈项目容器化实战
docker·容器·面试
探索云原生19 小时前
一个 Deployment 就能跑 vLLM,为什么还需要 KServe?
docker·ai·云原生·kubernetes·go