Docker安装,Docker-compose使用及常用的工具模板

Docker安装,Docker-compose使用及常用的工具模板

基于Linux环境搭建的,没有环境的先用虚拟机搭建一套Linux环境!!!

安装Docker

本安装教程参考Docker官方文档,地址如下:

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

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装Docker

最后,执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.启动和校验

# 启动
Docker systemctl start docker  
# 停止
Docker systemctl stop docker 
# 重启 
systemctl restart docker  
# 设置开机自启 
systemctl enable docker 
# 执行docker ps命令,如果不报错,说明安装启动成功 
docker ps

5.配置镜像加速

这里以阿里云镜像加速为例。

5.1.注册阿里云账号

首先访问阿里云网站:

https://www.aliyun.com/

注册一个账号。

5.2.开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务

在这里插入图片描述

点击后进入控制台:
在这里插入图片描述

首次可能需要选择立刻开通,然后进入控制台。

5.3.配置镜像加速

找到镜像工具下的镜像加速器
在这里插入图片描述

页面向下滚动,即可找到配置的文档说明:
在这里插入图片描述

具体命令如下:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

Docker-compose

大家是知道的,我们部署一些简单的java项目,其中包含3个容器:

• MySQL

• Nginx

• Java项目

而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。

而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

安装

Compose环境安装(离线安装)

  1. 访问docker compose github 官网
    在这里插入图片描述

  2. docker-compose-Linux-x86_64 上传到服务器中,然后执行如下命令将其移动到/usr/local/bin/目录中 并且更名为docker-compose

    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
    
  3. 执行如下命令:添加可执行的权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  4. 验证docker-compose

docker-compose -v

在这里插入图片描述

基本语法

docker-compose.yml文件的基本语法可以参考官方文档:

https://docs.docker.com/compose/compose-file/compose-file-v3/

docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。

举例来说,用docker run部署MySQL的命令如下:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network hmall
  mysql

如果用docker-compose.yml文件来定义,就是这样:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    networks:
      - new
networks:
  new:
    name: demo

对比如下:
对比如下:

docker run 参数docker compose 指令说明
–namecontainer_name容器名称
-pports端口映射
-eenvironment环境变量
-vvolumes数据卷配置
–networknetworks网络

明白了其中的对应关系,相信编写docker-compose文件应该难不倒大家。

基础命令

编写好docker-compose.yml文件,就可以部署项目了。常见的命令:

https://docs.docker.com/compose/reference/

基本语法如下:

docker compose [OPTIONS] [COMMAND]

其中,OPTIONS和COMMAND都是可选参数,比较常见的有:

类型参数或指令说明
Options-f指定compose文件的路径和名称
-p指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commandsup创建并启动所有service容器
down停止并移除所有容器、网络
ps列出所有启动的容器
logs查看指定容器的日志
stop停止容器
start启动容器
restart重启容器
top查看运行的进程
exec在指定的运行中容器中执行命令

教学演示:

# 1.进入root目录
cd /root

# 2.删除旧容器
docker rm -f $(docker ps -qa)

# 3.删除demo镜像
docker rmi demo

# 4.清空MySQL数据
rm -rf mysql/data

