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