目录
Install Docker Desktop on Linux
Install Docker Desktop on Ubuntu
centos环境下安装
yum install -y yum-utils device-mapper=persistent-data lvm2
安装docker数据存储所需的软件,docker安装的工具包
yum-config-manager --add-repo http://mirrors.aliyum.com/docker-ce/linux/centos/docker-ce.repo
为yum安装源选择新的仓库,国外的太慢了,注意ce是开源版本的docker
yum makercache fase
让yum查看哪个安装源速度最快
yum -y install docker-ce
安装开源的docker
service docker start
启动docker
docker version
查看docker版本,能够看到是否安装成功,注意,里面会有docker客户端和服务端的信息,都安装了,默认客户端直连本机的服务端
docker pull hello-world
从国外的镜像仓库,拉取hello-world镜像(如果很慢,可以使用阿里云的加速代理)
docker run hello-world
运行镜像,看是否出现hello-world
进入网站,登录后,搜索,容器镜像服务,点击开通
左侧栏里,镜像中心-镜像加速器,有一个加速器地址,每个用户都不同
找到下面对应的操作系统版本,复制代码,到系统执行即可

这是docker镜像的仓库
进入后搜索tomcat,点击第一个,可以查看各个版本

overview这里可以看到,每个版本,对应的其他配置环境

再下面是如何使用镜像的说明

docker pull tomcat
抽取tomcat最新的版本
docker pull tomcat:8.5.87-jdk8-corretto-al2
或者执行这个,抽取对应的版本
docker images
可以看到本地的镜像,对应的版本和id
docker run tomcat
创建最新版本tomcat的容器,并且启动tomcat,默认是8080端口
crtl+c
退出tomcat,容器会停止
docker run -p 8000:8080 tomcat
启动新的tomcat,并且外部机器的8000映射容器的8080端口
然后外面的chrome浏览器,访问xxx.xxx.xxx.xxx:8000,即可访问,xxx为虚拟机的ip地址
netstat -tulpn
查看虚拟机端口使用情况,可以看到8000,并且对应docker-proxy,代理进行端口的转发
crtl+c
退出,注意:之前的run都是前台运行,不能退出
docker run -p 8000:8080 -d tomcat
-d表示在后台运行tomcat,会返回一个容器编号
docker ps
查看当前运行的容器,可以看到tomcat的容器id,端口映射,最后执行的命令
docker stop xxxxx
xxx为tomcat容器的id,停止tomcat服务
docker rm xxxxx
xxxx为tomcat容器的id,需要容器停止再删除
docker rm -f xxxxx
xxxx为tomcat容器的id,可以不用停止即可删除容器
docker images
查看本机的镜像
docker rmi tomcat:xxxxx
xxx为版本号,删除本机的tomcat镜像,注意需要所有运行的容器都要被删除
docker rmi -f tomcat
强制删除tomcat镜像
docker pull 镜像名<:tags>-从远程仓库抽取镜像
可以有版本号 例如 docker pull tomcat:7 拉取tomcat7
如果不写版本号,默认是最新的版本
docker images - 查看本地镜像
docker run 镜像名<:tags> - 创建容器,启动应用
如果本地没有镜像,会先进行pull到本地
docker ps - 查看正在运行中的镜像
docker rm <-f> 容器id - 删除容器
-f表示强制参数
docker rmi-<-f> 镜像名:<tags> - 删除镜像
-f表示强制参数
132装的物理机,里面的tomcat容器端口8080,不能通过192.168.163.132:8080进行访问,需要进行端口映射,8000和8080进行映射,这样,192.168.163.132:8000即可访问,会转发给容器内部的8080端口。用户只需要知道对外暴露的端口,而且这样以后还可以改变容器内部的端口号,或者从tomcat改成其他服务,只需要对外提供的端口一样即可。


FROM centos #制作基准镜像(基于centos:lastest)
FROM scratch #不依赖任何基准镜像base image
FROM tomcat: 9.0.22-jdk8-openjdk
尽量使用官方提供的Base Image
MAINTAINER mashibing.com
有哪个机构维护
LABEL version = "1.0"
对文件进行描述,没有真实的意义,类似于注释
LABEL description = "无龙"
WORKDIR /usr/local
WORKDIR /usr/local/newdir #会自动创建文件夹
尽量使用绝对路径
两个指令基本一样,可以替换
ADD hello / #复制到根路径
ADD test.tar.gz / #添加根目录并解压
ADD 除了复制,还具备添加远程文件功能
ENV JAVA_HOME /usr/local/openjdk8
类似于装jdk时,要设置java_home环境常量,然后可以使用${xxx}进行替换对应的值
RUN ${JAVA_HOME}/bin/java -jar test.jar
尽量使用环境常量,可提高程序维护性
将容器内部端口暴露给物理机
EXPOSE 8080
docker run -p 8000:8080 tomcat
RUN & CMD & ENTRYPOINT
RUN : 在Build构建时执行命令
在创建镜像时,对镜像内部的文件或者资源执行命令,镜像创建完后,镜像就是只读的
这两个都是容器创建时,对容器执行的命令
ENTRYPOINT : 容器启动时执行的命令
CMD : 容器启动后执行默认的命令或参数
不同的执行时机

RUN yum install -y vim #Shell 命令格式
正常的linux语句
RUN ["yum","install","-y","vim"] #Exec命令格式
具体和上面一样,但是最外面是中括号,里面是双引号和逗号
使用Shell执行时,当前shell是父进程,生成一个子shell进程
在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。

使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变
执行完毕,直接退出,并不会退回之前的进程环境
如果不清楚,推荐使用exec方式
ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["ps"] #推荐使用Exec格式
CMD用于设置默认执行的命令
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略(不一定被执行)
CMD ["ps" , "-ef"] #推荐使用Exec格式
cmd和entrypoint如果单独使用,没有啥区别,只是根据容器启动附加指令,判断是否执行。
但是2者可以组合使用,先输入entrypoint,再输入cmd,cmd可以作为前者的参数。同时,由于cmd可以被外来的指令覆盖,这样就可以修改这个参数,更加灵活


首先需要redis的压缩包和对应的配置文件

然后将2个文件放入docker的image目录下的docker-redis目录里面,然后里面再创建一个dockerfile文件
dockerfile里面,先基于centos,然后安装redis需要的配置软件,一些编译和网络程序
切换到local目录,将压缩包解压到里面
再进入到解压完的源代码目录,对源代码使用gcc进行编译和安装
切换到redis目录,将配置文件复制到里面
暴露7000端口
最后容器启动时,利用redis-server这个可执行文件,根据redis-7000这个配置文件,运行server端

根据dockerfile生成镜像

docker run即可启动容器

我正在学习如何使用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