Docker: Comandos y ayudas

Primero que todo en la pagina oficial encontraremos la guía para realizarlo:

https://docs.docker.com/compose/install/

https://docs.docker.com/engine/

 https://docs.docker.com/engine/install/ubuntu/

Comandos de instalación para una distribución basada en ubuntu

sudo apt-get update

sudo apt-get install  apt-transport-https  ca-certificates   curl  gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository   "deb [arch=amd64] https://download.docker.com/linux/ubuntu    $(lsb_release -cs)   stable"

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

sudo service docker status

Configuración e instalación de docker compose


sudo groupadd docker

sudo usermod -aG docker ${USER}

curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose   

chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose --version

Descargar la imagen billingapp


docker pull sotobotero/udemy-devops:0.0.1

Crear el contenedor billingapp


docker run -p 80:80 -p  8080:8080 --name billingapp sotobotero/udemy-devops:0.0.1

Listar los contenedores existentes

docker ps -a

Detener un contenedor


docker stop nombreobjeto

Ver los logs de un contenedor


docker logs nombreobjeto

Iniciar un contenedor detenido


docker start nombreobjeto

Listar las imagenes locales


 docker image ls

Eliminar una imagen

docker image rm nombreobjeto

Descargar las imagenes usndo docker-compose


docker-compose -f stackdb.yml pull

Iniciar los contenedores

docker-compose -f stackdb.yml up -d

Url de la inteface de adminer


http://localhost:9090/

Costruir la imagen


