Docker

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_第1张图片

1.3 测试docker端口连接情况

查看 Docker 远程访问服务是否开启

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

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

二、 IDEA 配置Docker

1. 安装 Docker 插件

Docker_第2张图片

2. Docker 服务器连接配置

Docker_第3张图片

3. 配置DockerFile

Docker_第4张图片

package -U -DskipTests

Docker_第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文件

image-20240201203906143

#构建一个名为  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_第6张图片

综合命令

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文件

image-20240201203906143

# 进行语法检查
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

你可能感兴趣的:(docker,容器)