Docker
作者:mmseoamin日期:2024-02-05

Docker

    • 一、配置Docker远程API
      • 1.1 查看虚拟机中Docker配置文件位置
      • 1.2 配置远程连接
      • 1.3 测试docker端口连接情况
      • 二、 IDEA 配置Docker
        • 1. 安装 Docker 插件
        • 2. Docker 服务器连接配置
        • 3. 配置DockerFile
        • 三、docker命令
          • 1. docker基础命令
          • 2. 镜像命令
          • 3. 容器命令
          • 四、Dockerfile
            • 1. 编写Dockerfile文件
            • 2. 执行Dockerfile文件
            • 3. 启动容器
            • 五、Docker-compose
              • 1. Docker-compose基础命令
              • 2. 编写docker-compose.yml
              • 3. 执行docker-compose.yml文件
              • 六、其他
                • 1. 配置redis
                • 2. Mysql 主从复制安装

                  一、配置Docker远程API

                  1.1 查看虚拟机中Docker配置文件位置

                  systemctl show --property=FragmentPath docker
                  

                  1.2 配置远程连接

                  根据获取到的配置文件地址进行配置

                  vi /usr/lib/systemd/system/docker.service
                  添加远程Api启动命令
                  -H unix:///var/run/docker``.sock -H tcp://0.0.0.0:2375
                  重启docker服务
                  systemctl daemon-reload
                  systemctl restart docker
                  

                  Docker,image-20240127192846952,第1张

                  1.3 测试docker端口连接情况

                  查看 Docker 远程访问服务是否开启
                  # 查看服务端口监听是否开启
                  lsof -i:2375
                  # CURL测试是否生效
                  curl http://127.0.0.1:2375/info
                  

                  如果docker是外网访问时, 特别要注意添加TLS加密,否则会被拿来扩矿

                  二、 IDEA 配置Docker

                  1. 安装 Docker 插件

                  Docker,image-20240127193652784,第2张

                  2. Docker 服务器连接配置

                  Docker,image-20240127193616445,第3张

                  3. 配置DockerFile

                  Docker,image-20240202112551336,第4张

                  package -U -DskipTests
                  

                  Docker,image-20240127204905443,第5张

                  三、docker命令

                  1. docker基础命令

                  命令描述
                  docker version参看docker版本
                  systemctl start docker启动docker
                  systemctl stop docker停止docker
                  sudo systemctl restart docker重启docker
                  systemctl status docker查看状态
                  systemctl enable docker设置开机自启
                  docker info查看docker概要信息
                  docker --help查看docker总体帮助文档
                  sudo rm -rf /var/lib/docker删除镜像
                  sudo rm -rf /var/lib/containerd删除配置文件

                  2. 镜像命令

                  替换为你想要查看的仓库名称。

                  命令描述
                  docker image列出docker上的镜像
                  docker images 查看特定仓库的镜像
                  docker ps查看Docker中主机上的容器
                  docker ps -a查看所有的容器
                  docker ps -a --format "{{.Names}}"查看Docker中启动过的容器名称
                  docker start 启动已经停止的容器(启动过)
                  docker rm 删除特定的容器
                  docker rmi 或ID删除镜像 -f 表示强制
                  docker rmi -f $(docker images -qa)删除全部镜像
                  docker stop $(docker images -qa)关闭所有镜像
                  docker search 在远程仓库中搜索镜像
                  docker pull xxx下载xxx镜像
                  docker pull mysql:latest下载mysql镜像
                  docker system df查看镜像/容器/数据卷所占的空间
                  docker image prune删除所有虚悬镜像
                  docker image ls -f dangling=true查看虚悬镜像

                  3. 容器命令

                  命令描述
                  docker logs -f 容器id查看项目在容器启动日志
                  docker exec -it 容器id /bin/sh进入容器

                  四、Dockerfile

                  1. 编写Dockerfile文件

                  以发布springBoot项目为例,以openjdk:8-oracle作为基础容器,建议先进行docker pull openjdk:8-oracle 后续就不会从网上下载,使用本地的openjdk:8-oracle,构建springBoot项目镜像比较快

                  FROM openjdk:8-oracle
                  MAINTAINER wang
                  # 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
                  VOLUME /tmp
                  # 将jar包添加到容器中,并命名为 springboot_docker.jar
                  ADD ./target/model-one-1.0.0-SNAPSHOT.jar /model-one-docker.jar
                  # 设置容器时区为当前时区
                  RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
                  RUN echo 'Asia/Shanghai' >/etc/timezone
                  # 运行jar包
                  RUN bash -c 'touch /model-one-docker.jar'
                  ENTRYPOINT ["java", "-jar", "/model-one-docker.jar"]
                  # SpringBoot项目配置的端口号为9001需要将9001暴露出去
                  EXPOSE 9001
                  

                  2. 执行Dockerfile文件

                  Docker,image-20240201203906143,第6张

                  #构建一个名为  model-one  的镜像  
                  docker build -t model-one:1.0 .     
                  

                  注意点:

                  1. 以Dockerfile命名
                  2. 在Dockerfile文件夹下运行 "docker build -t model-one:1.0 . "
                  3. 尽量jar包合文件在同一个文件夹下,docker build -t model-one:1.0 . 后面的**“空格点”**表示当前目录下

                  3. 启动容器

                  #  将日志映射到主机
                  #  -v /mydocker/logs:/logs 主机和容器的日志映射
                  #  --name model-one model-one:1.0   容器名称  镜像名称和版本
                  docker run -d -p 9001:9001  -v /mydocker/logs:/logs --name model-one model-one:1.0 xxxID
                  

                  容器内日志位置

                  Docker,image-20240201205052559,第7张

                  综合命令

                  docker build -f Dockerfile-docker -t model-one:1.0 . && docker run -p 9001:9001 -v /mydocker/logs:/logs --env spring.profiles.active=local --name model-one model-one:1.0 --rm=true
                  

                  五、Docker-compose

                  1. Docker-compose基础命令

                  执行命令时,需要在对应的docker-compose.yml文件所在目录下执行。

                  命令描述
                  docker-compose -h查看帮助
                  docker-compose up创建并启动docker-compose服务
                  docker-compose up -d后台运行
                  docker-compose down停止并删除容器、网络、卷、镜像:(类似 docker stop + docker rm)
                  docker-compose exec /bin/bash进入容器实例内部
                  docker-compose ps编排过的运行的所有容器
                  docker-compose top编排过的容器进程
                  docker-compose log 查看容器输出日志
                  docker-compose config -q检查配置
                  docker-compose restart重启服务
                  docker-compose start启动服务
                  docker-compose stop停止服务

                  2. 编写docker-compose.yml

                  # docker-compose文件版本号
                  version: "3"
                  # 配置各个容器服务
                  services:
                    microService:
                      image: model-one:1.0
                      container_name: model-one01  # 容器名称,如果不指定,会生成一个服务名加上前缀的容器名
                      ports:
                        - "9001:9001"
                      volumes:
                        - /mydocker/logs:/logs
                      networks:
                        - springboot_network
                      depends_on:  # 配置该容器服务所依赖的容器服务
                        - redis
                        - mysql
                    redis:
                      image: redis:6.2.1
                      ports:
                        - "6379:6379"
                      volumes:
                        - /app/redis/redis.conf:/etc/redis/redis.conf
                        - /app/redis/data:/data
                      networks:
                        - springboot_network
                      command: redis-server /etc/redis/redis.conf
                    mysql:
                      image: mysql:8.0.25
                      environment:
                        MYSQL_ROOT_PASSWORD: 'root'
                        MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
                        MYSQL_DATABASE: 'ruoyi'
                  #      MYSQL_USER: 'root'
                  #      MYSQL_PASSWORD: 'root'
                      ports:
                        - "3306:3306"
                      volumes:
                        - /app/mysql/log:/var/log/mysql
                        - /app/mysql/data:/var/lib/mysql
                        - /app/mysql/conf/my.cnf:/etc/my.cnf
                        - /app/mysql/init:/docker-entrypoint-initdb.d
                      networks:
                        - springboot_network
                      command: --default-authentication-plugin=mysql_native_password # 解决外部无法访问
                  networks:
                    # 创建 springboot_network 网桥网络
                    springboot_network:
                  

                  3. 执行docker-compose.yml文件

                  Docker,image-20240201203906143,第6张

                  # 进行语法检查
                  docker-compose config -q
                  #如果语法检查没有任何问题,进行创建、启动:
                  docker-compose up -d  
                  

                  注意点:

                  1. 以docker-compose.yml命名
                  2. 在docker-compose.yml文件夹下运行 "**docker-compose up -d ** "

                  六、其他

                  1. 配置redis

                  docker pull  redis:6.2.1 
                  # 复制配置文件 修改配置文件
                  #第一次启动redis  以后就是  Docker start redis
                  docker run -d -p 6379:6379 --name redis --privileged=true  -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data redis:6.2.1 redis-server /etc/redis/redis.conf 
                  

                  2. Mysql 主从复制安装

                  docker pull mysql:8.0.25
                  

                  启动 Mysql 容器,并配置容器卷映射:

                  docker run -d -p 3306:3306 
                             --privileged=true 
                             -v /app/mysql/log:/var/log/mysql 
                             -v /app/mysql/data:/var/lib/mysql 
                             -v /app/mysql/conf:/etc/mysql/conf.d 
                             -e MYSQL_ROOT_PASSWORD=root 
                             --name mysql 
                             mysql:8.0.25
                  

                  在/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题:

                  [client]
                  default_character_set=utf8
                  [mysqld]
                  collation_server = utf8_general_ci
                  character_set_server = utf8
                  

                  重启mysql容器,使得容器重新加载配置文件:

                  docker restart mysql
                  

                  此时便解决了中文乱码(中文插入报错)问题。

                  而且因为启动时将容器做了容器卷映射,将mysql的配置(映射到/app/mysql/conf)、数据(映射到/app/mysql/data)、日志(映射到/app/mysql/log)都映射到了宿主机实际目录,所以即使删除了容器,也不会产生太大影响。只需要再执行一下启动Mysql容器命令,容器卷还按相同位置进行映射,所有的数据便都可以正常恢复。

                  进入/app/mysql-master/conf,新建my.cnf配置文件:

                  [mysqld]
                  ## 设置server_id, 同一个局域网中需要唯一
                  server_id=101
                  ## 指定不需要同步的数据库名称
                  binlog-ignore-db=mysql
                  ## 开启二进制日志功能
                  log-bin=mall-mysql-bin
                  ## 设置二进制日志使用内存大小(事务)
                  binlog_cache_size=1M
                  ## 设置使用的二进制日志格式(mixed,statement,row)
                  binlog_format=mixed
                  ## 二进制日志过期清理时间。默认值为0,表示不自动清理
                  expire_logs_days=7
                  ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
                  ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
                  slave_skip_errors=1062
                  

                  3 重启容器实例

                  docker restart mysql-master
                  

                  4 进入容器实例内

                  docker exec -it mysql-master /bin/bash
                  _cache_size=1M
                  ## 设置使用的二进制日志格式(mixed,statement,row)
                  binlog_format=mixed
                  ## 二进制日志过期清理时间。默认值为0,表示不自动清理
                  expire_logs_days=7
                  ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
                  ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
                  slave_skip_errors=1062
                  

                  3 重启容器实例

                  docker restart mysql-master
                  

                  4 进入容器实例内

                  docker exec -it mysql-master /bin/bash