Docker: Könnyű építeni, futtatni, kész!

Docker a közelmúltban rengeteg zümmögést váltott ki, és jó okkal. A konténerszolgáltatás megkönnyíti és stabilá teszi a mikroszolgáltatások telepítését, mivel minden szolgáltatás futtathatja az operációs rendszert a saját virtuális környezetében. Ez azt jelenti, hogy teljes kompatibilitás… már nem kell aggódnia az operációs rendszer verziói, a függőségek és a fejlesztői és gyártói között fennálló különbségek miatt! Ráadásul könnyű, így több Docker konténert futtathat ugyanazon a gépen (EC2 példány). Ma megtanuljuk, hogyan állíthatja be és telepítheti a Dockert az Amazon EC2-re 3 egyszerű lépésben!

Mielőtt elkezdenénk, nézze meg ezt a magas szintű diagramot (az infoworld.com jóvoltából).

A bal oldalon látható a hagyományos virtuális gép-beállítás hypervisor használatával. A hipervizor egyszerűen az Ön virtuális gép-kezelője, aki felelős az egyes virtuális operációs rendszerek hardveres erőforrásainak elosztásáért. Ha minden vendég operációs rendszerhez 1 GB memória szükséges, és a gazdagép 1 GB memóriát használ, akkor a bal oldali beállításhoz összesen 4 GB szükséges.

A jobb oldalon egy konténerbeállítás található, amely egy olyan konténermotort működtetne, mint a Docker. A legjelentősebb különbség az, hogy a konténermotor könnyebb, mert bizonyos hardver erőforrásokat megoszthat a fogadó operációs rendszerrel, ellentétben a hagyományos virtuális gépekkel, amelyek saját külön elosztást igényelnek. Ehhez a beállításhoz 1 GB szükséges a gazdagép operációs rendszeréhez, és talán 600 MB tárolónként (mert 300 MB hipotetikusan meg van osztva a gazdagép operációs rendszerével), összesen 2,8 GB szükséges. Látja ezeket az előnyöket? Hűvös, most már indulhatunk is!

Elkezdeni

Írja be EC2 példányát, és klónozza a Kangzeroos-ES6-React-Redux-Boilerplate-t a Github-ból. A látható kód a webalkalmazás beállításához szükséges, de a lépések minden projekt esetében megegyeznek. Miután letöltötte, lépjen a mappába, és keresse meg az alábbi fájlokat. Ezeket a fájlokat fogjuk használni a Dockerrel.

Dockerfile build.sh run.sh

A Docker használata előtt először telepítenünk kell. Az alábbiakban bemutatjuk a Docker telepítésének gyors és egyszerű módját, de ha a teljes konfigurációs pénztárat szeretné, akkor a hivatalos dokumentumokat.

$ sudo apt-get update $ sudo apt-get install docker-engine $ sudo service docker start $ sudo docker run hello-world

Az utolsó parancs ellenőrzi, hogy a Docker sikeresen fut-e, majd kilép. Ha mindez működik, készen áll a Dockerizálás megkezdésére!

1. lépés: A Dockerfile felépítése

Az első lépés a fájlok konfigurálása, amelyek szükségesek ahhoz, hogy a Docker képeket készítsen magának. A Docker Images egyszerűen a létrehozni kívánt környezetek tervrajzai, míg a konténerek azok a tényleges futó és funkcionális környezetek, amelyekben az alkalmazás végrehajtásra kerül. Az alkalmazáskönyvtárunk gyökerében található egy mappa App. Maga a webalkalmazás ebben a Appmappában található, míg a Dockerrel kapcsolatos összes dolog kívül van. Erre azért van szükség, mivel a Docker mindent belül tart App. Tehát készítsük el az első Docker fájlt Dockerfile( Dockerfile.shcsak nincs fájlkiterjesztés Dockerfile), és haladjunk végig soronként.

