掘金 后端 ( ) • 2024-04-23 13:24

theme: yu

一.docker的基本使用

官网教程: https://docs.docker.com/desktop/

1.前提

需要 CentOS 7 或 8 的维护版本

**centos-extras**库必须启用

安装

#卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
                  
                  
                  
                  
#安装yum工具                  
sudo yum install -y yum-utils       

#设置稳定存储库 
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
    #查看docker版本列表
    yum list docker-ce --showduplicates|sort -r
     #安装 Docker指定版本
 yum -y install docker-ce-23.0.3-1.el7      
    
  docker version # 查看Docker版本   
systemctl start docker    # 启动 docker 服务:   
systemctl stop docker    # 停止 docker 服务:        
systemctl status docker    # 查看 docker 服务状态     
systemctl restart docker  # 重启 docker 服务  
systemctl  enable docker       #设置开机启动  

删除docker

 #卸载Docker引擎
 sudo yum remove docker-ce docker-ce-cli containerd.io 
 #清除所有数据 删除所有镜像、容器和卷
 sudo rm -rf /var/lib/docker 
 sudo rm -rf /var/lib/containerd 

获取镜像

获取地址:

https://hub.docker.com/

 #搜索镜像(看有哪些版本)
docker search nginx  

 #拉取镜像
docker pull nginx   (版本号)
docker pull mysql          
docker pull openjdk  

#查看镜像的版本
docker image inspect mysql:latest|grep -i version

#查看镜像
docker images    
#界面字段说明
# REPOSITORY:镜像属于的仓库;

# TAG:镜像的标签信息,标记同一个仓库中的不同镜像;

# IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;

# CREATED:镜像创建时间;

# VIRTUAL SIZE:镜像大小


#删除镜像
 docker rmi 仓库名称:标签   
 docker rmi 镜像ID号
#切换阿里云镜像源
 touch /etc/docker/daemon.json    
 vi /etc/docker/daemon.json   


# 添加如下内容,可以自己替换。默认地址是我的创建的
{
  "registry-mirrors": ["https://mr63yffu.mirror.aliyuncs.com"]
}
#刷新系统
 systemctl daemon-reload

安装,升级docker

1.卸载低版本的docekr

 yum list installed | grep docker
 
 
 yum -y remove docker*    y

2.添加国内镜像

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装yum工具

yum install -y yum-utils

4.查看镜像中的docker版本

yum list docker-ce --showduplicates|sort -r

5.安装指定的版本

#安装指定版本
yum -y install docker-ce-18.03.1.ce-1.el7.centos
yum -y install docker-ce-23.0.3-1.el7


#启动
systemctl start docker

#查看

 docker --version
 
 
 #重新启动docker
 
 systemctl restart docker

docker外放端口配置

用于外部连接 1.编辑配置文件

vi /etc/systemd/system/multi-user.target.wants/docker.service

2.修改文件

i 进入编辑模式

-H tcp://0.0.0.0:1212 -H unix://var/run/docker.sock

esc之后保存:wq

3.配置安全组防火墙之后重启docker

重载
systemctl daemon-reload
重启
systemctl restart docker
查看端口是否开启
netstat -ntlp

4.连接

tcp://47.97.66.70:1212  

安装mysql

#拉取镜像
docker pull mysql:8.0.32-oracle
#启动mysql
  sudo docker run -d   --name=mysql  -e MYSQL_ROOT_PASSWORD=root    -p3306:3306  mysql:8.0.32-oracle

安装Redis

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf  -v /opt/myredis/data:/data -d redis:7.0.4 redis-server /etc/redis/redis.conf --appendonly yes --requirepass root

安装rabbitMQ

1.拉取镜像

docker pull rabbitmq

2.启动

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

3.开启管理界面插件

进入rabbitmq内部
docker exec -it 容器id /bin/bash     
启动rabbitmq界面插件
rabbitmq-plugins enable rabbitmq_management



访问
http://localhost-ip:15672

账号密码
guest

guest

退出容器
exit

安装nginx

#拉取官方nginx镜像
docker pull nginx
docker run -di --name nginx -p 80:80 nginx
#创建Nginx容器,并将容器中的/etc/nginx目录和宿主机的/home/local/nginx/conf目录进行挂载

#将容器内的配置文件拷贝到指定目录
# 创建目录
mkdir -p /home/ruoyi/nginx

