本笔记出自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开发