FROM ubuntu # ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install nodejs -y && apt-get install npm -y # install curl for n RUN apt-get install curl -y RUN apt-get install vim -y # obtain latest stable version of node RUN npm cache clean -f RUN npm install -g n RUN n stable # setup working directory # ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Az első sor az FROM ubuntu. A célja Dockerfileaz operációs rendszer és a programok beállítása az operációs rendszeren belül, ezért van értelme, hogy az első sor meghatározza, hogy mely operációs rendszert használja. ubuntuitt a Docker Hubon tárolt konkrét képre, konkrétan a hivatalos Ubuntu OS Image-re hivatkozunk.

# ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install curl -y RUN apt-get install vim -y

A következő sorok beállítása az Ubuntu-ban történik. Szeretnénk ellenőrizni, hogy vannak-e Ubuntu frissítések RUN apt-get update -yés frissítések RUN apt-get upgrade -y… elég szabványos dolgokkal a környezet beállításához. Telepítse a curl-t RUN apt-get install curl -yés a VIM-et is RUN apt-get install vim -y, mindkettő jó, ha általános célokra szolgál.

# obtain latest stable version of node RUN apt-get install nodejs -y && apt-get install npm -y RUN npm cache clean -f RUN npm install -g n RUN n stable

A következő sorkészlet a NodeJS-re jellemző beállítás. Mivel az ES6 szolgáltatásait szeretnénk használni, szükségünk lesz a NodeJS legfrissebb verziójára, amelyet a csomópont modulon keresztül érünk el n. Telepítse NodeJS és NPM az RUN apt-get install nodejs -y && apt-get install npm -y. Ezután tisztítsa meg az npm-et, hogy utat engedjen a nhasználatának RUN npm cache clean -f. Telepítse naz RUN npm install -g n. És végül futtathatjuk n(a NodeJS legújabb verziója) RUN n stable.

A NodeJS a Javascript-hez készült, de ha más nyelvekkel, például a Python-dal dolgozott, akkor telepítenie kellett a Python alkalmazás futtatásához szükséges programokat.

# setup working directory ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Az utolsó rész Dockerfileaz alkalmazás munkakönyvtárának beállítása. ADD /App /Appelveszi a Appmappát a gépünkről és átmásolja a Docker konténerbe. Ezután WORKDIR /Appállítsa a Docker munkakönyvtárat /Appúgy, hogy a Docker belsejében futtatott parancsokat végrehajtsa /App. Erre npm installa megfelelő helyre történő telepítéshez van szükség (más néven /Appa Docker konténerhez).

Végül RUN npm installmi telepítjük NodeJS függőségeinket a gépünkbe. Végül pedig kifejezetten kitesszük Docker képünk 8080-as portját EXPOSE 8080, hogy a külvilág hozzáférhessen alkalmazásunkhoz. A külvilág magában foglalja az internetet, valamint az ugyanazon a gépen futó többi Docker konténert.

2. lépés: A build szkript

docker build -t kangzeroo .

Hozzon létre egy új fájlt az alkalmazás gyökérkönyvtárában build.sh. Ez egy héjfájl a Docker konténer felépítéséhez. Ez a build.shfájl valójában nem szükséges, mivel közvetlenül futtathatjuk ezt a parancsot a terminálban. Azonban nagyon szép a folyamat egyszerűsítésére.

Itt van ennek a sornak a bontása: docker buildaz a parancs, amely megmondja Dockernek, hogy készítsen képet. -t kangzerooa Docker kép címkéjének nevét állítja be kangzeroo, amelyre később hivatkozhatunk. Kérjük, ne feledje, hogy az érvényes címke-név kisbetűsnek kell lennie, és nem tartalmazhat szóközt (használjon kígyó-eset elnevezést). Végül .elmondja Dockernek, hogy hol keresse Dockerfilemeg az építéshez szükséges .eszközt ( itt azt jelenti).