# 将容器内的配置文件拷贝到指定目录
docker cp nginx:/etc/nginx /home/local/nginx/conf

docker的一些开源镜像资源,可以直接使用

https://prclub.notion.site/Docker-827eaa2cc9a140538fc4ae5f15a74e95

DockerFile的使用

1.常用命令说明

#1.指定基础镜像
FROM 

#2.在容器执行的命令   可以安装一些容器中没有的东西,比如字体,一些curl工具等等
RUN

RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*&&fc-cache&&mkfontscale&&mkfontdir&&fc-list

#3.挂载在宿主机的目录
VOLUME

VOLUME /home/nsjz

#指定工作起始目录
WORKDIR

WORKDIR /home/nsjz

#复制到容器中    add  自动解压   
COPY ./docker/tianzhi/modules/system/jar/tianzhi-modules-system.jar /home/tianzhi/tianzhi-modules-system.jar


#容器启动的时候要干什么 (一般就是启动一些东西)
ENTRYPOINT

ENTRYPOINT ["java","-jar","tianzhi-modules-system.jar"]


#  指定对外的端口 expose
EXPOSE 

EXPOSE  8080


# 维护者   maintainer
MAINTAINER 

MAINTAINER tianzhi

制作自己的镜像容器

mkdir /opt/docker-images/容器名

cd 容器名

创建Dockerfile

vim Dockerfile

3.Dockerfile

前段的编写

node环境

FROM node:16.15.0

RUN git clone https://gitee.com/mirschao/webserver-vue.git
COPY ./ ./app
WORKDIR /app

WORKDIR  webserver-vue

RUN npm install

EXPOSE 8080

CMD ["npm","run","serve"]

编写完成后进行构建

docker build -t tianzhi-web:v1.0 .

查看镜像

docker image ls

运行镜像

docker run -itd —-name tianzhijava -p 8090:8080 tianzhi:v1.0

查看镜像的运行状态

docker ps -a

webserve:名字

v1.0:版本

. 构造 当前目录的Dockerfile

nginx的多阶段构造

FROM node:16.15.0
COPY ./ ./app
WORKDIR /app
RUN npm install && npm run build

FROM nginx:1.21
RUN mkdir /app
COPY --from=0 /app/dist/app
COPY nginx.conf /etc/nginx/nginx.conf

编写完成后进行构建

docker build -t web-project:v1.0 .

docker -itd -name web-project -p 80:80 tianzhi-web:v1.0

后端的编写

Python

FROM python:alpine3.15
COPY ../webserverbacken
WORKDIR webserverbackend
RUN pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -r requirements.txt
EXPOSE 8000
CMD ["python","manager.py","runserver","0.0.0.0:8080"]

编写完成后进行构建

docker build -t tianzhijava:v1.0 .

运行

docker run -itd —name ``tianzhijava``-p 8090:8080 ``tianzhijava``:v1.0

Docker-Compose

Docker-Compose是一个用来定义和运行多个复杂应用的Docker编排工具。比如,多个微服务项目,通常由多个容器应用组成。一个个手动启动?假如有上百个微服务呢,显然不现实,那么就需要使用Docker Compose编排工具来批量启动容器

安装docker-compose

下载docker-compose文件 curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

将文件复制到/usr/local/bin环境变量下面
mv docker-compose /usr/local/bin

给他一个执行权限
chmod +x /usr/local/bin/docker-compose

查看是否安装成功
docker-compose -version

使用docker-compose进行编排

1.创建docker-compose目录

mkdir usr/local/docker-compose
cd usr/local/docker-compose

编写docker-compose.yml文件

version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
 
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
 
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
 
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
 
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]
 
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
 
networks:
  frontend:
  backend:
 
volumes:
  db-data:

启动docker-compose文件,这样我们就可以一下子启动中间件及多个服务
docker-compose -f docker-compose.yaml up -d
-f调用文件。
-d:开启守护进程

docker-compose常用命令
命令 说明 build 重新构建服务 ps 列出容器 up 创建和启动容器 exec 在容器里面执行命令 scale 指定一个服务容器启动数量 top 显示正在运行的容器进程 logs 查看服务容器的输出 down 删除容器、网络、数据卷和镜像 stop/start/restart 停止/启动/重启服务 注意:必须要在含有docker-compose.yml文件的目录中才可以使用

详细的编排语法请自行查阅学习,这里就不一一解释说明了