How to create a great dev environment with Docker

How to create a great local Python development environment with Docker. Learn about Docker Volumes, Docker Compose, how to debug in containers, and more.
Repo: github.com/patrickloeber/pyth...
Timeline:
00:00 - Introduction
02:03 - Why Docker?
04:02 - Dockerize an app
10:25 - Immediate file changes (Docker volumes)
13:08 - Use IDE in Docker container
17:38 - Docker Compose
25:54 - Debug inside Docker container
Get my Free NumPy Handbook:
www.python-engineer.com/numpy...
✅ Write cleaner code with Sourcery, instant refactoring suggestions in VS Code & PyCharm: sourcery.ai/?... *
⭐ Join Our Discord : / discord
📓 ML Notebooks available on Patreon:
/ patrickloeber
If you enjoyed this video, please subscribe to the channel:
▶️ : / @patloeber
~~~~~~~~~~~~~~~ CONNECT ~~~~~~~~~~~~~~~
🖥️ Website: www.python-engineer.com
🐦 Twitter - / patloeber
✉️ Newsletter - www.python-engineer.com/newsl...
📸 Instagram - / patloeber
🦾 Discord: / discord
▶️ Subscribe: / @patloeber
~~~~~~~~~~~~~~ SUPPORT ME ~~~~~~~~~~~~~~
🅿 Patreon - / patrickloeber
#Python #docker
----------------------------------------------------------------------------------------------------------
* This is an affiliate link. By clicking on it you will not have any additional costs, instead you will support me and my project. Thank you so much for the support! 🙏

