新手入门 - 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赋予数据卷目录可读可写的权限。

相关推荐
想学习java初学者10 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
陈小肚2 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes
A陈雷3 小时前
springboot整合elasticsearch,并使用docker desktop运行elasticsearch镜像容器遇到的问题。
spring boot·elasticsearch·docker
小扳3 小时前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
南猿北者11 小时前
docker Network(网络)
网络·docker·容器
sam-12312 小时前
k8s上部署redis高可用集群
redis·docker·k8s
Fanstay98513 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
death bell14 小时前
Docker基础概念
运维·docker·容器
天幕繁星16 小时前
docker desktop es windows解决vm.max_map_count [65530] is too low 问题
windows·elasticsearch·docker·docker desktop