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 .
注意点:
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