一、docker
虚拟化容器技术
1、docker的安装(Ubuntu)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 可能会使用到的命令 ubuntu@admin:/$ lsb_release -a # 查看系统版本 ubuntu@admin:/$ apt update # 更新库 ubuntu@admin:/$ sudo apt upgrade # 更新已安装软件的版本 ubuntu@admin:/$ docker inspect nginx | grep IPAddress # 查看容器IP
# 开始安装docker ubuntu@admin:/$ apt install docker.io # 安装 ubuntu@admin:/$ docker version # 查看安装版本 ubuntu@admin:/$ docker info # 查看docker信息 # 配置镜像地址 ubuntu@admin:/$ cd /etc/dokcer/ ubuntu@admin:/$ vim daemon.json # 添加下面内容 { "registry-mirrors": ["https://mirrors.ustc.edu.cn"] } # 重新载入配置信息并重启docker ubuntu@admin:/$ systemctl daemon-reload && systemctl restart docker
|
2、构建容器与打包镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ubuntu_demo@admin:/etc/docker$ docker run -d -p 8080:80 nginx:1.19
ubuntu@admin:/$ docker build -t myweb:v1 .
ubuntu@admin:/$ docker exec -it 27bce0f6f1be bash
ubuntu@admin:/$ docker commit 27bce0f6f1be myweb:v2
docker images/ps/kill/stop/rm/rmi/exec/stats/history/inspect/logs pause/unpause 关闭/打开容器进程
|
3、高级部分
1 2 3 4 5 6 7
| # 网络管理 - bridge 网桥 默认网络 - host - portMap端口映射 - none 不设置网络
|
4、实例dockerfile
1、mysql-dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci max_connections=100
FROM mysql:8.0.21 EXPOSE 3306 ENV MYSQL_ROOT_PASSWORD=zzxxcc ENV MYSQL_DATABASE=blogdb COPY ./my.cnf /etc/mysql/conf.d/my.cnf VOLUME /mnt/db
|
2、Redis-dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| bind 127.0.0.1 port 6379 requirepass your_password daemonize yes pidfile /var/run/redis_6379.pid logfile /var/log/redis_6379.log
该配置文件将Redis绑定到127.0.0.1地址,并将端口设置为6379。我们还设置了密码为"your_password",并启用了守护进程模式。最后,我们指定了pidfile和logfile的位置。
FROM redis:6.0 COPY redis.conf /usr/local/etc/redis/redis.conf RUN mkdir /data && chown redis:redis /data VOLUME /data EXPOSE 6379 CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
|
3、nginx-dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| server { listen 80; server_name example.com;
location / { proxy_pass http://drf-service:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
server { listen 80; server_name example.com;
location /static/ { alias /app/static/; }
location /media/ { alias /app/media/; }
location / { proxy_pass http://nginx-service:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
|
1 2 3 4 5 6 7
|
FROM nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off;"]
|
4、DRF-dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY . /app/
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y nginx
COPY nginx.conf /etc/nginx/sites-available/default
CMD ["uwsgi", "--http", ":8080", "--ini", "./uwsgi/uwsgi.ini"]
CMD service nginx start
EXPOSE 8080
|
二、DockerCompose
容器编排技术,用于创建管理多容器(单机)
1、安装DockerCompose[官方文档]()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 开始安装 ubuntu@admin:/$ apt install docker-compose # 下载DockerCompose ubuntu@admin:/$ docker-compose --version # 查看版本,如版本不对还需升级
# 版本升级 ubuntu@admin:/$ apt remove docker-compose # 卸载原有Dockercompose # 对与Ubuntu最新系统用户(20+)可用以下命令直接更新 sudo apt-get update # 更新库 sudo apt-get install docker-compose-plugin # 安装dockercompose # ubuntu版本低时需要手动安装,供四条命令,参考官方 ubuntu@admin:/$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} ubuntu@admin:/$ mkdir -p $DOCKER_CONFIG/cli-plugins ubuntu@admin:/$ curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose ubuntu@admin:/$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# 验证安装 docker compose version
|
2、DockerCompose常用命令
3、编排实战
1 2 3 4 5 6 7 8 9 10 11
| 1、将项目拆分成若干个服务,如db/server/web,即数据、后端、前端 2、在每个服务中编写构建dockerfile 3、在编排文件中用yaml语法编写compose参数 NGINX配置文件
# 编写dockerfile文件,并构建对应的镜像文件, '.'表示当前路径下的dockerfile文件 docker build -t mm-supermarket-db:v1 . # 创建网桥 docker network create --driver bridge <bridge_name> # 创建容器,如果需要外部访问,还需要一个参数-p 做端口映射 docker run -d --net <bridge_name> --name mysqldb 21149727eb5f
|
1 2 3 4 5 6 7 8 9 10
| # 需求场景 这是一个Docker Compose文件,用于构建一个名为mm-supermarket的应用程序。该应用程序由三个服务组成:db、server和web。
- db服务使用了名为mm-supermarket-db:v1的镜像,并将容器命名为mm-supermarket-db。它使用了位于./db目录下的Dockerfile来构建容器,并将容器连接到名为mm-supermarket的网络中。
- server服务使用了名为mm-supermarket-server:v1的镜像,并将容器命名为mm-supermarket-server。它使用了位于./server目录下的Dockerfile来构建容器,并将容器连接到名为mm-supermarket的网络中。此外,它还依赖于名为db的服务。
- web服务使用了名为mm-supermarket-web:v1的镜像,并将容器命名为mm-supermarket-web。它使用了位于./web目录下的Dockerfile来构建容器,并将容器连接到名为mm-supermarket的网络中。此外,它还依赖于名为server的服务,并将容器内部的80端口映射到主机的80端口。
# 最后,该文件定义了一个名为mm-supermarket的网络,使用桥接驱动程序。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| version: "3.8" services: db: image: 192.168.1.98:5000/mm-supermarket-db:v1 container_name: mm-supermarket-db build: context: "./db" dockerfile: Dockerfile networks: - mm-supermarket server: image: 192.168.1.98:5000/mm-supermarket-server:v1 container_name: mm-supermarket-server build: context: "./server" dockerfile: Dockerfile depends_on: - db networks: - mm-supermarket web: image: 192.168.1.98:5000/mm-supermarket-web:v1 container_name: mm-supermarket-web build: context: "./web" dockerfile: Dockerfile ports: - "80:80" depends_on: - server networks: - mm-supermarket networks: mm-supermarket: driver: bridge
|
4、总结
dockerfile和dockercompose语法是关键,容器内部网络搭建也很重要。同时dockerCompose创建的容器需要用compose命令去管理。
1、dockerfile语法
2、yaml语法
3、compose容器管理命令
4、容器内部网络
5、NGINX
三、K8S
1、k8s的组件架构
2、核心概念
1 2 3 4
| - Namespace 命名空间。将集群资源隔离 - Pod 最小的可调度单元,是容器的抽象,一个pod可包含一个或多个容器 - Deployment 以Pod定义结构抽象,管理一组Pod - Series 访问容器组的入口
|
3、
- 安装K8s
- 环境搭建
- 镜像仓库的搭建
- K8S的yaml语法参数
- K8s操作命令