DockerCompose安装
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,实现容器编排。
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
格式如下:
version: "3.8"
services:
//运行mysql设置了环境变量,挂载了目录
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
//等于构建镜像后docker run --name web -p 8090:8090 -d build的镜像
web:
build: .
ports:
- "8090:8090"
安装DockerCompose
Linux下需要通过命令下载:
[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
[root@docker ~]# curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose \
> /etc/bash_completion.d/docker-compose
[root@docker ~]# docker-compose -v
docker-compose version 1.29.1, build c34c88b2
[root@docker ~]# docker-compose --help
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [--profile <name>...] [options] [--] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--profile NAME Specify a profile to enable
-c, --context NAME Specify a context name
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--ansi (never|always|auto) Control when to print ANSI control characters
--no-ansi Do not print ANSI control characters (DEPRECATED)
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent (DEPRECATED)
--env-file PATH Specify an alternate environment file
Commands:
build Build or rebuild services
config Validate and view the Compose file
create Create services
down Stop and remove resources
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show version information and quit
搭建私有镜像仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现
简单版
docker run -d --restart=always --name registry -p 5000:5000 \
-v registry-data:/var/lib/registry registry
带有图形化界面版本
使用DockerCompose部署带有图象界面的DockerRegistry
[root@docker ~]# mv registry.yaml compose.yml
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
[root@docker cloud-demo]# vi /etc/docker/daemon.json
"insecure-registries":["http://192.168.1.17:8080"],
[root@docker cloud-demo]# systemctl daemon-reload
[root@docker cloud-demo]# systemctl restart docker
[root@docker ~]# docker-compose up -d
Creating root_registry_1 ... done
Creating root_ui_1 ... done
浏览器访问192.168.1.17:8080/,可以看到仓库信息
推送、拉取镜像
重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/
[root@docker ~]# docker tag nginx:latest 192.168.1.17:8080/nginx:1.0
[root@docker ~]# docker push 192.168.1.17:8080/nginx:1.0
[root@docker ~]# docker pull 192.168.1.17:8080/nginx:1.0
浏览器访问192.168.1.17:8080/ 可以看到镜像信息,大小,历史
部署微服务集群demo
需求:将cloud-demo微服务集群利用DockerCompose部署
[root@docker cloud-demo]# ls
docker-compose.yml gateway mysql order-service user-service
[root@docker cloud-demo]# tree gateway/
gateway/
├── app.jar
└── Dockerfile
order-service/
├── app.jar
└── Dockerfile
user-service/
├── app.jar
└── Dockerfile
[root@docker cloud-demo]# ls mysql/data/
cloud_user cloud_order
[root@docker cloud-demo]# cat /user-service/Dockerfile
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
[root@docker cloud-demo]# cat docker-compose.yml
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
可以看到,其中包含5个service服务:
nacos
:作为注册中心和配置中心image: nacos/nacos-server
: 基于nacos/nacos-server镜像构建environment
:环境变量MODE: standalone
:单点模式启动
ports
:端口映射,这里暴露了8848端口
mysql
:数据库image: mysql:5.7.25
:镜像版本是mysql:5.7.25environment
:环境变量MYSQL_ROOT_PASSWORD: 123
:设置数据库root账户的密码为123
volumes
:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
userservice
、orderservice
、gateway
:都是基于Dockerfile临时构建的
docker-compose up -d