标签存档:Docker

关于我即将举行的交付敏捷会议的视频

下周我将在敏捷联盟技术会议上发言,亚博国际网页在田纳西州纳什维尔实现敏捷.我的演讲题目是“用Docker开发和测试数据库的敏捷性”。我和田径运动主席理查德·血清素谈了这个话题。

Julie Lerman Deliver:2019年敏捷采访Richard Serateryabo官网敏捷联盟维米欧.

关于docker compose中env文件的一个小教训

最近我和Docker一起工作了很多,学习学习。我已经为我的msdn mag数据点列那将在四月份推出,2019年5月和6月发行。我还有另一篇裕固族博客文章,我将在五月的文章中发表。我在研究其他人。

我研究了Docker环境变量以及将它们输入Docker映像或容器的不同方法。

我的docker compose文件引用了一个名为db_pw的环境变量,但没有指定其值。

dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
环境:
-DPY-PW

Docker将从主机读取环境变量以发现该值。

但这是一种痛苦。我没有在开发机器上永久性地存储db_pw,必须经常记住设置它。EltonStoneman(来自Docker)说我真的应该考虑使用Docker env文件特性。这允许您在环境文件中设置变量,并让Docker编写从中读取的文件。我可以把那个特殊的文件放在我的源代码管理之外。(我总是担心!)

我首先跟踪显示使用名为anything.env文件的文档。我创建了一个名为hush-hush.env的文件,在其中我指定了变量。这是文件的完整内容:

db_pw=大秘密

然后在Docker Compose中,在服务中,env_文件标记允许您指向它。甚至可以删除YML文件中的环境标记。

dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
文件:
- HuSH HuS.Env

这很管用。我的应用程序能够在代码中发现环境变量。

但后来我改进了我的解决方案,为我的数据库使用另一个容器。主容器依赖于新的MSSQL容器。而MSSQL容器要求我将数据库密码作为一个环境变量传递。因为db_pw已经存在,通过替换(通过花括号),我可以很容易地做到这一点。这是新的Docker撰写文件:

版本:“3.4”
服务:
dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
文件:
- HuSH HuS.Env
依赖性:
-DB
分贝:
图片:mcr.microsoft.com/mssql/server
卷:
-mssql服务器julie data:/var/opt/mssql/data
环境:
sa_密码:“$db_pw”
接受“Y”
端口:
-“1433∶1433”
卷:
MSSQL服务器Julie数据:

这里有一个操作顺序问题。当我构建Docker撰写文件时,它抱怨DB U PW不可用,我的应用程序出现故障。DB服务未获取my hush-hush.env文件的内容。我尝试了很多事情,例如,将env_文件添加到db服务。最后,这就是我学到的。

替换使用要求在Docker Compose中定义db_pw变量。我把它重新添加到主要服务中,但它并没有从hush-hush.env得到价值。

但是你可以有一个没有名字的.env文件。扩展名*是文件的全名。docker compose将足够早地读取它,并将.env文件中的值提供给声明的db_pw。然后所有的碎片都落在了原位。将mssql容器的db_pw值作为其环境变量进行拆分。我的应用程序代码能够读取docker为自己的任务传递到运行容器中的环境变量。

最后一个docker-compose.yml文件如下:

版本:“3.4”
服务:
dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
环境:
-DPY-PW
依赖性:
-DB
分贝:
图片:mcr.microsoft.com/mssql/server
卷:
-mssql服务器julie data:/var/opt/mssql/data
环境:
sa_密码:“$db_pw”
接受“Y”
端口:
-“1433∶1433”
卷:
MSSQL服务器Julie数据:

它依赖一个名为“.env”的文件定义了变量键值对(与上面的hush-hush.env相同)。

db_pw=大秘密

资源:
https://docs.docker.com/compose/environment-variables网站/

获取用于Linux CTP2.0 Docker映像的SQL Server 2019

如果用于从Microsoft存储库中提取MSSQL服务器映像,例如。,

Docker Pull Microsoft/MSSQL服务器

这对2019年的CTP来说是行不通的。

我可以使用以前的存储库拒绝(又称更新),但这对CTP来说不起作用vnext-ctp2.0-ubuntu.

我终于注意到在Docker Hub页面上新的docker pull命令

上面写着:docker pull mcr.microsoft.com/mssql/server

因此,使用CTP标签拉CTP的命令如下:

docker pull mcr.microsoft.com/mssql/server:vnext-ctp2.0-ubuntu

不管怎样,mssql sqlserver linux docker映像上的sqlservr.sh文件中有什么?

6月3日更新,2017年:团队修改了Docker形象,bash文件不见了。大概是因为它的逻辑被分解到不同的位置。不过,我还是很高兴我为了满足自己的好奇心而抓住了这个!

