Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Shipping containers
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Alex Tercete
March 19, 2019
Programming
89
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Shipping containers
How containers will change the way we ship software.
Alex Tercete
March 19, 2019
More Decks by Alex Tercete
See All by Alex Tercete
Making Makefiles
alextercete
0
120
Parallelism and Symmetry
alextercete
0
280
Porting to .NET Standard
alextercete
0
93
Prepping Commits
alextercete
1
170
The end of your line-endings nightmare
alextercete
0
230
I love sushi, therefore I love rebase
alextercete
0
130
ReadyRoll for DotNet developers
alextercete
0
120
Coding Dojo: The Randori Kata
alextercete
1
610
How to be a good pair [programmer]
alextercete
0
170
Other Decks in Programming
See All in Programming
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
580
AmebaブログはKMPから卒業します
kmars0605
0
340
Event is what happens
moro
2
4k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
420
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
300
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
200
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
16
8.9k
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
540
Next.js: The final boss of Web Performance
guaca
0
390
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
380
Statistics for Hackers
jakevdp
799
230k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
370
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
350
Discover your Explorer Soul
emna__ayadi
2
1.3k
Odyssey Design
rkendrick25
PRO
2
930
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
Ruling the World: When Life Gets Gamed
codingconduct
0
440
Paper Plane (Part 1)
katiecoart
PRO
2
12k
Chasing Engaging Ingredients in Design
codingconduct
0
390
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
Transcript
Shipping containers How containers will change the way we ship
software
https://www.pexels.com/photo/business-cargo-cargo-container-city-262353/
• Basic concepts • Containers in the wild • How
could Redgate leverage containers? • What’s next? Table of contents
macOS web app dep1 dep2 8000
macOS linux web app dep1 dep2 8000
macOS linux web app dep1 dep2 8000 8000
macOS linux CLI dep1 dep2 >_ >_
FROM XXX COPY XXXXXX RUN XXXXXXX RUN XXXXXXX 1251debdf2 2346ad27d7
568ba9896f 1b7da6b599 1b7da6b599 Dockerfile image container
FROM XXX COPY XXXXXX RUN XXXXXXX RUN XXXXXXX 1251debdf2 2346ad27d7
568ba9896f 1b7da6b599 1b7da6b599 127a749973 30285e40a4 072756f83c 79b149c433 532e43ed02 1251debdf2 8a05d95840 2346ad27d7 409df063b4 568ba9896f ca548745fe 1b7da6b599 Dockerfile image registry container
• CLIs, services and databases • CI/CD agents • Orchestration
Containers in the wild
None
None
$ docker run --rm mesosphere/aws-cli --version
$ docker run --rm mesosphere/aws-cli --version aws-cli/1.14.5 Python/2.7.13 Linux/4.9.125-li…
$ docker run --rm mesosphere/aws-cli --version aws-cli/1.14.5 Python/2.7.13 Linux/4.9.125-li… image
name makes container ephemeral AWS CLI command-line arguments
$ docker run --rm \ -e "AWS_ACCESS_KEY_ID=$(AWS_ID)" \ -e "AWS_SECRET_ACCESS_KEY=$(AWS_SECRET)"
\ mesosphere/aws-cli \ ecr list-images
$ docker run --rm \ -e "AWS_ACCESS_KEY_ID=$(AWS_ID)" \ -e "AWS_SECRET_ACCESS_KEY=$(AWS_SECRET)"
\ mesosphere/aws-cli \ ecr list-images AWS CLI command-line arguments defines environment variables
None
test_migrations.sh #!/bin/bash docker run \ -e POSTGRES_PASSWORD=mypwd -p 5432:5432 -d
postgres:11 docker run --rm -v $(pwd):/flyway/sql boxfuse/flyway:5 \ -url=jdbc:postgresql://host.docker.internal:5432/postgres \ -user=postgres \ -password=mypwd \ migrate
test_migrations.sh #!/bin/bash docker run \ -e POSTGRES_PASSWORD=mypwd -p 5432:5432 -d
postgres:11 docker run --rm -v $(pwd):/flyway/sql boxfuse/flyway:5 \ -url=jdbc:postgresql://host.docker.internal:5432/postgres \ -user=postgres \ -password=mypwd \ migrate
macOS linux CLI dep1 dep2 linux DB 5432 5432 host.docker.internal
macOS linux CLI dep1 dep2 linux DB 5432 mydb mynet
test_migrations.diff #!/bin/bash +docker network create mynet + -docker run \
+docker run --name mydb --network mynet \ -e POSTGRES_PASSWORD=mypwd -d postgres:11 -docker run --rm -v $(pwd):/flyway/sql boxfuse/flyway:5 \ - -url=jdbc:postgresql://host.docker.internal:5432/postgres \ +docker run --rm --network mynet -v $(pwd):/flyway/sql boxfuse/flyway:5 \ + -url=jdbc:postgresql://mydb:5432/postgres \ -user=postgres \ -password=mypwd \ migrate
None
None
dev.azure.com on-prem cloud Hosted agents
None
dev.azure.com on-prem cloud Containerised hosted agents Containerised local agent
None
None
DLL
None
None
• Containerised SQL Compare CLI • Base images for SQL
Change Automation • Redgate Platform deployment models How could Redgate leverage containers?
None
Windows >_ sqlcompare .NET Framework 4.6.1
> sqlcompare ` /Database1:WidgetStaging ` /Database2:WidgetProduction ` /Synchronize
None
Host 13.6.0 Container >_ sqlcompare .NET Core 2.2 >_
Host Container >_ sqlcompare .NET Core 3.0 >_ 14.0.0
$ docker run --rm \ -e "SERIAL_NUMBER=$(RG_SERIAL_NUMBER)" \ redgate/sql-compare:13.6.0 \
synchronize \ --source WidgetStaging \ --destination WidgetProduction
$ docker run --rm \ -e "SERIAL_NUMBER=$(RG_SERIAL_NUMBER)" \ redgate/sql-compare:13.6.0 \
synchronize \ --source WidgetStaging \ --destination WidgetProduction image name version tag command-line arguments
A word on multi-stage builds
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 COPY ./src /app/src WORKDIR /app/src/MySolution.MyProject RUN dotnet restore
RUN dotnet publish -c Release -o out ENTRYPOINT ["dotnet", "out/MySolution.MyProject.dll"] Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 COPY ./src /app/src WORKDIR /app/src/MySolution.MyProject RUN dotnet restore
RUN dotnet publish -c Release -o out ENTRYPOINT ["dotnet", "out/MySolution.MyProject.dll"] Dockerfile build-specific
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build COPY ./src /app/src WORKDIR /app/src/MySolution.MyProject RUN
dotnet restore RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime WORKDIR /app COPY --from=build /app/src/MySolution.MyProject/out ./ ENTRYPOINT ["dotnet", "MySolution.MyProject.dll"] Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build COPY ./src /app/src WORKDIR /app/src/MySolution.MyProject RUN
dotnet restore RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime WORKDIR /app COPY --from=build /app/src/MySolution.MyProject/out ./ ENTRYPOINT ["dotnet", "MySolution.MyProject.dll"] Dockerfile
FROM XXX COPY XXXXXX RUN XXXXXXX RUN XXXXXXX FROM XXX
COPY --from ENTRYPOINT 53c59901c1 afa0e18698 ade8f7e850 a36426ba37 97c11f30b3 Dockerfile container 39603b1de3 d54c37ce8b 97c11f30b3 image (stage 1) image (stage 0)
$ docker build -t myimage . $ docker run --name
myapp -p 5000:80 myimage
Host Container 5000 MySolution.MyProject ASP.NET Core 2.2 80
None
FROM redgate/sql-change-automation:1.0-sdk AS build COPY ./MyProject.Database /project WORKDIR /project RUN
sca publish ./MyProject.Database.sqlproj --output ./artifacts FROM redgate/sql-change-automation:1.0-mssql AS db COPY --from=build /project/artifacts /sca/artifacts Dockerfile
FROM redgate/sql-change-automation:1.0-sdk AS build COPY ./MyProject.Database /project WORKDIR /project RUN
sca publish ./MyProject.Database.sqlproj --output ./artifacts FROM redgate/sql-change-automation:1.0-mssql AS db COPY --from=build /project/artifacts /sca/artifacts Dockerfile 1.0-oracle 1.0-postgres 1.0-mysql
None
• OS-native server • Redgate-provided cluster • Customer cluster Proposed
deployment models
• OS-native server • Redgate-provided cluster • Customer cluster Proposed
deployment models
None
None
What if users don't have Docker installed?
is the new
What can we do to prepare for the future?
coming soon...
Play with Docker https://training.play-with-docker.com/ Katacoda https://www.katacoda.com/courses/docker Docker Documentation https://docs.docker.com/develop/ Learning
resources
Thanks!