# 5.启动所有, -d 参数是后台启动
docker compose up -d
# 结果:
[+] Building 15.5s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                    0.0s
 => => transferring dockerfile: 358B                                                    0.0s
 => [internal] load .dockerignore                                                       0.0s
 => => transferring context: 2B                                                         0.0s
 => [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s
 => [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s
 => [internal] load build context                                                       0.0s
 => => transferring context: 98B                                                        0.0s
 => CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s
 => CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s
 => exporting to image                                                                  0.0s
 => => exporting layers                                                                 0.0s
 => => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s
 => => naming to docker.io/library/root-hmall                                           0.0s
[+] Running 4/4
 ✔ Network demo Created                                                             0.2s
 ✔ Container mysql  Started                                                             0.5s
 ✔ Container demo  Started                                                             0.9s
 ✔ Container nginx  Started                                                             1.5s

# 6.查看镜像
docker compose images
# 结果
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
demo              root-demo          latest              32eebee16acd        362MB
mysql               mysql               latest              3218b38490ce        516MB
nginx               nginx               latest              605c77e624dd        141MB

# 7.查看容器
docker compose ps
# 结果
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
demo               root-demo          "java -jar /app.jar"     demo               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql               mysql               "docker-entrypoint.s…"   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx               nginx               "/docker-entrypoint.…"   nginx               54 seconds ago      Up 52 seconds       80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp

打开浏览器,访问:http://yourIp:8080

Docker-compose各种常用工具模板

Redis

1.安装redis

安装最新版直接使用指令

docker pull redis

2.启动redis的实例

# 启动容器的时候,并为其设置密码
docker run -d --name myredis -p 6379:6379 redis --requirepass "123456"
docker run --name some-redis -d redis redis-server --save 60 1 --loglevel warning

在容器启动后,再为其配置密码

# 拉取redis镜像
docker pull redis

# 启动容器
docker run -d -p 6366:6379 --name redis-test redis

# 查看运行的redis,并记下它的 CONTAINER ID
docker ps 

# 通过容器id,进入redis
docker exec -it CONTAINER_ID /bin/bash

# 运行redis客户端
redis-cli

# 查看redis的密码
config get requirepass

# 设置redis的密码
config set requirepass yourPassword

# 认证
auth yourPassword

3.连接方式 redis-cli

docker run -it --network some-network --rm redis redis-cli -h some-redis

4.想使用自己的 redis.conf …

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
 docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf

Gogs

Gogs 是⼀款极易搭建的⾃助 Git 服务。

Gogs 的⽬标是打造⼀个最简单、最快速和最轻松的⽅式搭建⾃助 Git 服务。使⽤ Go 语⾔开发使得 Gogs 能够通过独⽴的⼆进制分发,并且⽀持 Go 语⾔⽀持的 所有平台,包括 Linux、Mac OS X、 Windows 以及 ARM 平台

搭建gogs

1、docker-compose.yml⽂件

version: "3.1"
services:
  gogs:
    restart: always
    image: gogs/gogs
    container_name: gogs
    ports:
      - 10022:22
      - 3000:3000
    volumes:
      - ./gogs/data:/data

2、启动容器

docker-compose up -d

Yapi

Yapi 由 YMFE 开源,旨在为开发、产品、测试⼈员提供更优雅的接⼝管理服务, 可以帮助开发者轻松创建、发布、维护 API。

1.权限管理
YApi 成熟的团队管理扁平化项⽬权限配置满⾜各类企业的需求
2.可视化接⼝管理
基于 websocket 的多⼈协作接⼝编辑功能和类 postman 测试⼯具,让多⼈协作成倍提升开发效
率
3.Mock Server
易⽤的 Mock Server,再也不⽤担⼼ mock 数据的⽣成了
4.⾃动化测试
完善的接⼝⾃动化测试,保证数据的正确性
5.数据导⼊
⽀持导⼊ swagger, postman, har 数据格式,⽅便迁移旧项⽬
6.插件机制
强⼤的插件机制,满⾜各类业务需求

搭建yapi

1.docker-compose.yml

version: "3.5"
services:
  yapi-web:  # yapi
    image: jayfong/yapi:latest
    container_name: yapi-web
    ports:
      - 3300:3000   #与gogs 端口相同,所以映射到3300
    environment:
      - YAPI_ADMIN_ACCOUNT=yapi@qq.com  #用户名邮箱
      - YAPI_ADMIN_PASSWORD=yapi        #密码
      - YAPI_CLOSE_REGISTER=true
      - YAPI_DB_SERVERNAME=yapi-mongo  #设置db容器名称
      - YAPI_DB_PORT=27017 # 设置db容器名称对应端口
      - YAPI_DB_DATABASE=yapi
      - YAPI_MAIL_ENABLE=false
      - YAPI_LDAP_LOGIN_ENABLE=false
      - YAPI_PLUGINS=[]
    depends_on:
      - yapi-mongo
    links:
      - yapi-mongo
    restart: unless-stopped

  yapi-mongo: # mongodb
    image: mongo:latest
    container_name: yapi-mongo
    volumes:
      - ./yapi/data/db:/data/db
    expose:
      - 27017
    restart: unless-stopped

networks:
  YapiNet:
    driver: bridge

启动

docker-compose up -d

Jenkins

Jenkins 是⼀个⽤ Java 编写的开源⾃动化⼯具,带有⽤于持续集成的插件。Jenkins ⽤于持续构建和 测试您的软件项⽬,从⽽使开发⼈员更容易将更改集成到项⽬中,并使⽤户更容易获得新的构建。它还 允许您通过与⼤量测试和部署技术集成来持续交付软件。 借助 Jenkins,组织可以通过⾃动化来加速软件开发过程。Jenkins 集成了各种开发⽣命周期过程,包 括构建、⽂档、测试、打包、模拟、部署、静态分析等等。 Jenkins 借助插件实现了持续集成。插件允许集成各种 DevOps 阶段。如果要集成特定⼯具,则需要安 装该⼯具的插件。例如 Git、Maven 2 项⽬、Amazon EC2、HTML 发布者等。
在这里插入图片描述

Jenkins 的优势包括

是⼀个具有社区⼤⼒⽀持的开源⼯具。 易于安装。

拥有 1000 多个插件,可简化您的⼯作。

如果不存在插件,则可通过编码实现并与社区共享。

它是免费的。 它是⽤ Java 构建的,因此可以移植到所有主要平台。

Jenkins 的某些⽅⾯将其与其他持续集成⼯具区分开来。让我们看看这些要点。

Jenkins 的特性:

以下是有关Jenkins的⼀些事实,这些事实使它⽐其他的持续集成⼯具更好:

应⽤:Jenkins 应⽤⾮常⼴泛,在全球范围内有超过 147,000 个活跃安装和超过 100 万⽤户。 Jenkins 的优势包括: Jenkins 的特性:

插件:Jenkins 与1000 多个插件互连,从⽽使其可以与⼤多数开发、测试和部署⼯具集成。 从以上⼏点可以看出,Jenkins 在全球范围内有很⾼的需求。在我们深⼊研究 Jenkins 之前,先了 解什么是持续集成以及它的重要性。

什么是持续集成

持续集成是⼀种开发实践,在这种实践中,要求开发⼈员每天多次或更频繁地对共享存储库中的源代码 提交更改。然后构建存储库中进⾏的每个提交。这使团队可以及早发现问题。除此之外,根据持续集成 ⼯具的不同,还有其他⼀些功能,例如在测试服务器上部署构建应⽤程序,为相关团队提供构建和测试 结果等。

搭建Jenkins

1.docker-compose.yml

version: "3.1"
services:
 jenkins:
 restart: always
 image: jenkins/jenkins
 container_name: jenkins
 ports:
 - "8888:8080"
 - "5000:5000"
 environment:
 TZ: Asia/Shanghai
 volumes:
 - ./jenkins/data:/var/jenkins_home

2.启动

docker-compose up -d

mysql 8.x & redis 6.x & JDK8

搭建环境

1.docker-compose.yml

version: "3.5"
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 3306:3306      
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
      - ./mysql/mysql:/var/lib/mysql
      - ./mysql/initdb:/docker-entrypoint-initdb.d   ##执行数据库脚本
  redis:
        image: redis:6.2
        restart: always
        hostname: redis
        container_name: redis
        privileged: true
        ports:
          - 6379:6379
        environment:
          TZ: Asia/Shanghai
        volumes:
          - ./redis/data:/data
          - ./redis/conf/redis.conf:/etc/redis/redis.conf
          - ./redis/logs:/logs
        command: ["redis-server","/etc/redis/redis.conf"]
  minio:
   image: minio/minio:RELEASE.2021-06-17T00-10-46Z
   container_name: minio
   restart: always
   command: server /data
   ports:
     - 9000:9000
   volumes:
     - ./minio/data:/data
   environment:
     - MINIO_ROOT_USER=minio
     - MINIO_ROOT_PASSWORD=minio_minio

networks:
  default:
    # Use a custom driver
    name: ruoyi_center
    driver: bridge

启动

docker-compose up -d

Nginx

搭建环境

version: "3.5"
services:
  nginx:
        image: nginx:latest
        restart: always
        hostname: nginx
        container_name: nginx
        privileged: true
        ports:
          - 80:80
          - 443:443
        volumes:
          - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf                   # 配置文件
          - ./nginx/cert/:/etc/cert/                    # ssl证书
          - ./nginx/www/:/usr/share/nginx/html/         # 默认显示的index网页
          - ./nginx/logs/:/var/log/nginx/               # 日志文件
networks:
  default:
    # Use a custom driver
    name: admin_center
    driver: bridge

启动

docker-compose up -d

RabbitMQ

运行RabbitMQ并配置

在docker中运行RabbitMQ并完成相关配置

docker run \
 -e RABBITMQ_DEFAULT_USER=zyh \
 -e RABBITMQ_DEFAULT_PASS=123 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3.8-management

在这里插入图片描述
在安装命令中有两个映射的端口:

  • 15672:RabbitMQ提供的管理控制台的端口
  • 5672:RabbitMQ的消息发送处理接口

安装完成后,我们访问 http://[自己的虚拟机ip]:15672即可看到管理控制台。首次访问需要登录,**默认的用户名和密码在配置文件中已经指定了。**使用自己指定的登录即可,如果未指定则账号密码均为guest可访问

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值