微软已经为SQL Server创建了4个官方Docker映像:SQL Server for Linux,SQL Server开发人员版本,SQL Server Express和(Windows)SQL Server VNext)。它们可以在Docker Hub上找到(例如https://hub.docker.com/r/microsoft/mssql-server-linux/)在github.com/microsoft/mssql-docker也有一个github存储库。与该映像一起使用的某些文件不在GitHub上。每个映像的dockerfile文件运行某种类型的启动脚本。Windows映像有一个名为start.ps1的PowerShell脚本。你可以在Github回购中看到这些。Linux映像运行一个名为sqlservr.sh的bash文件。但回购协议不包括这一点,我很好奇它做了什么。

注意:我写了一篇关于使用SQL Server for Linux容器的博客文章(mashup:Linux上的SQL Server,Mac上的Docker,带有Visual Studio代码我还写了一篇文章,关于如何使用容器来访问我的7月msdn杂志的数据点专栏。(注意这个地方

还是有点不合时宜,我在……上学会了如何从Docker容器中读取文件,你猜对了……堆栈溢出.遵循这些说明,我创建了一个正在运行的容器的快照

γmysqlserverlinuimageGIT:主人Docker提交JuliesqlLinux MySnapshotsha256:9b552a1e24df7652af0c6c265ae5e2d7cb7832586c431d4b480c30663ab713f0

用bash运行快照:

γmysqlserverlinuimageGIT:主人docker run-t-i我的快照bin/bash[电子邮件受保护]/ /

然后在新的提示下(),使用ls获取列表

[电子邮件受保护]/ /sqlcmdscript.sqlsqlcmdstartup.sh文件箱子靴子DEV入口点安装程序国际清算银行LB64媒体MNT选择进程运行斯宾SRV系统川芎嗪美国陆军var

然后导航到bash文件所在的文件夹并列出其内容:

[电子邮件受保护]:/opt/mssql/bin_ls压缩-转储.sh生成core.shMSSQL CONF掌上电脑Sql包Sql ServRSql Serv.SH

我到了那里之后,使用cat命令列出sqlservr.sh文件的内容,并查看它的功能。这是秘密酱汁,以防像我一样,你需要知道在封面下面发生了什么!

[电子邮件受保护]:/opt/mssql/bin cat sqlservr.sh哎呀!/BI/BASHγ#Docker的Microsoft(R)SQL Server(R)启动脚本γ接受eula=$接受eula:-sa_password=$sa_password:-#collation=$collation:-sql_latin1_general_cp1_ci_as_将密码设为“”#have_collation=“”sqlservr_setup_prefix=“”配置=“”重新配置=“”#检查系统内存γ让系统_memory=“$(awk'/memtotal/打印$2'/proc/meminfo)/1024”如果[$system_memory-lt 3250];然后echo“错误:此计算机必须至少有3.25 GB内存才能安装Microsoft(R)SQL Server(R)。”退出1FI#创建系统目录γmkdir-P/var/opt/mssql/datamkdir-P/var/opt/mssql/etcmkdir-p/var/opt/mssql/log#检查EULAγ如果[“$accept_eula”!=“Y”]&&[“$接受EULA”!=“Y”;然后echo“错误:在此容器之前必须接受最终用户许可协议”> /DEV/STDERecho”可以启动。最终用户许可协议可在> /DEV/STDERecho“http://go.microsoft.com/fwlink/?林奇=746388。> /DEV/STDER“回声”echo“如果接受协议,请将环境变量accept-eula设置为'y'。> /DEV/STDER退出1FI#配置SQL引擎γ如果!-f/var/opt/mssql/data/master.mdf];然后配置=1如果!-Z“$sa_密码”]||[-f/var/opt/mssql/etc/sa_密码];然后将密码设为1FI如果是!-Z“$校对”]||[-f/var/opt/mssql/etc/collation];然后#将排序规则设为1γ-干扰素if[-z“$有密码”;然后echo“错误:未配置系统管理员密码。您可以设置“> /DEV/STDERecho“通过环境变量(sa_密码)或配置文件输入密码”> /DEV/STDERecho“(/var/opt/mssql/etc/sa_密码)。”> /DEV/STDER退出1FIFI#如果用户想要重新配置,设置重新配置标志γ如果[-f/var/opt/mssql/etc/configure];然后重新配置= 1FI#如果我们需要配置或重新配置,贯穿配置α逻辑γ如果[“$configure”=“1”]||[“$重新配置”=“1”;然后sqlservr_setup_options=“”#if[-f/var/opt/mssql/etc/collation];然后#sqlservr_setup_options+=“-q$(cat/var/opt/mssql/etc/collation)”否则如果是!-Z“$校对”;然后#sqlservr_setup_options+=“-q$collation”γ-干扰素γ-干扰素设置+ECD/var/opt/mssql(CD/var/opt/mssql)echo“正在配置Microsoft(R)SQL Server(R)…”if[-f/var/opt/mssql/etc/sa_password];然后sqlservr_sa_password_file=/var/opt/mssql/etc/sa_password/opt/mssql/bin/sqlservr--设置$sqlservr_setup_options 2>&1>/var/opt/mssql/log/setup-$(日期+%y%m%d-%h%m%s).log艾利夫!-Z“$sa_密码”;然后sqlservr_sa_password_file=<(echo-n“$sa_password”)/opt/mssql/bin/sqlservr--设置$sqlservr_setup_options 2>&1>/var/opt/mssql/log/setup-$(日期+%y%m%d-%h%m%s).log其他的如果!-Z'$sqlservr_设置_选项'];然后/opt/mssql/bin/sqlservr--安装$sqlservr_安装选项2>&1>/var/opt/mssql/log/setup-$(日期+%y%m%d-%h%m%s).logFIFIReCal码=$?如果$RATCODE!=0;然后echo“Microsoft(R)SQL Server(R)安装失败,错误代码$retcode。有关详细信息,请查看安装日志/var/opt/mssql/log。“> /DEV/STDER退出1FI集合Erm-f/var/opt/mssql/etc/重新配置rm-f/var/opt/mssql/etc/sa_密码echo“配置完成”。FI#启动SQL Serverγ执行/opt/mssql/bin/sqlservr$*