systemctl show --property=FragmentPath docker
根据获取到的配置文件地址进行配置
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 远程访问服务是否开启 # 查看服务端口监听是否开启 lsof -i:2375 # CURL测试是否生效 curl http://127.0.0.1:2375/info
如果docker是外网访问时, 特别要注意添加TLS加密,否则会被拿来扩矿



package -U -DskipTests

| 命令 | 描述 |
|---|---|
| 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 | 删除配置文件 |
将
| 命令 | 描述 |
|---|---|
| docker image | 列出docker上的镜像 |
| docker images | 查看特定仓库的镜像 |
| docker ps | 查看Docker中主机上的容器 |
| docker ps -a | 查看所有的容器 |
| docker ps -a --format "{{.Names}}" | 查看Docker中启动过的容器名称 |
| docker start | 启动已经停止的容器(启动过) |
| docker rm | 删除特定的容器 |
| docker rmi | 删除镜像 -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 | 查看虚悬镜像 |
| 命令 | 描述 |
|---|---|
| docker logs -f 容器id | 查看项目在容器启动日志 |
| docker exec -it 容器id /bin/sh | 进入容器 |
以发布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

#构建一个名为 model-one 的镜像 docker build -t model-one:1.0 .
注意点:
# 将日志映射到主机 # -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 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.yml文件所在目录下执行。
| 命令 | 描述 |
|---|---|
| docker-compose -h | 查看帮助 |
| docker-compose up | 创建并启动docker-compose服务 |
| docker-compose up -d | 后台运行 |
| docker-compose down | 停止并删除容器、网络、卷、镜像:(类似 docker stop + docker rm) |
| docker-compose exec | 进入容器实例内部 |
| docker-compose ps | 编排过的运行的所有容器 |
| docker-compose top | 编排过的容器进程 |
| docker-compose log | 查看容器输出日志 |
| docker-compose config -q | 检查配置 |
| docker-compose restart | 重启服务 |
| docker-compose start | 启动服务 |
| docker-compose stop | 停止服务 |
# 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:

# 进行语法检查 docker-compose config -q #如果语法检查没有任何问题,进行创建、启动: docker-compose up -d
注意点:
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
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