Docker Cheat Sheet
Taula de Continguts
- Per què Docker
- Prerequisits
- Instal·lació
- Contenidors
- Imatges
- Xarxes
- Registry i Repositoris
- Dockerfile
- Capes
- Enllaços
- Volums
- Exposant Ports
- Bones pràctiques
- Docker-Compose
- Seguretat
- Consells
Per què Docker
Amb Docker, els desenvolupadors (i desenvolupadores) poden construir qualsevol aplicació en qualsevol llenguatge utilitzant qualsevol eina. Les aplicacions "Dockeritzades" són totalment portables i poden funcionar en qualsevol lloc: En portàtils amb OS X i Windows de companys; servidors de QA amb Ubuntu al núvol; i VMs dels centres de dades de producció que funcionen amb Red Hat.
Els desenvolupadors poden començar a treballar ràpidament a partir de qualsevol de les més de 13.000 aplicacions disponibles a Docker Hub. Docker gestiona i desa els canvis i dependències, facilitant el treball als Administradors de Sistemes a l'hora d'entendre com funcionen les aplicacions fetes pels desenvolupadors. I, amb Docker Hub, els desenvolupadors poden automatitzar el desplegament i compartir el treball amb col·laboradors a través de repositoris públics o privats.
Docker ajuda els desenvolupadors a treballar i aconseguir aplicacions de millor qualitat de forma més ràpida." -- Què és docker?
Prerequisits
De forma opcional, es pot utilitzar Oh My Zsh amb el plugin de Docker per autocompletar les comandes de Docker.
Linux
El requisit mínim per Docker és utilitzar una versió de Kernel (nucli) posterior a la 3.10.x.
MacOS
Es requereix de la versió 10.8 "Mountain Lion" o posterior.
Windows 11
S'ha d'activar Hyper-V a la BIOS.
En cas d'estar disponible, també s'ha d'activar VT-D (Processadors Intel).
Windows Server
Es recomana utilitzar Windows Server 2022 o posteriors.
Instal·lació
Install-Linux
Executa aquesta comanda ràpida i senzilla proporcionada per Docker:
Si no estàs disposat a executar un shell script que no saps el que porta, si us plau: revisa les instruccions d'instal·lació de la teva distribució.
Si ets totalment nou en Docker, et recomanem seguir aquesta sèrie de tutorials.
macOS
Descarrega i instal·la Docker Community Edition. Si tens Homebrew-Cask, simplement escriu brew install --cask docker. O descarrega i instal·la Docker Toolbox. Docker For Mac està bé, però no està tan polit com la instal·lació de VirtualBox. Revisa la comparació aquí.
NOTA: Docker Toolbox està deprecat. Hauríes d'utilitzar Docker Community Edition, revisa Docker Toolbox.
Un cop hagis instal·lat Docker Community Edition, fes clic a la icona de docker al Launchpad. Llavors inicia un contenidor:
I ja estaria! Ja tens un contenidor de docker funcionant.
Si ets totalment nou en Docker, et recomanem seguir aquesta sèrie de tutorials.
Install-Windows 11
Les instruccions per instal·lar Docker Desktop per Windows es troben aquí
Un cop instal·lat, obre Powershell com a administrador i executa:
# Mostra la versió de docker instal·lada:
docker version
# Descarrega, crea, i executa 'hello-world':
docker run hello-world
Per continuar amb aquesta xuleta, fes clic dret sobre la icona de Docker a la secció de notificacions (a baix a la dreta), i ves a configuració. Per muntar volums, el disc C:/ ha de ser habilitat a la configuració per poder passar la informació als contenidors (es detalla més endavant en aquest article).
Per alternar entre contenidors Windows i Linux, fes botó dret a la icona de Docker a la secció de notificacions i fes clic al botó de canviar el sistema operatiu del contenidor. Fer això pararà els contenidors que estiguin funcionant i seran inaccessibles fins que el SO del contenidor torni a canviar.
Addicionalment, si tens WSL (Subsistema de Windows per Linux) o WSL2 instal·lat al teu equip, potser també vols instal·lar el Kernel de Linux per Windows. Les instruccions per això es poden trobar aquí. Això requereix la característica de Subsistema de Windows per Linux. Això permetrà que els contenidors siguin accessibles des dels sistemes operatius WSL, així com millorar l'eficiència executant sistemes operatius WSL a docker. També és preferible utilitzar la terminal de Windows per això.
Windows Server
Segueix les instruccions de Microsoft que pots trobar aquí
Si fas ús de l'última versió de 2019, prepara't per treballar només amb powershell, donat que és només una imatge del nucli del servidor (sense interfície d'escriptori). Quan iniciïs aquesta màquina, es logejarà i mostrarà una finestra de powershell. Es recomana instal·lar editors de text i altres eines utilitzant Chocolatey
Després d'instal·lar-lo, funcionaran les següents comandes:
# Mostra la versió de docker instal·lada:
docker version
# Descarrega, crea, i executa 'hello-world':
docker run hello-world
Windows Server Build 2004 és capaç d'executar contenidors de Linux i Windows simultàniament a través de l'aïllament de Hyper-V. Quan s'executin els contenidors, utilitza la comanda isolation=hyperv, la qual l'aïllarà utilitzant diferents instàncies de kernel per cada contenidor.
Revisar la versió
És molt important que sempre coneguis la versió de Docker que estàs utilitzant en qualsevol moment. És molt útil donat que permet saber les característiques compatibles amb el que estàs executant. Això també és important per conèixer quins contenidors pots executar de la docker store quan estàs intentant utilitzar un contenidor com a plantilla. Dit això, vegem com recuperar la versió de Docker que s'està executant actualment.
docker versionmostra quina versió de docker s'està executant.
Recuperar la versió del servidor:
Pots bolcar la informació en un JSON:
$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
Contenidors
Procés bàsic de l'aïllament en Docker. Els contenidors són a les màquines virtuals el que els threads són als processos. O pots veure-ho com un chroot dopat.
Cicle de vida
docker createcrea un contenidor però no l'inicia.docker renamepermet reanomenar el nom d'un contenidor.docker runcrea i inicia un contenidor.docker rmelimina un contenidor.docker updateactualitza els recursos màxims d'un contenidor.
Si executes un contenidor sense opcions, aquest s'iniciarà i aturarà automàticament, si vols mantenir-lo funcionant pots utilitzar la comanda docker run -td container_id, això utilitzarà l'opció -t, que habilitarà una pseudo-sessió de TTY, i -d, que separarà el contenidor automàticament (l'executarà en segon pla i mostrarà l'ID del contenidor)
Si vols un contenidor efímer, docker run --rm eliminarà el contenidor tan bon punt s'aturi.
Si vols mapejar un directori de l'host al contenidor de docker, docker run -v $HOSTDIR:$DOCKERDIR. Revisa Volums.
Si en eliminar el contenidor també vols esborrar els volums associats, l'esborrat haurà de contenir -v, per exemple: docker rm -v.
També hi ha un driver de logs disponible per contenidors individuals a Docker 1.10. Per executar docker amb un driver de logs personalitzat, executa docker run --log-driver=syslog.
Una altra opció útil és docker run --name elnomteu docker_image on especificant l'opció --name dins de la comanda run, això et permetrà iniciar i aturar el contenidor utilitzant el nom especificat en crear-lo.
Executant i aturant
docker startinicia un contenidor.docker stopatura un contenidor que estigui iniciat.docker restartatura i executa un contenidor.docker pausepausa un contenidor que s'està executant, congelant-lo.docker unpausereactiva un contenidor.docker waites bloqueja fins que el contenidor s'aturí.docker killenvia un SIGKILL a un contenidor.docker attaches connecta a un contenidor.
Si vols desconnectar-te d'un contenidor, utilitza Ctrl + p, Ctrl + q.
Si vols integrar un contenidor amb un gestor de processos, inicia el daemon amb -r=false, després utilitza docker start -a.
Si vols exposar un port del contenidor a través de l'host, revisa la secció exposant ports.
Les polítiques de reinici en una instància bloquejada s'expliquen aquí.
Restriccions de CPU
Pots limitar la CPU, ja sigui especificant el percentatge global de les CPU o definint el nombre de nuclis.
Per exemple, pots especificar la configuració de cpu-shares. Aquest paràmetre és una mica estrany -- 1024 significa el 100% de la CPU, per la qual cosa si vols que el contenidor utilitzi el 50% de totes les CPU, hauràs d'especificar 512. Revisa https://docs.docker.com/engine/reference/run/#/cpu-share-constraint per més informació.
També pots utilitzar únicament alguns nuclis de la CPU utilitzant cpuset-cpus. Revisa https://agileek.github.io/docker/2014/08/06/docker-cpuset/ per més detalls i alguns vídeos xulos:
Fixa't que Docker pot seguir veient totes les CPU dins del contenidor -- simplement no les utilitza senceres. Revisa https://github.com/docker/docker/issues/20770 per més informació.
Restriccions de memòria
També pots especificar restriccions de memòria a Docker
Capacitats
Les capacitats de linux es poden establir utilitzant cap-add i cap-drop. Revisa https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities per més detalls. Ha d'usar-se per una millor seguretat.
Per muntar un sistema de fitxers basat en FUSE, has de combinar --cap-add amb --device:
Per donar accés a un únic dispositiu:
Per donar accés a tots els dispositius:
Més informació sobre contenidors amb privilegis aquí
Informació
docker psmostra els contenidors funcionant.docker logsrecupera els logs del contenidor. (Pots utilitzar un driver personalitzat per als logs, però els logs només estan disponibles perjson-fileijournalda la versió 1.10).docker inspectrevisa tota la informació del contenidor (incloent l'adreça IP).docker eventsrecupera els esdeveniments del contenidor.docker portmostra els ports oberts a l'exterior del contenidor.docker topmostra els processos que s'estan executant al contenidor,docker statsMostra les estadístiques de l'ús de recursos del contenidor.docker diffMostra els arxius que han canviat al sistema de fitxers del contenidor.
docker ps -a mostra tots els contenidors: que estiguin funcionant o aturats.
docker stats --all llista tots els contenidors, per defecte només els que estan funcionant.
Import / Export
docker cpcopia els fitxers i carpetes d'un contenidor al sistema de fitxers local.docker exportbolca el sistema de fitxers d'un contenidor com a fitxer .tar al STDOUT.
Executant comandes
docker execexecuta una comanda al contenidor.
Per entrar a un contenidor que estigui funcionant, acobla un nou procés de terminal al contenidor usant: docker exec -it <ID/Nom del contenidor> /bin/bash.
Imatges
Les imatges simplement són plantilles per contenidors de docker.
Imatges-Cicle de vida
docker imagesmostra totes les imatges.docker importcrea una imatge a partir d'un fitxer .tar.docker buildcrea una imatge a partir d'un Dockerfile.docker commitcrea una imatge a partir d'un contenidor, aturant-lo temporalment si està funcionant.docker rmielimina una imatge.docker loadcarrega una imatge a partir d'un fitxer .tar passat com a STDIN, incloent imatges i etiquetes.docker savedesa una imatge en un fitxer .tar passat com a STDOUT amb totes les capes superiors, etiquetes i versions.
Imatges-Informació
docker historymostra l'historial d'una imatge.docker tagetiqueta una imatge (local o registry).
Imatges-Netejar
Pots utilitzar la comanda docker rmi per eliminar una imatge específica, però també hi ha una eina alternativa anomenada docker-gc que elimina de forma segura les imatges que ja no estan sent utilitzades per cap contenidor. A la versió 1.13 de docker, també hi ha la comanda docker image prune, la qual elimina les imatges que no estan sent utilitzades. Revisa Prune
Carregar/Desar una imatge
Carrega una imatge a partir d'un fitxer:
Desa una imatge existent:
Importar/Exportar un contenidor
Importa un contenidor com a imatge a partir d'un fitxer:
Exporta un contenidor existent:
Diferència entre carregar i desar una imatge i importar i exportar un contenidor com a imatge
Carregar una imatge utilitzant la comanda load crea una nova imatge incloent el seu historial.
Importar un contenidor com a imatge utilitzant la comanda import crea una nova imatge excloent l'historial, la qual cosa es tradueix en una imatge més lleugera comparada amb carregar-la.
Xarxes
Docker té la característica de Xarxes. Docker automàticament crea tres interfícies de xarxa en instal·lar-lo (pont, host, nul·la). Per defecte, quan es llança un nou contenidor és afegit a la xarxa pont. Per habilitar la comunicació entre diversos contenidors pots crear una nova xarxa i llançar els contenidors en ella. Això permet als contenidors comunicar-se entre ells i aïllar-se dels contenidors que no estan connectats a la seva mateixa xarxa. A més, això permet mapejar noms de contenidors a les seves adreces IP. Revisa working with networks per més informació.
Xarxes-Cicle de vida
docker network createNAME Crea una nova xarxa (per defecte de tipus pont).docker network rmNAME Elimina una o més xarxes indicant el nom o l'identificador. No poden haver-hi contenidors connectats a la xarxa en eliminar-la.
Xarxes-Informació
docker network lsLlista les xarxes creades.docker network inspectNAME Mostra informació detallada d'una o més xarxes.
Xarxes-Connexió
docker network connectNETWORK CONTAINER Connecta un contenidor a una xarxa.docker network disconnectNETWORK CONTAINER Desconnecta un contenidor d'una xarxa.
Pots especificar una ip específica a un contenidor:
# crea una nova xarxa pont amb la subnet i porta d'enllaç específicada
docker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 iptastic
# executa un contenidor de nginx amb la ip especificada a la xarxa iptastic
$ docker run --rm -it --net iptastic --ip 203.0.113.2 nginx
# curl cap a la ip des de qualsevol altre lloc (donant per fet que és una ip pública hehe)
$ curl 203.0.113.2
Registry i Repositoris
(Nota de traducció: Registry seria traduït com a Registre, però ningú li diu així al món real, així que...)
Un repositori és una col·lecció allotjada d'imatges enllaçades que unides creen el sistema de fitxers per un contenidor.
Un Registry és un allotjament -- un servidor que emmagatzema repositoris i proveeix d'una API HTTP per gestionar l'actualització i descàrrega de repositoris.
Docker.com posseeix el seu propi índex com a Registry centralitzat que conté un gran nombre de repositoris. Dit això, aclarir que el docker Registry no fa una bona feina verificant imatges, per la qual cosa potser hauríes d'evitar-lo si et preocupa la seguretat.
docker loginper logar-se en un registry.docker logoutper deslogar-se d'un registry.docker searchbusca al registry per una imatge.docker pullrecupera una imatge del registry a local.docker pushpuja una imatge local al registry.
Executar un registry local
Pots executar un registry local utilitzant el projecte distribució de docker i revisant les instruccions de com realitzar el deploy local
Addicionalment revisa la mailing list
Dockerfile
L'arxiu de configuració. Configura un contenidor de docker en executar docker build en ell. Molt més preferible a docker commit.
Aquí tens diversos editors de texts comuns i mòduls de ressaltat de sintaxi que pots usar per crear Dockerfiles:
- Si utilitzes jEdit, pots fer ús del mòdul de ressaltat de sintaxi per Dockerfile.
- Sublime Text 2
- Atom
- Vim
- Emacs
- TextMate
- VS Code
- Revisa Docker meets the IDE
Instruccions
- .dockerignore
- FROM utilitza una imatge base per les següents instruccions.
- MAINTAINER (deprecated - use LABEL instead) especifica l'autor que ha generat les imatges.
- RUN executa qualsevol comanda en una nova capa de la imatge i desa l'estat resultant.
- CMD proporcionar valors predeterminats per un contenidor en execució.
- EXPOSE informa a Docker que el contenidor estarà escoltant els ports especificats mentre s'executi. NOTA: no fa que els ports siguin accessibles.
- ENV defineix una variable d'entorn.
- ADD copia nous fitxers, directoris o arxius remots al contenidor. Invalida caches. Procura evitar usar
ADDi intenta utilitzarCOPYen el seu lloc. - COPY copia nous fitxers o directoris al contenidor. Per defecte els copia com a root independentment de la configuració de USER/WORKDIR. Utilitza
--chown=<user>:<group>per canviar el propietari. (El mateix s'aplica aADD). - ENTRYPOINT configura un contenidor que funcionarà com a executable.
- VOLUME crea un punt de muntatge per volums externs o altres contenidors.
- USER especifica l'usuari que executarà les pròximes comandes de tipus RUN / CMD / ENTRYPOINTS.
- WORKDIR especifica el directori de treball.
- ARG defineix una variable que estarà disponible durant el build.
- ONBUILD afegeix una instrucció que serà llançada quan la imatge sigui utilitzada com a base d'un altre build.
- STOPSIGNAL defineix el senyal que serà enviat al contenidor per aturar-se.
- LABEL aplica metadades de clau/valor per les imatges, contenidors o daemons (serveis).
- SHELL reemplaça la shell per defecte que és utilitzada per Docker per executar les comandes.
- HEALTHCHECK indica a docker com provar el contenidor per revisar que segueix funcionant.
Tutorial
Exemples
- Exemples
- Bones pràctiques per escriure Dockerfiles
- Michael Crosby té més consells de bones pràctiques per Dockerfile / presa 2.
- Construint bones imatges de Docker / Construint millors imatges de Docker
- Gestionant la configuració d'un contenidor utilitzant metadades
- Com escriure excel·lents Dockerfiles
Capes
Les versions dels sistemes de fitxers en docker es basen en capes. Són similars als git commits o conjunts de canvis per sistemes de fitxers.
Enllaços
Els enllaços defineixen com els contenidors de Docker es comuniquen entre ells mitjançant ports TCP/IP. Atlassian ho explica amb exemples. També pots resoldre enllaços amb noms d'equip.
Això ha estat parcialment deprecat per xarxes definides pels usuaris.
NOTA: Si ÚNICAMENT vols que els contenidors es comuniquin mitjançant enllaços, inicia el servei de Docker amb -icc=false per desactivar la comunicació entre processos.
Si tens un contenidor amb el nom CONTAINER (especificat via docker run --name CONTAINER) i, al Dockerfile, exposes un port:
I llavors crees un altre contenidor anomenat LINKED de la forma:
Llavors els ports exposats i àlies de CONTAINER es mostraran a LINKED amb les següents variables d'entorn:
I t'hi pots connectar d'aquesta forma.
Per eliminar els enllaços, utilitza docker rm --link.
Generalment, enllaçar mitjançant serveis de docker és un subgrup de "descobriment de serveis", un gran problema si tens pensat utilitzar Docker per escalar en producció. Si us plau, llegeix The Docker Ecosystem: Service Discovery and Distributed Configuration Stores per més informació.
Volums
Els volums de Docker són sistemes d'arxius flotants. Aquests no es connecten a un contenidor en particular. Pots utilitzar els volums muntats de contenidors de dades únicament. A partir de Docker 1.9.0, Docker ha anomenat volums que reemplacen els contenidors de només dades. Considera usar volums amb nom per implementar-ho en lloc de contenidors de dades.
Volums-Cicle de vida
Volums-Informació
Els volums són útils en situacions on no pots utilitzar enllaços (els quals són només TCP/IP). Per exemple, si necessitesses tenir dues instàncies de docker comunicant-se deixant dades al sistema de fitxers.
Pots muntar-los en diferents contenidors de docker a la vegada, utilitzant docker run --volumes-from.
Donat que els volums estan aïllats del sistema de fitxers, aquests també són utilitzats per emmagatzemar l'estat a partir de càlculs de contenidors temporals. Exacte, pots tenir un contenidor sense estat i temporal executant-se a partir d'una recepta, destruir-lo, i llavors tenir una altra instància temporal que pugui recuperar el que ha deixat enrere el primer contenidor.
Revisa volums avançats per més informació. Container42 també és d'utilitat.
Pots mapejar directoris de MacOS com a volums de Docker:
Pots utilitzar un volum NFS remot si ets valent
També pots plantejar-te utilitzar contenidors de només dades com es descriuen aquí per tenir portabilitat de dades.
Tingues en compte que pots muntar arxius com a volums.
Exposant ports
Exposar ports d'entrada a través d'un contenidor és complex però factible.
Pot fer-se a través del mapejat de ports del contenidor cap a l'host (utilitzant únicament la interfície de localhost) mitjançant l'ús de p:
Pots dir-li a docker que el contenidor escolta al port especificat utilitzant EXPOSE:
Nota que EXPOSE no exposa el port per si mateix - només -p ho fa.
Per exposar el port d'un contenidor a localhost, executa:
iptables -t nat -A DOCKER -p tcp --dport <LOCALHOSTPORT> -j DNAT --to-destination <CONTAINERIP>:<PORT>
Si estàs executant Docker a Virtualbox, també necessitaràs fer forward del port, utilitzant [forwarded_port] (https://docs.vagrantup.com/v2/networking/forwarded_ports.html). Defineix un rang de ports al teu Vagrantfile de la següent manera per mapejar-los dinàmicament:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
(49000..49900).each do |port|
config.vm.network :forwarded_port, :host => port, :guest => port
end
...
end
Si t'oblides dels ports que has mapejat, utilitza docker port per mostrar-ho:
Bones pràctiques
Aquí tens algunes bones pràctiques de Docker i algunes batalles:
- The Rabbit Hole of Using Docker in Automated Tests
- Bridget Kromhout té un blog post útil sobre executar Docker en producció a Dramafever.
- També tens bones pràctiques en aquest post de Lyst.
- Building a Development Environment With Docker
- Discourse in a Docker Container
Docker-Compose
Compose és una eina per definir i executar diverses aplicacions en contenidors de Docker. Amb Compose, utilitzes un arxiu YAML per configurar els teus serveis. Llavors, amb una única comanda, crees i inicies tots els serveis des de les teves configuracions. Per aprendre més sobre les característiques de Compose, revisa la llista de característiques.
Utilitzant la següent comanda pots iniciar la teva aplicació:
També pots executar docker-compose en segon pla utilitzant el paràmetre -d, llavors podràs aturar-ho quan ho necessitis amb la comanda:
Pots tirar-ho tot, eliminant els contenidors completament, amb la comanda down. Utilitza el paràmetre --volumes per també eliminar els volums de dades.
Seguretat
Aquí et deixem alguns consells de seguretat sobre com funciona Docker. La pàgina de Docker de [seguretat]](https://docs.docker.com/engine/security/security/) ho explica en més detall.
El primer: Docker s'executa com a root. Si ets al grup docker, tens accés root. Si exposes el socket d'unix de docker a un contenidor, li estàs donant al contenidor accés root a la màquina host.
Docker no hauria de ser la teva única defensa. Hauries d'assegurar-lo i protegir-lo.
Per entendre com s'exposen els contenidors, hauríes de llegir Entenent i endurint Contenidors Linux d'Aaron Grattafiori. Aquesta és una guia completa i entenedora sobre els riscos relacionats amb els contenidors, amb una gran quantitat d'enllaços i notes al peu de pàgina. Els següents consells de seguretat són útils si ja has protegit els teus contenidors al passat, però no són substituts a entendre-ho.
Consells de seguretat
Per major seguretat, pots executar Docker dins d'una màquina virtual. Això és un consell del Cap de l'Equip de Seguretat de Docker -- diapositives / notes. Llavors, executa'l amb AppArmor / seccomp / SELinux /grsec etc. per limitar els permisos del contenidor. Revisa les característiques de seguretat de Docker 1.10 per més detalls.
Els identificadors de les imatges de Docker són informació sensible i no haurien d'exposar-se al món exterior. Tracta'ls com a contrasenyes.
Revisa la Xuleta de Seguretat de Docker de Thomas Sjögren: allà podràs trobar bons consells sobre com protegir-se.
Revisa l'script de seguretat de Docker Bench.
Les 10 Millors Pràctiques de Seguretat per Imatges de Docker de Snyk
Pots començar utilitzant un Kernel amb pedaços inestables de grsecurity / pax compilats, com Alpine Linux. Si fas ús de grsecurity en producció, hauríes de buscar suport comercial per els pedaços estables, de la mateixa forma que hauríes de fer per RedHat. Són uns 200$ al mes, la qual cosa és insignificant pel pressupost de devops.
A partir de Docker 1.11, pots limitar fàcilment el nombre de processos que s'executen en un contenidor per evitar fork bombs. Això requereix utilitzar un Kernel de Linux >= 4.3 amb CGROUP_PIDS=y a la configuració del kernel.
A partir de Docker 1.11 també està disponible la possibilitat d'evitar que els processos guanyin nous privilegis. Aquesta característica està al Kernel de Linux des de la versió 3.5. Pots llegir més al respecte en aquest blog.
De la Xuleta de Seguretat de Docker (és un PDF i és una mica complex d'usar, així que millor copia de sota) de Container Solutions:
Desactiva la comunicació interprocessal amb:
Estableix que el contenidor sigui només lectura:
Verifica les imatges amb un hashsum:
Estableix el volum com a només lectura:
Crea i utilitza un usuari al Dockerfile per evitar executar com a root dins del contenidor:
Espai de Noms de l'Usuari (User Namespaces)
També cal treballar amb els espais de noms d'usuari -- disponible a la 1.10, però no activat per defecte.
Per activar aquesta característica ("reassignar els usuaris") a ubuntu 15.10, segueix aquest exemple.
Vídeos de Seguretat
- Using Docker Safely
- Securing your applications using Docker
- Container security: Do containers actually contain?
- Linux Containers: Future or Fantasy?
Ruta de Seguretat
La ruta de Docker parla sobre el suport de seccomp.
També hi ha una política d'AppArmor anomenada bane, i estan treballant en perfils de seguretat
Consells
Fonts:
Prune
Les noves Comandes de maneig de dades van arribar a Docker a la versió 1.13
docker system prunedocker volume prunedocker network prunedocker container prunedocker image prune
df
docker system df mostra un resum de l'espai actualment utilitzat pels diferents elements de Docker.
Heredoc Docker Container
Últimes IDs
Commit amb comanda (necessita de Dockerfile)
Recuperar l'adreça IP
O, amb jq instal·lat:
O, utilitzant una plantilla:
O, en construir la imatge des d'un Dockerfile, quan vols passar arguments de compilació:
DOCKER_HOST_IP=`ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1`
echo DOCKER_HOST_IP = $DOCKER_HOST_IP
docker build \
--build-arg ARTIFACTORY_ADDRESS=$DOCKER_HOST_IP
-t sometag \
some-directory/
Recuperar el mapejat de ports
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' <nomdecontenidor>
Trobar contenidors mitjançant expressions regulars
Recuperar la configuració de l'entorn
Aturar els contenidors en funcionament
Eliminar tots els contenidors (FORÇANT! Els esborrarà estiguin funcionant o aturats)
Eliminar els vells contenidors
Eliminar els contenidors aturats
Eliminar els contenidors després d'aturar-los
Eliminar les imatges penjades
Eliminar totes les imatges
Eliminar els volums penjats
Com a Docker 1.9:
A 1.9.0, el filtre dangling=false no funciona - és ignorat i mostrarà tots els volums
Mostrar les dependències de les imatges
Reduir la mida dels contenidors Docker
-
Netejar l'APT en una capa
RUN- Això hauria de fer-se a la mateixa capa que les altres comandesapt. Sinó, les capes prèvies seguiran tenint la informació original i la imatge seguirà sent pesant. -
Aplanar una imatge
-
Per les còpies de seguretat
Monitoritzar els recursos del sistema utilitzats pels contenidors en funcionament
Per revisar l'ús de CPU, memòria i E/S de xarxa per un sol contenidor, pots utilitzar:
Per tots els contenidors llistats per ID:
Per tots els contenidors llistats per nom:
Per tots els contenidors llistats per imatge:
Eliminar totes les imatges sense etiquetes:
Eliminar contenidors mitjançant una expressió regular:
Elimina tots els contenidors en estat "Exit":
Els volums poden ser fitxers
Tingues en compte que pots muntar fitxers com a volums. Per exemple, poden injectar un arxiu de configuració així: