一.容器和单机容器编排入门与实战 3.1 阿里云镜像仓库使用及docker-compose详解
主要
1.阿里云镜像仓库使用详解
2.docker-compose 简介、基本命令及示例
docker-compose使用简介、基于docker-compsoe实现Nginx+Java+Mysql服务部署
docker-compose简介
docker-compose项目是Docker官方的开源项目,负责实现对单机容器的快速编排,docker-compose将所管理的容器分为三层,分别是工程(project)、服务(service)以及容器(container)。
project:工程,默认当前目录名。
service:服务,通过服务名称管理容器。
container:容器
容器1-前端服务
容器2-动态服务
容器3-数据库服务
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且重复的操作容易出错,这个时候推荐使用docker 单机编排工具docker-compose,docker- compose 是docker容器的一种单机编排服务、是一个可以
批量管理多个容器的单机编排工具,另外可以解决容器之间的依赖关系,比如启动一个nginx前端服务的时候会调用后端的tomcat,那就得先启动tomcat,但是启动tomcat容器还需要依赖数据库,那就还得先启动数库,docker- compose就可以解决这样的嵌套依赖关系,其完全可以替代docker run对容器进行创建、启动和停止。
docker-compose安装:
ubuntu apt:
root@docker-server1:~# apt install docker-compose
centos 7.x yum:
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install docker-compose
pip:
root@docker-server1:~# apt install python3-pip
root@docker-server1:~# pip3 install docker-compose
二进制:
root@docker-server2:~# wget https://github.com/docker/compose/releases/download/1.xy.z/docker-compose-Linux-x86_64
root@docker-server2:~# cp docker-compose-Linux-x86_64 /usr/bin/docker-compose
root@docker-server2:~# chmod a+x /usr/bin/docker-compose
root@docker-server2:~# docker-compose version
docker-compose version 1.29.2, build 5becea4c
# cat docker-compose.yml #示例文件
version: '3.6' #版本号,https://docs.docker.com/compose/compose-file/compose-versioning/
services: #定义服务
nginx-server: #当前容器的服务名
image: nginx:1.22.0-alpine #镜像名称
container_name: nginx-web1 #r容器名称
expose: #声明端口映射
- 80
- 443
ports: #定义端口映射
- "80:80" - "443:443"
root@docker-server1:/usr/local/src/compose/test1# docker-compose up -d
root@docker-server1:/usr/local/src/compose/test1# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------
nginx-web1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp,:::443->443/tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp
root@docker-server1:/usr/local/src/compose/test1# docker-compose stop
Stopping nginx-web1 ... done
root@docker-server1:/usr/local/src/compose/test1# docker-compose ps
Name Command State Ports
------------------------------------------------------------
nginx-web1 /docker-entrypoint.sh ngin ... Exit 0
root@docker-server2:~# docker-compose --help
Options:
-f, --file FILE #指定compsoe 文件,默认为docker-compose.yml
-p, --project-name NAME #指定功能名称,默认为当前所在的目录名
--profile NAME #指定一个服务名称,只执行docker-compose.yml中某些profile 匹配名称的容器
# docker-compose --profile frontend up -d
-c, --context NAME #指定Dockerfile的文件路径,也可以是链接到git仓库的url
--verbose #显示更多输出信息
--log-level LEVEL #定义日志级别,DEBUG, INFO, WARNING, ERROR, CRITICAL
--ansi (never|always|auto) #定义什么时候显示ANSI控制字符
--no-ansi #不显示ANSI字符,已废弃
-v, --version #显示docker-compose的版本信息
-H, --host HOST #连接到docker主机,默认为本机
--tls #启用tls
--tlscacert #tls ca私钥
--tlscert #tls ca公钥
--tlskey #服务私钥
--tlsverify #服务公钥
--skip-hostname-check #不对证书校验(跳过检查证书签发的主机名)
--env-file PATH #指定文件向容器添加环境变量
docker-compose命令介绍-上:
#命令选项,需要在docker-compose.yml文件目录执行,带#的不常用
#build #构建或重新构建服务、在修改Dockerfile后,可以通过docker-compose build重新构建镜像并重建服务
#bundle #从当前docker compose文件生成一个以当前目录为名称的从Compose文件生成一个分布式应用程序捆绑包(DAB)、已废弃
config -q #验证docker-compose.yml文件,没有错误不输出任何信息
#create #创建服务,但是容器不启动
down #停止并删除资源,默认会删除容器和网络 (只删除docker-compose创建的容器和镜像,和docker命令创建的镜像和容器无关)
#events #从容器接收实时事件,可以指定json日志格式,如
# docker-compose events --json
#exec #基于service进入指定容器执行命令
# docker-compose ps --services
# docker exec -it nginx-web1 sh
help #显示帮助细信息
images #列出本地镜像
kill #强制终止运行中的容器
# docker-compose kill -s SIGKILL nginx-server #SIG是信号名的通用前缀,KILL是指让一个进程立即终止的动作,合并起来SIGKILL就是发送给一个进程使进程立即终止的信号。
logs #基于service查看容器的日志
# docker-compose logs --tail="10" -f nginx-server
#pause #暂停服务
# docker-compose ps --service
# docker-compose pause nginx-server
docker-compose命令介绍-下:
#命令选项,需要在docker-compose.yml文件目录执行,带#的不常用
#port #基于service查看容器的端口绑定信息
# docker-compose port --protocol=tcp nginx-server 80
ps #列出容器信息
pull #拉取镜像
#push #上传镜像
#restart #重启服务
rm #删除已经停止的服务
#run #一次性运行容器,等于docker run --rm
scale #设置指定服务运行的容器个数
# docker-compose scale nginx-server=2 #动态伸缩每个service的副本数,不能指定容器名和端口映射
start #启动服务
# docker-compose start nginx-server
stop #停止服务
# docker-compose stop nginx-server
top #显示容器运行状态
# docker-compose top
unpause #取消暂定状态中的server
# docker-compose unpause nginx-server
up #创建并启动容器,通常配合-d参数在后台运行容器
# docker-compose up -d
version #显示docker-compose版本信息
示例一:
root@docker-server1:/usr/local/src/compose/docker-compose-cases/case1-commands_options# ls
docker-compose.yml test.env
root@docker-server1:/usr/local/src/compose/docker-compose-cases/case1-commands_options# cat docker-compose.yml
version: '3.8'
services:
nginx-server:
image: nginx:1.22.0-alpine
container_name: nginx-web1
expose:
- 80
- 443
ports:
- "80:80"
- "443:443"
#profiles: #基于配置文件指定要操作的目的容器
# - frontend
env_file:
- test.env
deploy:
resources: #资源限制
limits:
cpus: '0.50'
memory: 1024M
reservations:
cpus: '0.5'
memory: 512M
restart: always
healthcheck: #添加服务健康状态检查
test: ["CMD", "curl", "-f", "http://127.0.0.1:80/index.html"]
interval: 5s #健康状态检查的间隔时间,默认为30s
timeout: 5s #单次检查的失败超时时间,默认为30s
retries: 3 #连续失败次数默认3次,当连续失败retries次数后将容器置为unhealthy状态
start_period: 60s #60s后每间隔interval的时间检查一次,连续retries次后才将容器置为unhealthy状态, 但是start_period时间内检查成功就认为是检查成功并装容器置于healthy状态
redis-server:
image: redis:6.2.7-alpine3.16
container_name: redis1
expose:
- 6379
ports:
- "6379:6379"
#profiles:
# - backend
示例二:使用默认网络
root@docker-server1:/usr/local/src/compose/docker-compose-cases/case2-use-default-network# cat docker-compose.yml
version: '3.8'
services:
nginx-server:
image: nginx:1.22.0-alpine
container_name: nginx-web1
network_mode: bridge #网络1,使用docker安装后的默认网桥
expose:
- 80
- 443
ports:
- "80:80"
- "443:443"
networks:
default: #使用docker的默认网络
external: #docker-compose 之外的网络,不需要docker-compsoe创建网络
name: bridge #自定义一个网络名称,用于被容器引用
示例三 :使用自定义网络
version: '3.8'
services:
nginx-server:
image: nginx:1.22.0-alpine
container_name: nginx-web1
# network_mode: bridge #网络1,使用docker安装后的默认网桥
expose:
- 80
- 443
ports:
- "80:80"
- "443:443"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
- front
- backend
links:
- tomcat-server
tomcat-server:
#image: tomcat:7.0.93-alpine
image: registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1
container_name: tomcat-app1
##network_mode: bridge #网络1,使用docker安装后的默认网桥
#expose:
# - 8080
#ports:
# - "8080:8080"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend
links:
- mysql-server
mysql-server:
image: mysql:5.6.48
container_name: mysql-container
# network_mode: bridge #网络1,使用docker安装后的默认网桥
volumes:
- /data/mysql:/var/lib/mysql
#- /etc/mysql/conf/my.cnf:/etc/my.cnf:ro
environment:
- "MYSQL_ROOT_PASSWORD=12345678"
- "TZ=Asia/Shanghai"
expose:
- 3306
ports:
- "3306:3306"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend
networks:
front: #自定义前端服务网络,需要docker-compose创建
driver: bridge
backend: #自定义后端服务的网络,要docker-compose创建
driver: bridge
default: #使用已经存在的docker0默认172.17.0.1/16的网络
external:
name: bridge
本文来自博客园,作者:梳碧湖砍柴少年,转载请注明原文链接:https://www.cnblogs.com/pang-lu/p/16931043.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?