赞
踩
本笔记出自b站狂神说
# 1、卸载依赖 yum remove docker-ce docker-ce-cli containerd.io # 2、删除资源 /var/lib/docker docker的默认工作路径! rm -rf /var/lib/docker # 1、卸载旧版的 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 推荐用这个阿里云的 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新yum软件包索引 yum makecache fast # 4、安装docker相关的 docker-ce社区版(推荐) ee 企业版 yum install docker-ce docker-ce-cli containerd.io # 5、启动docker systemctl start docker # 6、查看是否成功 docker version # 7、再确认 docker run hello-world # 8、查看下载的hello-world 镜像 docker images ## 阿里云加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://kgit923r.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
容器单独没有什么意义,有意义—>容器编排!
简介
DockerFile build run手动操作,单个容器!
微服务。100个微服务!依赖关系。
Docker Compose来轻松高效的管理容器!。定义运行多个容器。
定义 运行多个容器
YAML file文件
single command。 命令有哪些?
# 三步骤
定义 dockerfile
定义 docker-compose.yml
启动 docker-compose up
自己理解
Compose是Docker官方的开源项目,需要安装!
Dockerfile
让程序在任何地方运行 。 比如一个web服务。需要redis mysql nginx…多个容器。一个一个run很麻烦
Compose
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker-compose up 100个服务
Compose:重要的概念
1.下载
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2.查看
cd /usr/local/bin
ll
3.授权
chmod +x /usr/local/bin/docker-compose
4.查看版本
docker-compose version
5.出现版本信息即为成功安装
mkdir composetest
cd composetest
vim app.py
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count)
vim requirements.txt
flask
redis
vim Dockerfile
# syntax=docker/dockerfile:1 FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt EXPOSE 5000 COPY . . CMD ["flask", "run"] ------------------------------------- 上面有点小问题用下面的 狂神的 FROM python:3.6-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python","app.py"]
vim docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
docker-compose build
docker-compose up
成功现象
默认的服务名 文件名_服务名__num
多个服务器 集群
如果在同一个网络下就可以通过域名访问
停止
docker-compose down
ctrl+c
docker-compose.yaml
# 3层! version: '' #版本 services: #服务 服务1:web #服务配置 images build network ..... 服务2:redis ..... 服务3:redis # 其他配置 网络/卷、全局配置 volumes: networks: configs:
mkdir my_wordpress
cd my_wordpress
vim docker-compose.yml
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {}
docker-compose up -d 后台启动
访问 ip:8000
1、编写项目微服务
2、dockerfile构建镜像
3、docker-compose.yaml编排项目
4、丢到服务器docker-compose up
idea创建springboot项目 勾选web 和 redis
controller
@RestController
public class HelloController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/hello")
public String hello(){
Long views = redisTemplate.opsForValue().increment("views");
return "hello,tian, thank you,views:"+views;
}
}
application.properties
server.port=8080
spring.redis.host=redis
编写 Dockerfile文件
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
编写docker-compose.yml
version: '3'
services:
tianapp:
build: .
image: tianapp
depends_on:
- redis
ports:
- "8080:8080"
redis:
image: "redis:alpine"
打jar包 上传至服务器
jar包 Dockerfile文件 docker-compose.yml 全部上传至一个目录
启动 docker-compose up
假設项目(有报错)要重新部署打包
docker-compose up --build # 重新构建!
测试访问
curl localhost:8080/hello
现象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5XErpKK-1665363163758)(docker进阶.assets/
)]
小结 :
未来项目只要有docker-compose文件。按照这个规则,启动编排容器。
公司: docker-compose。直接启动。
网上开源项目:docker-compose一键搞定
4台服务器 一主三从 (虚拟机 或者阿里云按量付费)
连接
这样子只要给一台输命令,后面几台都会自动同步输入运行
老步骤,先安装docker
# 初始化节点(第一台)
docker swarm init --advertise-addr 172.24.82.149 # ip addr
# 加入一个节点
docker swarm join-token manager #获取令牌
docker swarm join-token work
第二台
第一台
docker node ls
第一台(让第三台加入 可以把刚刚加入的节点的代码复制给第三台)
以下是另一种方法
docker swarm join-token work
第三台 运行以上图片生成的命令 即可加入
还有第四台,想当成主节点
docker swarm join-token manager #获取令牌
第四台 运行以上图片生成的命令 即可变成manager
# 第一台
docker node ls
双主双从:假设一个节点挂了!其他节点是否可以用!
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少3台!
实验:
1、将docker1机器停止。宕机!双主,另外一个(第四台)也不能使用了
重启之后,docker1不是最主要的leader了,docker4变成主节点
# 第三台
docker swarm leave #离开
# 将第三台也设置为主节点
# 此时第一台停止,这个时候 docker3 docker4都可以用命令
以后告别 docker run
docker-compose up!启动一个项目
集群
## docker run 容器启动 不具有扩缩容功能 ## docker service 服务 具有扩缩容功能 滚动更新 #创建docker service服务 # 跟run 命令挺像的 -p指定端口 名字 镜像名 docker service create -p 8000:80 --name my-nginx nginx #查看服务状态 docker service ps my-nginx # 我们可以在swarm上别的机也去查看service服务,通过命令docker ps 查看 docker service ls #查看启动的副本 # 我们可以通过创建副本来扩容 docker service update --replicas 3 my-nginx
起了3个副本,4台机随机分布,创建服务,我们可以在这4个里面找都有哪些机启动了docker 服务 即使有一台没有看到nginx 但依然能够用他的ip:8000访问nginx
这就是集群!
动态扩缩容
这个4台机我们可以搞3个副本,那能不能4台机搞10个呢?答案是可以的,大不了每台机多跑几个副本。
服务可以有多个副本
docker service update --replicas 1 my-nginx #缩容
#scala 扩缩容
docker service scala my-nginx=5
docker service scala my-nginx=1
# 删除服务
docker service rm my-nginx
只要会搭建集群、会启动服务、动态管理容器就可以了
swarm
集群的管理和编号。docker可以初始化一个swarm集群,其他节点可以加入。(管理、工作者)
Node
就是一个docker节点。多个节点就组成了—个网络集群。(管理、工作者)
service
任务,可以在管理节点或者工作节点来运行。核心。!用户访问!
Task
容器内的命令,细节任务!
docker compose :单机部署项目
docker stack:集群部署项目
docker-compose up -d wordpress.yaml(单机部署)
docker-compose deploy wordpress.yaml(集群部署)
其他呃 csdn自行了解
就是安全有关!配置密码,证书!
配置
学习方式:网上自己看 官网~
扩展到k8s
云原生时代
大趋势!
要掌握k8s !
要会Go语言 ! 必须掌握!
Docker是Go开发
K8s也是Go开发
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。