一、docker compose服务编排
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
1. 要从Dockerfile build image 或者去dockerhub拉取image
2. 要创建多个container
3. 要管理这些container(启动停止删除)
1.1概述
Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。
- 利用 Dockerfile 定义运行环境镜像
- 使用 docker-compose.yml 定义组成应用的各服务
- 运行 docker-compose up 启动应用
1.2Docker Compose 二进制包方式安装
下载
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
查看版本信息
docker-compose -version
1.3卸载Docker Compose
rm /usr/local/bin/docker-compose
1.4使用docker compose编排nginx+hello_world项目
创建docker-compose目录
mkdir /root/docker-compose
cd /root/docker-compose
编写 docker-compose.yml 文件
vim docker-compose.yml
#内容如下:
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- helloWorld
volumes:
- /root/docker-compose/nginx/conf.d:/etc/nginx/conf.d
helloWorld:
image: hello_world:1.0
expose:
- "8080"
创建./nginx/conf.d目录
mkdir -p /root/docker-compose/nginx/conf.d
cd /root/docker-compose/nginx/conf.d
vim nginx.conf#内容如下:
server {
listen 80;
access_log off;location / {
proxy_pass http://helloWorld:8080;
}
}
在~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up
测试访问
curl http:47.15.49.148:80/sayHello
二、私有仓库搭建
- 搭建
拉取
docker pull registry
启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
验证
curl http://127.0.0.1:5000/v2/_catalog
修改daemon.json,用于让docker信任私有仓库地址
vim /etc/docker/daemon.json
新增
"insecure-registries":["私有仓库服务器真实ip:5000"]
重启docker 服务
systemctl restart docker
启动私有有仓库
docker start registry
- 将镜像上传至私有仓库
标记镜像为私有仓库的镜像
docker tag hello_world:1.0 私有仓库服务器IP:5000/hello_world:1.1
上传标记的镜像
docker push 私有仓库服务器IP:5000/hello_world:1.1
- 从私有仓库拉取镜像
拉取镜像
docker pull 私有仓库服务器ip:5000/hello_world:1.1
拉取镜像
docker pull 127.0.0.1:5000/hello_world:1.1
三、重启策略
设置容器的重启策略,以决定在容器退出时Docker守护进程是否重启刚刚退出的容器
--restart=策略参数
参数说明:
no: 默认策略,在容器退出时不重启容器
on-failure: 在容器非正常退出时(退出状态非0),才会重启容器 ,最多重启3次
always: 在容器退出时总是重启容器
unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
注:
–restart选项通常只用于detached模式的容器。
–restart选项不能与–rm选项同时使用。
–restart选项适用于detached模式的容器
–rm选项适用于foreground模式的容器。
在docker ps查看容器时,对于使用了–restart选项的容器,其可能的状态只有Up或Restarting两种状态。
-
设置未运行容器的重启策略(mysql57 )
docker run -d -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=root --restart=always f83a2938370c
-
设置运行容器的重启策略
docker update --restart=always < container >
- 查看容器重启信息
查看容器重启次数
docker inspect -f “{{ .RestartCount }}” ba-208
查看容器最后一次的启动时间
docker inspect -f “{{ .State.StartedAt }}” ba-208
- 重启docker测试重启策略
systemctl stop docker
systemctl restart docker
四、jenkins安装
docker search jenkins
docker pull jenkins/jenkins
docker run -d --name jenkins -p 8091:8080 jenkins/jenkins
查看logs日志并获取初始密码
docker logs jenkins
五、mysql安装
docker search mysql
docker pull mysql
启动命令
docker run -d -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=root --restart=always f83a2938370c
六、dockerfile创建redis镜像
6.1创建目录
mkdir -p /home/hd/docker/dockerfile/redis
6.2创建dockerfile
cd /home/hd/docker/dockerfile/redis
vim reids_dockerfile
reids_dockerfile内容
FROM centos:7.7.1908
ADD redis-5.0.3.tar.gz /homeMAINTAINER redis5.0.3_hd
run yum install -y wget install make gcc libgcc gcc-c++ glibc-devel make \
&& mkdir -p /docker/redis/{install,conf,data,log} \
&& mv /home/redis-5.0.3 /docker/redis/install/ \
&& cd /docker/redis/install/redis-5.0.3 \
&& make \
&& make install PREFIX=/docker/redis/ \
&& rm -rf /docker/redis/install/*.gz \
EXPOSE 6379
CMD ["/bin/bash/bin/redis-server","/docker/redis/conf/redis.conf"]
注:上传 redis-5.0.3.tar.gz 到目录:/home/hd/docker/dockerfile/redis
6.3通过dockerfile构建镜像
cd /home/hd/docker/dockerfile/redis
docker build -f ./redis_dockerfile -t redis_hd:5.0.3 .
6.4创建配置目录和上传配置文件
#1.创建目录
mkdir -p /home/hd/docker/redis/conf
#2.下载配置文件并改名6379.conf
wget http://download.redis.io/redis-stable/redis.conf
#3.将下载的配置文件中的对应配置修改为如下:
appendonly yes
notify-keyspace-events "Egx"logfile '/docker/redis/log/6379.log'
dir /docker/redis/data/6379
#bind 127.0.0.1
requirepass 123456
# 设为no, 因为docker启动时会通过-d参数来让其实现后台运行
daemonize no
6.5启动容器
docker run -d -p 6379:6379 --name "redis_hd" \
-v /home/hd/docker/redis/conf:/docker/redis/conf \
-v /home/hd/docker/redis/data/:/docker/redis/data/ \
-v /home/hd/docker/redis/log:/docker/redis/log \
redis_hd:5.0.3 \
/docker/redis/bin/redis-server /docker/redis/conf/6379.conf
6.6测试验证
查看ip
docker inspect redis_hd|grep IP
远程连接
redis-cli -h 172.17.0.2 -p 6379
进入docker 查看
docker exec -it 7730ec6d961f /bin/bash
6.7将镜像打包为压缩包,供离线环境使用
docker save -o redis_hd-5.0.3.tar redis_hd:5.0.3