Ha EC2 példányban van, akkor futtathatunk bash build.shprojektünk gyökérkönyvtárából. Ez elindítja a Docker felépítési folyamatát, amint végigmegy az Dockerfileáltalunk létrehozott lépéseken . Ez eltarthat egy ideig ... a végén ennek így kell kinéznie: (Ne aggódjon a nem kritikus hibák, például az alábbi képernyőképen kihagyott opcionális függőség miatt).

Most ellenőrizzük, hogy létrejött-e a képünk. Írja be, docker imageshogy megtekinthesse a gépünkön jelenleg futó képeket. Ilyen eredményt kell látnia:

Ha törölni akarjuk ezt a képet, egyszerűen írja be docker rmi kangzeroo. Ha docker imagestörlés után újra beír , akkor látni fogja, hogy a kép már nincs ott. Most hagyjuk a képet, mert arra fogjuk használni, hogy felépítsük a Docker konténert, hogy alkalmazásunk fusson.

3. lépés: A futtatott szkript

Now that our image has been created, let’s make run.sh. Recall that Docker Images are simply blueprints of environments that you want to create. Containers are the actual running and functional environments that your app will be executed in. So run.sh will turn our images into containers. Here is what run.sh looks like:

docker run -d -it -p 80:8080 --name=kz kangzeroo npm run ec2 -- --host=0.0.0.0

Let’s walkthrough this short script. docker run is the command to run a container from an image. -d -it is the command for daemon (running tasks in the background) and interactive terminal (giving us a way to interact with the container). If you omit -d then the docker container will not run in the background and you will see log output from the app. -p 80:8080 maps port 80 of our machine to port 8080 of the container. Recall that earlier we specified EXPOSE 8080 in our Dockerfile. So now we take incoming connections on our machine’s port 80 (port 80 is the default for http) and redirect them to our container’s port 8080. If your app is not a webpage, then you can exclude this port mapping.--name=kz gives our container the name kz. Finally, kangzeroo npm run ec2 refers to our image called kangzeroo and npm run ec2 is a command specific to this boilerplate app (for starting up the app). The last part — — host=0.0.0.0 sets the boilerplate to run on 0.0.0.0 instead of localhost (This too is specific to the boilerplate). If you were running a Python backend app, it would look like docker run -d -it --name=kz kangzeroo python app.py.

Great! Save this file and run it with bash run.sh. Then check if the container is running by typing docker ps -a. This is what it should look like:

Your app is now online and running inside a Docker container! Check if it works… for this boilerplate you can check from a web browser.

And it’s working! Great, now let’s turn off our Docker container. Type docker ps -a to see all the containers again. Type docker stop kz and it stops the container. If you type docker ps you will not see the container anymore, but you will see it if you type docker ps -a ( -a means all, inclusive of running and not running container. omit -a if you only want to see running containers). To remove the container, type docker rm kz. If you type docker ps -a you won’t see the container anymore.

Conclusion

Docker volt az! Mindent figyelembe véve a Docker sokkal könnyebb, mint egy hypervisor-alapú virtuális gép beállítása, és láthatja, hogy miként válik a mikroszolgáltatási architektúra sokkal könnyebben kezelhetővé a tárolók átvételekor. A mi Dockerfile, build.shés run.shlétrehozott fájlokat EC2, tudjuk összefoglalni a 3 lépés, futás Docker a mi app gyökérkönyvtárába:

$ bash build.sh $ bash run.sh $ exit

Ez az! Docker: könnyű építeni, futtatni, kész!

Bónusz Cheatsheet

Mivel ez a bemutató lépésről-lépésre megközelítette a Docker tanítását, úgy gondolom, hogy helyénvaló áttekintést adni az összes általános célú használatához szükséges Docker-parancsról.

$ docker images // To view install images $ docker rmi  // To remove an installed image $ docker ps -a // To view all docker containers $ docker stop  // To stop a docker container $ docker rm  // To remove a docker container $ docker exec -it  bash // Execute into container and run bash * If you want to see the log output from a docker container, omit the -d from run.sh
Ezeket a módszereket részben alkalmazták a renthero.ca telepítésében