docker build -t billingapp:prod --no-cache --build-arg JAR_FILE=target/*.jar .

Levantar el contendor para probar

docker run -p 80:80 -p  8080:8080 --name billingapp billingapp:prod

Darle un nuevo tag

docker tag billingapp:prod sotobotero/udemy-devops:0.0.2

Loguearse en el docker engine hacia docker hub


docker login (usas tu usario y contraseña)

Hacer un push de la imagen

docker push sotobotero/udemy-devops:0.0.2

Comando para activar WSL2

Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")




# Commandos básico y utiles para el curso

## Índice

1. [**Network tools**](#network-tools)
    - [Linux](#linux)
    - [Windows Power shell](#windows-power-shell)
2. [**Docker**](#docker)
    - [Trabajando con imágenes del container registry](#trabajando-con-imágenes-del-container-registry)
    - [Construyendo Imágenes](#construyendo-imágenes)
    - [Comandos Avanzados para Imágenes](#comandos-avanzados-para-imágenes)
    - [Comandos para la Gestión Básica de Contenedores](#comandos-para-la-gestión-básica-de-contenedores)
    - [Trabajando con Redes y Volúmenes](#trabajando-con-redes-y-volúmenes)
    - [Interactuando con Contenedores](#interactuando-con-contenedores)
    - [Docker Compose](#docker-compose)
    - [Administración de Redes y Volúmenes](#administración-de-redes-y-volúmenes)
    - [Comandos para Información y Estadísticas](#comandos-para-información-y-estadísticas)
    - [Comandos para Seguridad y Control de Acceso](#comandos-para-seguridad-y-control-de-acceso)
    - [Comandos para Configuraciones Avanzadas](#comandos-para-configuraciones-avanzadas)

## Network tools

### Linux
1. Install this tool to management network options

```shell
sudo apt install net-tools
sudo apt-get install telnet
```
* Check ports listening

```shell
netstat -n --all --tcp
```
* Find specific port
```shell
sudo lsof -i -P -n | grep 9000
```
* Testing socket whit telnet, teh format telnet ipaddress port
```shell

telnet localhost 5433
```

 ### Windows Power shell

* Check ports listening

```powershell
Get-NetTCPConnection
```
* Obtener todas las conexiones TCP

```powershell
$connections = Get-NetTCPConnection
```
* Filtrar conexiones en estado 'Listen' o 'Established'*

```powershell
$filteredConnections = $connections | Where-Object {($_.State -eq 'Listen') -or ($_.State -eq 'Established')}
```
* Obtener información detallada de cada conexión*

```powershell
$connectionDetails = $filteredConnections | ForEach-Object {
    $localPort = $_.LocalPort
    $remotePort = $_.RemotePort
    $state = $_.State
    $processId = $_.OwningProcess
    $process = Get-Process -Id $processId
    $processName = $process.ProcessName

    [PSCustomObject]@{
        LocalPort = $localPort
        RemotePort = $remotePort
        State = $state
        Application = $processName
    }
}
```
* Mostrar la información en la consola

```powershell
$connectionDetails
```
* Find specific port

```powershell
Get-NetTCPConnection | Where-Object {$_.LocalPort -eq 9000}
```
* Testing socket whit telnet, teh format telnet ipaddress port
```powershell
Test-NetConnection -ComputerName localhost -Port 5433
```

## **Docker**
### Trabajando con imágenes del container registry

- **Descargar una imagen desde Docker Hub:**

```shell
#docker pull nombre_de_la_imagen
docker run -d -p 80:80 docker/getting-started
```
- **Listar imágenes locales:**

```shell
docker image ls
```
- **Crear y ejecutar un contenedor a partir de una imagen:**

```shell
#docker run [opciones] nombre_del_contenedor nombre_de_la_imagen
docker run -p 80:80 -p 7080:7080 --name containerBilling sotobotero/billingapp
```
- **crear un contenedor de postgres y una base de datos en el mismo comando:**

```shell
docker run --ulimit memlock=-1:-1 -d --name postgres -e POSTGRES_USER=sa -e POSTGRES_PASSWORD=admin -e POSTGRES_DB=product_db -p 5432:5432 postgres:13.3
```
- **Listar contenedores en ejecución:**

```shell
docker ps
```
- **Listar todos los contenedores (incluso los detenidos):**

```shell
docker ps -a
```
- **Detener todos los contenedores:**

```shell
docker stop $(docker ps -q)
```
- **Iniciar todos los contenedores:**

```shell
docker start $(docker ps -a -q)
```
- **Eliminar todos los contenedores:**

```shell
docker rm $(docker ps -a -q)
```
### Construyendo Imágenes

- **Construir una imagen desde un Dockerfile:**

 ```shell
 #docker build -t nombre_de_la_imagen [opciones y parametros] .
 docker build -t billingapp --no-cache --build-arg JAR_FILE=target/*.jar .
```
- **Construir una imagen con un contexto específico:**

 ```shell
  docker build -t nombre_de_la_imagen -f ruta/Dockerfile .
```
### Comandos Avanzados para Imágenes

- **Etiquetar una imagen:**

 ```shell
 docker tag nombre_de_la_imagen nueva_etiqueta
```
- **Loguears en un registry:**

 ```shell
docker login # te pedirá usuario y contraseña
 ```
- **Subir una imagen a Docker Hub:**

 ```shell
  docker push nombre_de_la_imagen
```
- **Descargar una imagen con una etiqueta específica:**

 ```shell
  docker pull nombre_de_la_imagen:etiqueta
```
- **Desloguearse de un registry:**

 ```shell
docker logout
 ```
### Comandos para la Gestión Básica de Contenedores

- **Detener un contenedor en ejecución:**

```shell
docker stop nombre_del_contenedor
```

- **Iniciar un contenedor detenido:**

```shell
docker start nombre_del_contenedor
```
- **Eliminar un contenedor:**

```shell
docker rm nombre_del_contenedor
```
- **Eliminar una imagen local:**

```shell
docker image rm nombre_de_la_imagen
```
### Trabajando con Redes y Volúmenes

- **Crear una red personalizada:**

 ```shell
 docker network create nombre_de_la_red
```
- **Listar redes:**

 ```shell
 docker network ls
```
- **Crear un volumen:**

 ```shell
 docker volume create nombre_del_volumen
```
- **Listar volúmenes:**

 ```shell
 docker volume ls
```
### Interactuando con Contenedores

- **Ejecutar un comando en un contenedor en ejecución:**

 ```shell
 #docker exec -it nombre_del_contenedor comando
docker exec -it localbillingApp sh
```
- **Copiar archivos entre el host y un contenedor:**

 ```shell
  docker cp archivo.txt nombre_del_contenedor:/ruta/destino
  ```
### Docker Compose

- **Iniciar contenedores definidos en un archivo `docker-compose.yml`:**

 ```shell
  docker-compose up
```
- **Escalar servicios en Docker Compose:**

 ```shell
  docker-compose scale servicio=num_instancias
```
- **Detener y eliminar contenedores definidos en Docker Compose:**

 ```shell
  docker-compose down
```
- **Ver logs de servicios en Docker Compose:**

 ```shell
  docker-compose logs servicio
```
### Administración de Redes y Volúmenes

- **Eliminar una red:**

 ```shell
  docker network rm nombre_de_la_red
```
- **Eliminar un volumen:**

 ```shell
  docker volume rm nombre_del_volumen
```
- **Inspeccionar una red:**

 ```shell
 docker network inspect nombre_de_la_red
```
### Comandos para Información y Estadísticas

- **Ver detalles de un contenedor:**

 ```shell
  docker inspect nombre_del_contenedor
```
- **Obtener estadísticas de uso de recursos de un contenedor:**

 ```shell
  docker stats nombre_del_contenedor
```
- **Obtener estadísticas de uso de recursos de todos los contenedores:**

 ```shell
  docker stats
```
### Comandos para Seguridad y Control de Acceso

- **Crear un perfil de control de acceso (se requiere Docker EE):**

 ```shell
  docker trust key generate nombre_de_perfil
```
- **Especificar qué usuarios o equipos pueden o no usar Docker:**

 ```shell
  docker trust key load --alias nombre_de_perfil.pem --pem --root /etc/docker/pki/tls/private
```

- **Inhabilitar Docker para usuarios no autorizados (se requiere Docker EE):**

 ```shell
  docker trust signer remove nombre_de_perfil
```
### Comandos para Configuraciones Avanzadas

- **Crear un contenedor con un archivo de configuración personalizada:**

 ```shell
  docker run -v ruta/local:/ruta/contenedor -e variable_de_entorno=valor nombre_de_la_imagen
```
- **Especificar recursos de sistema para un contenedor (CPU, memoria, etc.):**

 ```shell
 docker run --cpu-shares=512 -m 256m nombre_de_la_imagen
```
- **Elimina todos los contenedores detenidos e imagenes que no esten en uso**

 ```shell
docker system prune --all
 ```
 - **Elimina todos los volumenes que no esten en uso**

 ```shell
docker volume prune
 ```
 - **Elimina todas las redes que no esten en uso, menos las por defecto (bridge, none,host)**

 ```shell
docker network prune
 ```

Comentarios

Entradas populares