Пікірлер: 183

  • @yaksvk
    @yaksvk Жыл бұрын

    Thank you Patrick! This was one of the clearest, straight-forward and concise introductions to Docker for people who actually do development and not just devops/admin stuff. Very helpful!

  • @heyydev_1
    @heyydev_12 ай бұрын

    I was just about to comment how great this video is and I saw I commented the same a year ago 😂 Thanks again. Now I'm a senior developer and these things keep been high value.

  • @Javoke
    @Javoke Жыл бұрын

    I wanna thank you for aaaaalll the videos you share with us. Me, as a non-english-native person, I appreciate the rythm and accent in your voice, so we can understand exactly what you are saying. Also,, the explanation is very clear !! Thank you so much!!!

  • @scriptkiddie100
    @scriptkiddie100 Жыл бұрын

    Thank you for this. Very comprehensible and through, ideal for a beginner tutorial.

  • @heyydev_1
    @heyydev_1 Жыл бұрын

    Amazing explanation. Even though my native language is not English, this is the best tutorial I've found and the one that I understood the best. Thanks!

  • @techatival
    @techatival Жыл бұрын

    So far my favourite introduction to Docker. Thank you!

  • @NileGold
    @NileGold Жыл бұрын

    This was so simple, I didn't even realise that the video was 30 min :), thank you for this

  • @brendan8915
    @brendan8915 Жыл бұрын

    This is the video that has finally got me over the line for using Docker. I needed to upskill this for work, my sincerest gratitudes to you. Thank you so much.

  • @dimahodan232
    @dimahodan232 Жыл бұрын

    best on-point video I have seen in the last few months on YT.

  • @mogyiman
    @mogyiman6 ай бұрын

    Awesome content and clear presentation; special thanks for the debugger setup!

  • @sixpooltube
    @sixpooltube9 ай бұрын

    Amazing tutorial. Fast and easy to understand.

  • @AlexCaranha
    @AlexCaranha Жыл бұрын

    Good Job! Amazing tutorial, Patrick. Thanks a lot!

  • @brandonrich4956
    @brandonrich4956 Жыл бұрын

    Thank you! Excellent video. Easy to follow.

  • @scigama71
    @scigama71 Жыл бұрын

    Superb. Thank you. This was very clean and straight to the point. Subbed.

  • @DenisRasulev
    @DenisRasulev Жыл бұрын

    Thanks a lot for the great, short and to the point video with excellent explanations!

  • @NavneetaSinha
    @NavneetaSinha Жыл бұрын

    Thank You so much Patrick for this vodeo, this was the much needed video for me right now

  • @tamirsalem76
    @tamirsalem762 ай бұрын

    Brilliant tutorial, concise yet very complete.

  • @UnUnkn0w
    @UnUnkn0w Жыл бұрын

    great video, thanks! a lot of value for 30 minutes !!

  • @tedlazar
    @tedlazar Жыл бұрын

    Dear Patrick, thanks a lot for the great tutorial !!!

  • @cexploreful
    @cexploreful Жыл бұрын

    Wow i wanted to learn Docker! Thx again Patrick!

  • @ronjones1587
    @ronjones15872 ай бұрын

    This is all I need and you gave it perfectly ! Thank you very much !

  • @sabaokangan
    @sabaokangan Жыл бұрын

    Thank you so much for sharing this with us ❤️‍🔥

  • @GrayCo
    @GrayCo Жыл бұрын

    Great video and impressive understanding of the subject matter.

  • @dogbusiness5201
    @dogbusiness5201 Жыл бұрын

    Thanks for the video. Just started the course on Docker so this one was extremely relevant

  • @Mutombo71

    @Mutombo71

    Жыл бұрын

    use podman instead, it is the future

  • @baopeng
    @baopeng Жыл бұрын

    Very detailed! Cool stuff!

  • @ujefmalek77
    @ujefmalek77 Жыл бұрын

    आपके वीडियो सुपर कूल और अद्भुत हैं। मुझे यह बहुत पसंद आया. धन्यवाद

  • @JiriPocta
    @JiriPocta5 ай бұрын

    Thank you very much, simple and easy to understand.

  • @jiangpengli86
    @jiangpengli8624 күн бұрын

    Thank you for this great tutorial.♥

  • @jasynskyi
    @jasynskyi7 ай бұрын

    Great explanation! thank you for your work

  • @murtadha96
    @murtadha96 Жыл бұрын

    Brilliant! Thank you for this video

  • @chineduezeofor2481
    @chineduezeofor2481 Жыл бұрын

    Excellent tutorial!

  • @vadymesch2267
    @vadymesch22673 ай бұрын

    Great one!❤‍🔥❤‍🔥❤‍🔥

  • @angtranhai6457
    @angtranhai6457 Жыл бұрын

    Very helpful sir!

  • @janaeshkrish
    @janaeshkrish Жыл бұрын

    Nicely done 🎉

  • @vivarantx
    @vivarantx Жыл бұрын

    thanks patrick , you are a genius!

  • @polydeuces01
    @polydeuces01 Жыл бұрын

    Great Demo I even managed to to do it on my windows machine.

  • @mohssineserraji1098
    @mohssineserraji10987 ай бұрын

    Thank you for the amazing tuto

  • @navneetchourasiabgt
    @navneetchourasiabgt Жыл бұрын

    Great content dude 😎

  • @MohammadMahdian888
    @MohammadMahdian888 Жыл бұрын

    Awesome tutorial

  • @RNikSan
    @RNikSan Жыл бұрын

    Super, thanks a lot!

  • @ventin75
    @ventin75 Жыл бұрын

    exactly what i needed

  • @kingdsl
    @kingdsl14 күн бұрын

    For those who are asking about the VS Code theme, I believe it's 'Shades of Purple' by Ahmad Awais ⚡

  • @geraldbustos
    @geraldbustos5 күн бұрын

    Buenisimo!

  • @vengtCent
    @vengtCent Жыл бұрын

    Hi Patrick, thanks for this great tutorial. Do you have any resources for setting up this environment with pycharm?

  • @lune0409ify
    @lune0409ify Жыл бұрын

    Thank you! :)

  • @timkochanski
    @timkochanski Жыл бұрын

    Great tutorial. Is anything additional required when docker compose yaml references multiple containers forming a network? Can I just connect to my UI container and debug through all the other referenced containers as if they were just imports and I had justmycode set to false? Or do we need to edit other container docker files... Maybe adding port 5678 for example?

  • @BrettKromkamp
    @BrettKromkamp Жыл бұрын

    Great beginner tutorial. Thanks for this.

  • @recaseng
    @recasengАй бұрын

    Thank you ^^

  • @brennenherbruck8740
    @brennenherbruck8740 Жыл бұрын

    Devcontainers have prebuilt configurations that are *much* simpler and gives your container superpowers with devcontainer feautres (like docker-in-docker)

  • @Lexaire

    @Lexaire

    Жыл бұрын

    Yes, using non-dev images like he showed is an awful dev experience. Much better to use the premade ones for development, and then custom dockerfiles just for final testing and deployment.

  • @madferretx

    @madferretx

    Жыл бұрын

    Can you give examples of good premade dev environment? anything for javascript?

  • @madferretx

    @madferretx

    Жыл бұрын

    @@Lexaire Can you give good examples of premade dev environment? one for javascript? thanks

  • @muxahx3096

    @muxahx3096

    Жыл бұрын

    agreed + you can actually debug in container (use break points )

  • @chriskeo392

    @chriskeo392

    11 ай бұрын

    ​@@Lexaireneed more!

  • @DanielStoehr203
    @DanielStoehr203 Жыл бұрын

    Hey Patrick, Thanks for the video. Do you know if developing inside docker Container is working With the community Edition of pycharm?

  • @michaelestrinone2111
    @michaelestrinone2111 Жыл бұрын

    @Patric - it will be a great learning video about the same subject but geared towards C# developers with either SQL Server as a backend or MySQL etc.

  • @DeathBean89

    @DeathBean89

    Жыл бұрын

    I'm not a C# dev, but you could probably modify the Dockerfile to pull the image for the current .NET version and then RUN any commands to set up the environment. Then you could modify the docker-compose file and replace the redis service with a SQL Server or MySQL one. Forward the appropriate ports, make sure that your volumes are correct, and you should be good to go. I'm sure there are plenty of resources out there to get you going. Good luck!

  • @DanielF847
    @DanielF847 Жыл бұрын

    Great tutorial and cool way to leverage containers! Have you found any methods for doing this using open-source or even source available tooling? :-/ Microsoft appears to have restricted the Docker and dev-environment extensions to their proprietary closed-source release of vscode (Microsoft visual studio code)... Great to see Microsoft back to their old tricks 😩

  • @kimsanov
    @kimsanov11 ай бұрын

    At 12:46 when we attach volume - did main.py copied inside container according to Dockerfile instruction?

  • @igorlikholat5606
    @igorlikholat5606 Жыл бұрын

    brilliant tutorial! thank you I have a question.. I’m confused with how to debug worker command inside docer container, when it possible to run in bash console only? I’m going to be glad hearing your answer)

  • @chikken007
    @chikken007 Жыл бұрын

    Could we also setup the debugger with the suggested "fastapi" option of VSCode?

  • @user-yy7el7vg8s
    @user-yy7el7vg8s2 ай бұрын

    Hi, Thanks for this tutorial, it's great! I would like to do the same in pycharm - but it appears that docker-based envs are a premium-only feature. Is that correct or it's possible to do the same also with the community edition of Pycharm?

  • @AmodeusR
    @AmodeusR2 ай бұрын

    Very interesting video. Although it lacks some clarifications on the docker commands, this gap could be filled by ChatGPT helping me out understand what they were exactly. Thanks for the video

  • @alvarovs89
    @alvarovs89 Жыл бұрын

    Hi Patrick! I've been following you for a few months, and thanks for everything you share. Just a quick question, what do you use in the terminal of vs code that show you the suggested code? like autocompletion? thanks again :)

  • @abdullahsaid4765

    @abdullahsaid4765

    Жыл бұрын

    try zsh

  • @NostraDavid2

    @NostraDavid2

    Жыл бұрын

    I love the powerlevel10k wizard, that asks you which features / settings you want. Much easier than trying to customize bash until it looks like Zsh with p10k.

  • @tt4m
    @tt4m Жыл бұрын

    Good♥️♥️💛شكرا

  • @nguyenhieu6995
    @nguyenhieu69957 ай бұрын

    I am quite new to docker. In the example at 21:00, there is a duplicate in command (Dockerfile and docker-compose), should it be duplicated like that or not?

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 Жыл бұрын

    2:13 A container is actually _less_ than a whole VM. It’s a complete prepackaged userland, that runs under the same Linux kernel that is already installed on your machine. It is not actually an OS on its own.

  • @datawolk
    @datawolk Жыл бұрын

    When you build the release container for distribution, will it strip out the vs code stuff? Or do you have to do this manually or isnt that necessary?

  • @FilSerge

    @FilSerge

    Жыл бұрын

    You need just rebuild image with code updated. That's it.

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 Жыл бұрын

    7:17 Having a list of strings is a good idea. This avoids having to pass a shell command, with all the possibilities for (mis)interpretation of special characters. Instead, you pass the command-line words directly to the program, as is.

  • @danielk.2172
    @danielk.2172 Жыл бұрын

    Good tutorial! If anyone on Windows using Git bash having problems to see the reload of the local code, try mounting the volume with: -v /${PWD}:/code Apparently there is a POSIX path conversion that doesn`t convert correctly and ends up adding a ";C" at the end of the local path

  • @josephrobineau1662

    @josephrobineau1662

    Жыл бұрын

    you sir are a good man

  • @guilhermemendes264

    @guilhermemendes264

    8 ай бұрын

    Thanks bro I owe you a beer

  • @budmonk2819

    @budmonk2819

    8 ай бұрын

    Thank you brother - I almost gave up before I decided to search through the comments.

  • @mirwek
    @mirwek6 ай бұрын

    Interesting, you are using Fastapi. How can you debug with debugpy Flask application in docker since you need to give security PIN?

  • @haithammaged987
    @haithammaged987 Жыл бұрын

    thanks🤩

  • @tensorflow5330
    @tensorflow5330 Жыл бұрын

    hello , as I know that docker volumes map the local machine folder Linux or MacOs is different to window 10/11. in windows 10/11 cannot be directly mapped to a local directory

  • @FilSerge
    @FilSerge Жыл бұрын

    That is cool to have all your dev workflow as Dockerfile and to build it whenever/wherever you want. But it's such pain in the ass not to forget installing zsh shell, all vs code extensions, etc. Tried to set it all for my ml project, but failed.

  • @kimsanov
    @kimsanov11 ай бұрын

    Why at 9:00 in Dockerfile wi didn’t have to use EXPOSE instruction?

  • @Didanihaaaa
    @Didanihaaaa11 ай бұрын

    is this different for Flask? Also could you show how to deploy a CNN model and make it work? how do you post an image to trigs the app? do you include the CNN model (sometimes it is heavy) into the image? what if it is big size? Bests

  • @rahulmitra9476
    @rahulmitra9476 Жыл бұрын

    For those of you stuck at 12:18 take note that the brackets are curly brackets

  • @anisyacoubi
    @anisyacoubi Жыл бұрын

    thanks Patrick, am I the only one who's not getting anything when i run the command "docker run --name docher-container -p......". I've changed the port though to 8000:8000 due to an error on 80 but the localhost isn't accesible, any idea where i could be wrong please

  • @tonybengue
    @tonybengue7 ай бұрын

    Thanks for that tutorial sir 🔥 When I want to connect to my container throught Dev Containers, it opens the root folder instead of the code folder (thanks to workdir command in the Dockerfile), and I don't understand why.

  • @commievoyager
    @commievoyager Жыл бұрын

    Nice exploration! But could you do the same using just a docker-compose? Why do you prefer the way using Dockerfile? What benefits does it have?

  • @Remolhunter97

    @Remolhunter97

    7 ай бұрын

    Not sure what you mean, but you need multiple separate dockerImages, each for a different process, and then docker compose to organise all the different dockerImages you have, and run them all at the same time

  • @elmarhinz3076
    @elmarhinz3076 Жыл бұрын

    In the moment of mounting the outside Volume, there should be similar code inside the container. (We know this, as we were able to run it without mounting the outside code.). I miss some words, how this conflict is solved. * What happens to the code inside the container when editing the mounted code? * Why do we copy the code at all, if we plan to mount it? * Wouldn't it make sense to throw an error message from inside, similar: "Error 501: The source volume was not mounted"? Otherwise duplicated code may lead to many mistakes by editing the wrong place. * Is there any standard or practice, how to handle this?

  • @FilSerge

    @FilSerge

    Жыл бұрын

    > What happens to the code inside the container when editing the mounted code? it is substituted with anything new in project directory. > Why do we copy the code at all, if we plan to mount it? to be able to share it. You can commit all editing done to update the image.

  • @albincr
    @albincr7 ай бұрын

    What about other langs like go or rust?? and it too much tied up with vscode? can we configure some other editors???

  • @cantoncotton2229
    @cantoncotton222924 күн бұрын

    Something I don't understand. Why do we need to copy the code to the container if we are later mounting pwd to the container? The code which is in the image is not used anyway right? Also how does it work without EXPOSE 80 in the Dockerfile? Is it optional?

  • @AkaThePistachio
    @AkaThePistachio3 ай бұрын

    Im having issues attaching to my running container, once connected im put inside an empty dir with no access to my code any advice?

  • @timelschner8451
    @timelschner8451 Жыл бұрын

    Question: when you directly connected the IDE inside the cotainer, do you still need the mapping, since you are already in the IDE inside the container?

  • @patloeber

    @patloeber

    Жыл бұрын

    you probably still also want it on your machine and need a mechanism to persist the changes. But if, let's say you push your code from the container to Github, then you don't need the mapping

  • @timelschner8451

    @timelschner8451

    Жыл бұрын

    I see and thanks for the informative video!

  • @irondragon0385
    @irondragon0385 Жыл бұрын

    Would it be possible to do this for Visual Studio (not Code)?

  • @jasonnn12
    @jasonnn12 Жыл бұрын

    What's the extension used that suggests full command in the terminal? seems pretty handy

  • @przbadu

    @przbadu

    Жыл бұрын

    I use zsh-autosuggestions, is this is what you are looking for

  • @akshayboddhul
    @akshayboddhul Жыл бұрын

    Which vs code theme used?

  • @sakkakuppi5637
    @sakkakuppi5637 Жыл бұрын

    Why I am having 'ModuleNotFoundError/ when trying to import function from a file I created?

  • @Mutombo71
    @Mutombo71 Жыл бұрын

    does this also work with podman?

  • @eliluong
    @eliluong Жыл бұрын

    can vscode connect to remote container on another host?

  • @AmodeusR
    @AmodeusR2 ай бұрын

    For some reason even with the -v flag it didn't update the container, and it doesn't update even if I delete an recreate the container. Also, when I open VSCode in the running container, there's no folder opened, nor any actual python file. Any idea why?

  • @Xertish210
    @Xertish210 Жыл бұрын

    which İDE do you use

  • @sebastianmolitor4827
    @sebastianmolitor4827 Жыл бұрын

    Great video. Thank you for this fast foward track on "docker developing". But I have one stuoid beginner qestion: How do I get my changed code from inside the container? 🤔

  • @martinstojcevski9585

    @martinstojcevski9585

    Жыл бұрын

    You can always copy the code from the container. But in the video he is explaining about container volumes, which will mirror both local and the container code, so whatever is changed in the code of the container it will be mapped to the local code

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 Жыл бұрын

    12:34 Does the COPY command in the Dockerfile become superfluous when you define a volume?

  • @ClAddict

    @ClAddict

    Жыл бұрын

    Only if you don’t want to actually use the docker image in any production environment.

  • @sseymour1978
    @sseymour1978 Жыл бұрын

    When using this approach you end up with 2 VScode projects open at the same time. And for some reason I can connect to debugger only from host VScode and not from container.

  • @sadamabbasi1574
    @sadamabbasi1574 Жыл бұрын

    Sir, What python IDE and autocomplete extensions you have used in Intermediate Python Course ? Kindly share

  • @Mathias-cq3zo

    @Mathias-cq3zo

    Жыл бұрын

    It is the one that's included with the python extension in VSC (the Python extension Patrick showed us)

  • @elmarhinz3076
    @elmarhinz3076 Жыл бұрын

    Each time the container is rebuilt the editors extension have to be installed again. Here the workflow feels a little broken. Any best practice how to address with this? How to do it within a multi developer project?

  • @FilSerge

    @FilSerge

    Жыл бұрын

    Yeah, such a bummer. You need to add some lines in Dockerfile for installing z-shell and vs code extensions.

  • @sunnypepple6571
    @sunnypepple65713 ай бұрын

    How I deploy and use it on an ec2 instance?

  • @olivierwarnier969
    @olivierwarnier9698 ай бұрын

    Hi, thank you I'm alone with problem in 14:30 ? : when I start VSCode in dev container "fastapi-container" I don't have any sources, and when I open folder VSCode re-open local version. Working on macOSX Ventura 13.5.2 - VSCode 1.82.3 latests version of Docker and dev container extensions

  • @kreten780

    @kreten780

    5 ай бұрын

    Same problem, there is an error when setting up the whole opening code inside of a container. Did you solve it? I am getting Error reading shell environment. Error: stream ended with:0 but wanted:9

  • @hdcamsit2144
    @hdcamsit2144 Жыл бұрын

    @patloeber do you think it makes sense to develop python packages inside docker?

  • @cexploreful

    @cexploreful

    Жыл бұрын

    i want to know it too

  • @MAJIDNISAR
    @MAJIDNISAR11 ай бұрын

    is there a MERN /MEAN stack development machine for it

  • @elhusseinali8934
    @elhusseinali8934 Жыл бұрын

    could you share with us the name of your vscode theme

  • @statuve9812
    @statuve9812Ай бұрын

    I really like this way of developing, but I encoutered the problem that my code was trying to render something, that I couldn't see. Does anyone have a good solution for this kind of problem when the host system is windows 10?

  • @IsayanBros
    @IsayanBros Жыл бұрын

    I have been using docker compose for project setup for years now and have been happy with it. However, as soon as I switched to an M1 Macbook, startup speeds have been pretty bad.

  • @FilSerge

    @FilSerge

    Жыл бұрын

    Is it because m1? What have gone wrong?

  • @user-sl4ry1rg1u
    @user-sl4ry1rg1u3 ай бұрын

    how your codes are being autocomplete?