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环境安装(离线安装)
-
访问docker compose github 官网
-
docker-compose-Linux-x86_64 上传到服务器中,然后执行如下命令将其移动到/usr/local/bin/目录中 并且更名为docker-compose
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
-
执行如下命令:添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose
-
验证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 指令 | 说明 |
---|---|---|
–name | container_name | 容器名称 |
-p | ports | 端口映射 |
-e | environment | 环境变量 |
-v | volumes | 数据卷配置 |
–network | networks | 网络 |
明白了其中的对应关系,相信编写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的集合,是逻辑概念 | |
Commands | up | 创建并启动所有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可访问