docker build -t ubuntu:15.10 . -t表示 tag .表示当前文件dockerfile
docker build -t ruoyi/ruoyi-server:4.1.0 .
docker images 查看镜像
docker ps 或者 docker container ls 显示正在运行的容器
docker run ubuntu /bin/echo "Hello world" 注意: /bin/echo "Hello world" 表示执行的命令
docker run -i -t ubuntu:15.10 /bin/bash -t: 在新容器内指定一个伪终端或终端。 -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 启动容器(后台模式)
docker logs 2b1b7a428627 在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker stop 2b1b7a428627
docker start 2b1b7a428627 使用 docker start 启动一个已停止的容器
docker ps -a 查看所有的容器命令
docker run -itd --name ubuntu-test ubuntu /bin/bash docker的服务是在后台运行的,我们可以过 -d 指定容器的运行模式
docker attach 想要进入容器,可以通过以下指令进入,注意: 如果从这个容器退出,会导致容器的停止
docker exec -it 243c32535da7 /bin/bash 如果从这个容器退出,容器不会停止
docker rm -f 1e560fca3906 删除容器
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py -d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
docker inspect test1 可以查看挂载点
docker stop $(docker ps -a -q) 1.停止所有的container,这样才能够删除其中的images:
docker rm $(docker ps -a -q) 如果想要删除所有container的话再加一个指令:
docker rmi $(docker images -q) 删除所有镜像
docker-compose.yml 文件内容
version: '3'
services:
mysql:
image: mysql:8.0.27
container_name: mysql
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: root
# 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: ry-vue
ports:
- "3306:3306"
volumes:
# 数据挂载
- /docker/mysql/data/:/var/lib/mysql/
# 配置挂载
- /docker/mysql/conf/:/etc/mysql/conf.d/
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.36
nginx-web:
image: nginx:1.21.3
container_name: nginx-web
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
volumes:
# 证书映射
- /docker/nginx/cert:/etc/nginx/cert
# 配置文件映射
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# 页面目录
- /docker/nginx/html:/usr/share/nginx/html
# 日志目录
- /docker/nginx/log:/var/log/nginx
privileged: true
restart: always
networks:
- ruoyi_net
redis:
image: redis:6.2.6
container_name: redis
ports:
- "6379:6379"
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/redis/conf:/redis/config:rw
# 数据文件
- /docker/redis/data/:/redis/data/:rw
command: "redis-server /redis/config/redis.conf"
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.48
minio:
image: minio/minio:RELEASE.2021-10-27T16-29-42Z
container_name: minio
ports:
# api 端口
- "9000:9000"
# 控制台端口
- "9001:9001"
environment:
# 时区上海
TZ: Asia/Shanghai
# 管理后台用户名
MINIO_ACCESS_KEY: ruoyi
# 管理后台密码,最小8个字符
MINIO_SECRET_KEY: ruoyi123
# https需要指定域名
MINIO_SERVER_URL: ""
# 开启压缩 on 开启 off 关闭
MINIO_COMPRESS: "off"
# 扩展名 .pdf,.doc 为空 所有类型均压缩
MINIO_COMPRESS_EXTENSIONS: ""
# mime 类型 application/pdf 为空 所有类型均压缩
MINIO_COMPRESS_MIME_TYPES: ""
volumes:
# 映射当前目录下的data目录至容器内/data目录
- /docker/minio/data:/data
# 映射配置目录
- /docker/minio/config:/root/.minio/
command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.54
ruoyi-server1:
image: ruoyi/ruoyi-server:4.1.0
container_name: ruoyi-server1
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/server1/logs/:/ruoyi/server/logs/
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.60
ruoyi-server2:
image: "ruoyi/ruoyi-server:4.1.0"
container_name: ruoyi-server2
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/server2/logs/:/ruoyi/server/logs/
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.61
ruoyi-monitor-admin:
image: ruoyi/ruoyi-monitor-admin:4.1.0
container_name: ruoyi-monitor-admin
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/monitor/logs/:/ruoyi/monitor/logs
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.90
ruoyi-xxl-job-admin:
image: ruoyi/ruoyi-xxl-job-admin:4.1.0
container_name: ruoyi-xxl-job-admin
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/xxljob/logs/:/ruoyi/xxljob/logs
privileged: true
restart: always
networks:
ruoyi_net:
ipv4_address: 172.30.0.92
networks:
ruoyi_net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安装成功后,运行 docker ps 出现如下报错

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running
表示未启动docker,运行下列语句即可
service docker start
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安装完成后,运行
docker-compose -v

赋予权限即可
chmod +x /usr/local/bin/docker-compose

在服务器上单独新建文件夹名为ruoyi-admin

dockerfile文件如下
# 基础镜像
FROM java:8
# author
MAINTAINER kaixin
EXPOSE 8080
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ruoyi-admin.jar /home/ruoyi/ruoyi-admin.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]
执行如下命令
cd /root/dockerbuild/ruoyi-admin/
docker build -t ruoyi/ruoyi-server:4.1.0 .
这就构建出本地的镜像了。

依次再构建出ruoyi/ruoyi-xxl-job-admin和ruoyi/ruoyi-monitor-admin
cd到docker-compose.yml工作目录下,执行一次docker-compose up,此时必定会报错。报错如下

意思是不存在,nginx的配置文件。
为什么要执行一次呢,因为这个时候,docker-compose.yml下挂在的文件,会自动帮你生成,省的你手动去创建了。
根据提示,将提前准备好的nginx.conf还有redis.conf 放到宿主机对应的挂载文件夹底下即可。
这里提示下:如果开启了redis的aof模式,需要在redis的挂在文件下,手动创建appendonly.aof和dump.rdb
并且需要赋予权限
chmod 777 /docker/redis/data/appendonly.aof
chmod 777 /docker/redis/data/dump.rdb
否则会报错:

修改项目中application-dev.yml的配置,将访问的mysql、redis修改成,docker-compose.yml中配置的ip地址,然后重新打包,重新使用docker build构建镜像。
注意:由于上面执行过一次的docker-compose up 这个时候对应的镜像状态处于stop,并未消失,如果重新构建镜像,再执行docker-compose up,仍然使用的是上次构建成功的镜像,所以需要删除此次镜像的进程。
#关闭所有模块
docker-compose stop
#删除所有模块
docker-compose rm
#删除Tag为空的镜像
docker images|grep none|awk '{print $3}'|xargs docker rmi -f
ERROR: Pool overlaps with other one on this address space
networks参数下手动指定了subnet地址,此地址发生了冲突
docker network ls # 查看docker网卡
docker network inspect <网卡id> # 查看具体信息,找到与subnet冲突的是哪个
docker network rm <网卡id> # 删除冲突的网卡
再执行docker-compose up
需要开启ipv4转发功能
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 #添加这段代码
systemctl restart network && systemctl restart docker #重启network服务
sysctl net.ipv4.ip_forward #查看是否修改成功 (备注:返回1,就是成功)
给文件夹赋予权限即可。
chmod 777 /docker/redis/data/


大家还有碰到什么问题,也可以留言。
博主新推出的gitee免费开源项目(商城+APP+小程序+H5),有兴趣的小伙伴可以了解一下。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po