https://docs.docker.com/compose/compose-file/
在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联。compose 应运而生。
compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。
compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑起来。 本质上, compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。
compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。
部署和管理繁多的服务是困难的。而这正是 Docker Compose 要解决的问题。Docker Compose 并不是通过脚本和各种冗长的 docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。应用部署成功后,还可以通过一系列简单的命令实现对其完整声明周期的管理。甚至,配置文件还可以置于版本控制系统中进行存储和管理。
https://github.com/docker/compose
下载最新版本:1.27.4
授权
mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
开发环境可以授予最高权限
chmod 777 /usr/local/bin/docker-compose
检查安装情况以及版本
docker-compose -v
docker-compose --version
docker-compose version
卸载docker-compose
docker-compose卸载只需要删除二进制文件就可以了
rm -rf /usr/local/bin/docker-compose
reboot
Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用JSON。
Docker Compose 默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。
Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes
version: '3'
services:
lagou-mysql:
build:
context: ./mysql
environment:
MYSQL_ROOT_PASSWORD: admin
restart: always
container_name: lagou-mysql
volumes:
- /data/edu-bom/mysql/lagou:/var/lib/mysql
image: lagou/mysql:5.7
ports:
- 3306:3306
networks:
lagou-net:
lagou-eureka:
build:
context: ./edu-eureka-boot
restart: always
ports:
- 8761:8761
container_name: edu-eureka-boot
hostname: edu-eureka-boot
image: lagou/edu-eureka-boot:1.0
depends_on:
- lagou-mysql
networks:
lagou-net:
networks:
lagou-net:
volumes:
lagou-vol:
idea安装docker插件。Dockerfile、docker-compose.yml文件大部分内容会有提示信息。方便开发人员
编写配置文件。
官网地址:
https://plugins.jetbrains.com/plugin/7724-docker/versions
基础镜像
docker pull nginx:1.19.3-alpine
docker pull tomcat:9.0.20-jre8-alpine
试运行镜像
docker run -itd --name nginx -p 80:80 nginx:1.19.3-alpine
docker run -itd --name tomcat -p 8080:8080 tomcat:9.0.20-jre8-alpine
mkdir -p /data/tomcat1 tomcat2
docker cp nginx:/etc/nginx/ /data
docker cp tomcat:/usr/local/tomcat/webapps /data/tomcat1/webapps
docker cp tomcat:/usr/local/tomcat/webapps /data/tomcat2/webapps
echo "tomcat1" > /data/tomcat1/webapps/ROOT/index.jsp
echo "tomcat2" > /data/tomcat2/webapps/ROOT/index.jsp
docker rm -f nginx tomcat
nginx.conf
nginx.conf增加内容
include vhost/*.conf;
反向代理配置
mkdir -p /data/nginx/vhost
cd vhost
vi lagouedu.com.conf
upstream nginxlagouedu{
server 192.168.198.100:8081;
server 192.168.198.100:8082;
}
server{
listen 80;
server_name 192.168.198.100;
autoindex on;
index index.html index.htm index.jsp;
location / {
proxy_pass http://nginxlagouedu;
add_header Access-Control-Allow-Origin *;
}
}
docker-compose
version: '3'
services:
lagou-nginx:
restart: always
container_name: lagou-nginx
volumes:
- /data/nginx:/etc/nginx/
image: nginx:1.19.3-alpine
ports:
- 80:80
lagou-tomcat1:
restart: always
container_name: lagou-tomcat1
volumes:
- /data/tomcat1/webapps:/usr/local/tomcat/webapps
image: tomcat:9.0.20-jre8-alpine
ports:
- 8081:8080
depends_on:
- lagou-nginx
lagou-tomcat2:
restart: always
container_name: lagou-tomcat2
volumes:
- /data/tomcat2/webapps:/usr/local/tomcat/webapps
image: tomcat:9.0.20-jre8-alpine
ports:
- 8082:8080
depends_on:
- lagou-nginx
启动服务
docker-compose up
docker-compose up -d
浏览器测试
http://192.168.198.100:8081/
http://192.168.198.100:8082/
http://192.168.198.100
启动服务
docker-compose up -d
停止服务
docker-compose down
列出所有运行容器
docker-compose ps
查看服务日志
docker-compose logs
构建或者重新构建服务
docker-compose build
启动服务
docker-compose start
停止已运行的服务
docker-compose stop
重启服务
docker-compose restart
官网地址
https://docs.docker.com/compose/reference/build/
在使用maven管理jar包依赖的时候,为了避免每次都从中央仓库拉取依赖包,使用了nexus做了代理仓
库。docker镜像仓库与nexus私服仓库作用类似,用于将打包好的镜像保存在仓库中方便开发、测试、
生产环境镜像拉取存储,减轻环境部署需要的相应操作。
服务器用户名:root,服务器密码:123456 。及时做好系统快照
官网地址
https://hub.docker.com/_/registry
基础镜像
拉取镜像
docker pull registry:2.7.1
备份镜像
docker save registry:2.7.1 -o registry.2.7.1.tar
导入镜像
docker load -i registry.2.7.1.tar
运行容器
docker run -itd -p 5000:5000 --name registry --restart=always registry:2.7.1
添加私服仓库地址
编辑配置文件
vi /etc/docker/daemon.json
增加仓库配置信息
{ "insecure-registries":["192.168.198.101:5000"] }
重启docker
systemctl daemon-reload
systemctl restart docker
查看docker信息确认仓库是否添加
docker info
浏览器测试
http://192.168.198.101:5000/v2/_catalog
上传镜像
docker tag nginx:1.19.3-alpine 192.168.198.101:5000/nginx:v1
docker push 192.168.198.101:5000/nginx:v1
浏览器查看
http://192.168.198.101:5000/v2/nginx/tags/list
harbor官网地址
harbor官网地址:
https://goharbor.io/
github官网地址:
https://github.com/goharbor/harbor
官方帮助文档:
https://github.com/goharbor/harbor/blob/v1.9.4/docs/installation_guide.md
docker-compose
验证docker-compose
docker-compose -v
硬件要求
安装harbor
开发环境大部分采用http方式进行安装;生产环境必须采用https方式安装。docker运维篇中和大家一
起学习https方式安装harbor
1.解压软件
cd /data
tar zxf harbor-offline-installer-v1.9.4.tgz
2.进入安装目录
cd harbor
3.修改配置文件
vi harbor.yml
3.1修改私服镜像地址
hostname: 192.168.198.101
3.2修改镜像地址访问端口号
port: 5000
3.3harbor管理员登录系统密码
harbor_admin_password: Harbor12345
3.4修改harbor映射卷目录
data_volume: /data/harbor
4.安装harbor
4.1执行启动脚本,经过下述3个步骤后,成功安装harbor私服
./install.sh
4.2准备安装环境:检查docker版本和docker-compose版本
4.3加载harbor需要的镜像
4.4准备编译环境
4.5启动harbor。通过docker-compose方式启动服务
4.6google浏览器访问harbor私服
http://192.168.198.101:5000
username: admin
password: Harbor12345
配置私服
vi /etc/docker/daemon.json
"insecure-registries":["192.168.198.101:5000"]
重启docker服务:
systemctl daemon-reload
systemctl restart docker
新建项目
在harbor中新建公共项目:
laogouedu
登录私服
docker login -u admin -p Harbor12345 192.168.198.101:5000
退出私服
docker logout 192.168.198.101:5000
上传nginx镜像
docker tag mariadb:10.5.2 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine
docker push 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine
docker pull 192.168.198.101:5000/lagouedu/mariadb:10.5.2