├── .gitignore
├── img
├── casa.png
├── noip.png
├── php.png
├── vim.png
├── docker.png
├── mysql.png
├── social.png
├── tomcat.png
├── noip-host.png
├── phpinfo.png
├── serverweb.png
├── phpmyadmin.png
├── postgresql.png
├── vtp_ifsp-pb.png
├── DockerImages.jpg
├── apache-logo-3.png
├── birazn-social.png
├── dockerhub-tela.png
├── seta-para-tras.png
├── LAMP-Stack-logo.png
├── phpmyadmin-hide.png
├── seta-para-frente.png
├── dockerhub-repositorio.png
└── virtual_hosts_diagram.jpg
├── LICENSE
├── Aulas
├── 01-Editor_Texto.md
├── 02-ServidorWeb.md
├── 010-Dicas_Basica_Docker.md
├── 011-Primeiro_Dockerfile.md
├── 010-Gerenciando_container.md
├── 09-Docker_LinuxMint_21.md
├── 06-PostgreSQL.md
├── 07-DNS_Dinâmico_NOIP.md
├── 03-VirtualHosts.md
├── 012-Subindo_imagem_para_DockerHub.md
├── 05-Paginas_Pessoais.md
├── 04-LAMP.md
└── 08-Iniciando_com_Docker.md
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.backup
3 |
--------------------------------------------------------------------------------
/img/casa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/casa.png
--------------------------------------------------------------------------------
/img/noip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/noip.png
--------------------------------------------------------------------------------
/img/php.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/php.png
--------------------------------------------------------------------------------
/img/vim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/vim.png
--------------------------------------------------------------------------------
/img/docker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/docker.png
--------------------------------------------------------------------------------
/img/mysql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/mysql.png
--------------------------------------------------------------------------------
/img/social.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/social.png
--------------------------------------------------------------------------------
/img/tomcat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/tomcat.png
--------------------------------------------------------------------------------
/img/noip-host.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/noip-host.png
--------------------------------------------------------------------------------
/img/phpinfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/phpinfo.png
--------------------------------------------------------------------------------
/img/serverweb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/serverweb.png
--------------------------------------------------------------------------------
/img/phpmyadmin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/phpmyadmin.png
--------------------------------------------------------------------------------
/img/postgresql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/postgresql.png
--------------------------------------------------------------------------------
/img/vtp_ifsp-pb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/vtp_ifsp-pb.png
--------------------------------------------------------------------------------
/img/DockerImages.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/DockerImages.jpg
--------------------------------------------------------------------------------
/img/apache-logo-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/apache-logo-3.png
--------------------------------------------------------------------------------
/img/birazn-social.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/birazn-social.png
--------------------------------------------------------------------------------
/img/dockerhub-tela.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/dockerhub-tela.png
--------------------------------------------------------------------------------
/img/seta-para-tras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/seta-para-tras.png
--------------------------------------------------------------------------------
/img/LAMP-Stack-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/LAMP-Stack-logo.png
--------------------------------------------------------------------------------
/img/phpmyadmin-hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/phpmyadmin-hide.png
--------------------------------------------------------------------------------
/img/seta-para-frente.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/seta-para-frente.png
--------------------------------------------------------------------------------
/img/dockerhub-repositorio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/dockerhub-repositorio.png
--------------------------------------------------------------------------------
/img/virtual_hosts_diagram.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/birazn/IDS-IFSPVTP/HEAD/img/virtual_hosts_diagram.jpg
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Ubiratan Zakaib do Nascimento
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Aulas/01-Editor_Texto.md:
--------------------------------------------------------------------------------
1 |
2 | # Editor de Texto - Configuração
3 |
4 |
5 |
6 | Vim, é uma opção ao editor em modo texto nano que tem as bases do Vi com algumas atualizações.
7 |
8 | Para instalar:
9 |
10 | ```shell
11 | sudo apt install vim # Geralmente já vem instalado nas versões atuais do Ubuntu
12 | sudo vim /etc/vim/vimrc # O vimrc é o arquivo que tem as configurações do vim
13 | ```
14 |
15 | Descomentar as linhas, caso seja necessário:
16 |
17 | ```shell
18 | # Procurar esta linha
19 | if has("syntax")
20 | syntax on
21 | endif
22 |
23 | # Procurar esta linha e descomente, dependendo do tema do seu terminal
24 | set background=dark
25 |
26 | # Procurar esta linha
27 | au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
28 |
29 | # Procurar esta linha
30 | filetype plugin indent on
31 |
32 | # Incluir essas linhas logo apos os 'set'
33 | set nu
34 | set cursorline
35 | ```
36 |
37 |
38 |
39 |
40 | Servidor Web
41 |
42 |
44 |
45 |
46 |
47 | Sumário
48 |
49 |
--------------------------------------------------------------------------------
/Aulas/02-ServidorWeb.md:
--------------------------------------------------------------------------------
1 | # Servidor Web – Habilitando a Navegação
2 |
3 |
4 |
5 | # O que é?
6 |
7 | Servidor web pode ser um programa de computador responsável por aceitar pedidos HTTP de clientes, geralmente os navegadores, e servi-los com respostas HTTP, incluindo opcionalmente dados, que geralmente são páginas web, tais como documentos HTML com objetos multimídias embutidos.
8 |
9 | O mais popular, e mais utilizado no mundo, é o servidor **Apache** (software livre).
10 |
11 | A Microsoft possui a sua própria solução denominada **IIS** (Internet Information Services).
12 |
13 |
14 |
15 | ## Instalando e Configurando Apache 2
16 |
17 | #### O Servidor Apache ou Servidor HTTP Apache.
18 |
19 | Antes de qualquer instalação é aconselhável verificar por atualizações nos repositórios.
20 |
21 | ```shell
22 | sudo apt update
23 | sudo apt upgrade
24 | sudo apt install apache2
25 | ```
26 |
27 | ## Configurando Apache 2
28 |
29 | Para fazer configurações mais finas dentro do apache, o arquivo utilizado é:
30 |
31 | ```shell
32 | sudo vim /etc/apache2/apache2.conf
33 | ```
34 |
35 |
36 |
37 |
38 |
39 | Virtual Hosts
40 |
41 |
43 |
44 |
45 |
46 | Sumário
47 |
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## IDS-IFSPVTP
2 | # Implantação de Servidores
3 | Repositório focado em disponibilizar materiais sobre a disciplina de Implantação para os Cursos Analise e Desenvolvimento de Sistemas(descontinuado) e Bacharel em Sistemas de Informação do Instituto Federal de São Paulo, Campus Votuporanga.
4 |
5 | Professor responsável: Ubiratan Zakaib do Nascimento
6 |
--------------------------------------------------------------------------------
/Aulas/010-Dicas_Basica_Docker.md:
--------------------------------------------------------------------------------
1 | # Dicas Básicas sobre Docker
2 |
3 |
2 |
3 |
4 |
5 |
6 |
7 | Até agora tudo foi feito na linha de comando, porém, principalmente nos dias de hoje, não dá para viver mais sem automatizar as coisas, então vamos conhecer o Dockerfile.
8 |
9 | O *dockerfile* nada mais é do que um arquivo onde você determina todos os detalhes do seu *container*, como, por exemplo, a imagem que você vai utilizar, aplicativos que necessitam ser instalados, comandos a serem executados, os volumes que serão montados e assim por diante.
10 |
11 | Nosso primeiro Dockerfile.
12 |
13 | ```bash
14 | mkdir primeiroDockerfile
15 | cd primeiroDockerfile
16 | vim Dockerfile
17 | ```
18 |
19 | Com o arquivo aberto para edição, escrevam as linhas que seguem.
20 |
21 | ```Dockerfile
22 | FROM debian
23 | RUN /bin/echo "OLA DOCKER"
24 | ```
25 |
26 | Salve e sai do editor de texto vim.
27 |
28 | Após a criação do arquivo é necessária criação dessa imagem.
29 |
30 | ```bash
31 | docker build -t nome-imagem:1.0 .
32 | ```
33 |
34 | O ponto "**.**" do final do comando, indica que o Dockerfile a ser executado é o que está na própria pasta que estamos.
35 |
36 | Após a execução, verifique se a imagem foi criada
37 |
38 | ```bash
39 | docker image ls
40 | ```
41 |
42 | ## Criando algo útil
43 |
44 | Vamos agora criar uma imagem que traga um Apache funcionando dentro de um Ubuntu, expondo a porta **80** do *container* e colocando o apache em execução.
45 |
46 | ```dockerfile
47 | FROM ubuntu
48 | LABEL maintainer="@birazn"
49 | RUN apt update
50 | RUN apt install apache2 -y
51 | RUN apt autoclean
52 |
53 | EXPOSE 80
54 | CMD ["apache2ctl", "-D", "FOREGROUND"]
55 | ```
56 |
57 | Após a criação do arquivo é necessária criação dessa imagem.
58 |
59 | ```bash
60 | docker build -t serverweb:1.0 .
61 | ```
62 |
63 | > #### Lembrando que cada Dockerfile deve estar dentro de seu diretório
64 |
65 | Feita a imagem é possivel executar normalmente como vinhamos fazendo com as imagens externas.
66 |
67 | ```bash
68 | docker container run --name MeuServidor -d serverweb:1.0
69 | ```
70 |
71 |
72 |
73 | ---
74 |
75 |
76 |
77 |
78 | Proximo
79 |
80 |
83 |
84 |
85 |
86 | Sumário
87 |
88 |
--------------------------------------------------------------------------------
/Aulas/010-Gerenciando_container.md:
--------------------------------------------------------------------------------
1 | # Gerenciando *container*
2 |
3 |
6 |
7 |
54 |
55 |
56 |
57 | Primeiro Dockerfile
58 |
59 |
60 |
62 |
63 |
64 |
65 | Sumário
66 |
67 |
--------------------------------------------------------------------------------
/Aulas/09-Docker_LinuxMint_21.md:
--------------------------------------------------------------------------------
1 | # Instalando Docker Linux Mint 21
2 |
3 |
6 |
7 |
80 |
81 |
82 |
83 | Gerenciando Container
84 |
85 |
86 |
88 |
89 |
90 |
91 | Sumário
92 |
93 |
--------------------------------------------------------------------------------
/Aulas/06-PostgreSQL.md:
--------------------------------------------------------------------------------
1 | # PostgreSQL
2 |
3 | ## Instalando e Configurando
4 |
5 |
9 |
10 | Fazer a instalação usando o comando abaixo, **verifiquem a versão** do repositório.
11 |
12 | ```shell
13 | sudo apt install postgresql-14 -y
14 | ```
15 |
16 | ## Habilitando usuário no PostgreSQL
17 |
18 | ```shell
19 | sudo -u postgres psql
20 | alter user postgres with encrypted password 'senha_da_nasa';
21 | ```
22 |
23 | ## Habilitando acesso remoto ao servidor PostgreSQL
24 |
25 | #### Abra o arquivo
26 |
27 | ```shell
28 | sudo vim /etc/postgresql/14/main/postgresql.conf
29 | ```
30 |
31 | **Altere a linha**
32 |
33 | ```shell
34 | # listen_addresses = 'localhost' # what IP address(es) to listen on
35 | ```
36 |
37 | **Para**
38 |
39 | ```shell
40 | listen_addresses = '*' # what IP address(es) to listen on
41 | ```
42 |
43 | Retire o comentário e troque o 'localhost' por '*'
44 |
45 | Salve e feche o arquivo
46 |
47 | ------
48 |
49 | #### Abra o arquivo
50 |
51 | ```shell
52 | sudo vim /etc/postgresql/14/main/pg_hba.conf
53 | ```
54 |
55 | **Que por padrão vem**
56 |
57 | ```shell
58 | # "local" is for Unix domain socket connections only
59 | local all all peer
60 | ```
61 |
62 | ```shell
63 | # IPv4 local connections:
64 | host all all 127.0.0.1/32 scram-sha-256
65 | ```
66 |
67 | ```shell
68 | # IPv6 local connections:
69 | host all all ::1/128 scram-sha-256
70 | ```
71 |
72 | ## Altere conforme necessário
73 |
74 | **Assim ficará a regra de liberação:**
75 |
76 | ```shell
77 | # IPv4 local connections:
78 | host all all 0.0.0.0/0 scram-sha-256
79 | ```
80 |
81 | **É possível também liberar o acesso apenas a uma rede específica:**
82 |
83 | ```shell
84 | # IPv4 local connections:
85 | host all all 192.168.1.0/24 scram-sha-256
86 | ```
87 |
88 | ------
89 |
90 | #### Abra o pgadmin4 ou software de preferência e faça a conexão usando as credenciais do servidor configurado.
91 |
92 | #### Não esqueçam de reiniciar o serviço, liberar a porta no grupo de segurança ou na configuração de rede da sua Instância, de acordo com a nuvem utilizada ou VM Local.
93 |
94 | ```bash
95 | sudo service postgresql restart
96 | ```
97 |
98 |
99 |
100 | ---
101 |
102 |
103 |
104 |
105 |
106 | DNS Dinâmico NOIP
107 |
108 |
109 |
111 |
112 |
113 |
114 | Sumário
115 |
116 |
127 |
--------------------------------------------------------------------------------
/Aulas/07-DNS_Dinâmico_NOIP.md:
--------------------------------------------------------------------------------
1 | # Servidor DNS Dinâmico
2 |
3 |
83 |
84 |
85 |
86 | Iniciando com Docker
87 |
88 |
89 |
91 |
92 |
93 |
94 | Sumário
95 |
96 |
--------------------------------------------------------------------------------
/Aulas/03-VirtualHosts.md:
--------------------------------------------------------------------------------
1 | # Apache - VirtualHosts
2 |
4 |
5 |
108 |
109 |
110 |
111 | LAMP
112 |
113 |
115 |
116 |
117 |
118 | Sumário
119 |
120 |
--------------------------------------------------------------------------------
/Aulas/012-Subindo_imagem_para_DockerHub.md:
--------------------------------------------------------------------------------
1 | # Subindo imagem para Docker Hub
2 |
3 | Para enviarmos uma imagem pronta para o docker hub é necessário, alem de todos os procedimentos para geração, "*build*", da imagem, ter uma conta criada.
4 |
5 |
6 |
7 | ## Criar conta no Docker Hub
8 |
9 | ### O que é o Docker Hub
10 |
11 | Dockerhub é um Serviço de Web Hosting compartilhado para imagens Docker, é nele que os **Dockerfiles** disponibilizadas para a comunidade, bem como **imagens oficiais** também são disponibilizadas por grandes grupos para facilitar o trabalho na hora de criar uma infraestrutura Docker.
12 |
13 | Para criar sua conta acesse o site https://hub.docker.com/ e faça seu cadastro.
14 |
15 | 
16 |
17 | Após seu cadastro faça login, na interface terá uma tela sem repositório onde poderá cria-los diretamente pelo sistema ou serão gerados automaticamente durante os "*Puchs*", enviando suas imagens. **Pode ser necessário acessar o e-mail de cadastro para confirmação.**
18 |
19 |
20 |
21 | A conta gratuita possui direito a um repositório privado. Existem planos pagos, caso queira mais repositórios privados, isso geralmente é voltado para empresas que usam Docker em sua infraestrutura.
22 |
23 | Com a sua conta criada é a hora de fazer o primeiro envio de imagem para o repositório, caso ainda não tenha entendido a ideia, é totalmente semelhando ao que faz subindo seus projetos e códigos para o Github.
24 |
25 | Para listar as nossas imagens, use o comando docker images ou docker image ls
26 |
27 | ```bash
28 | docker images
29 | ```
30 |
31 | Obtendo um resultado semelhante a mostrado na imagem.
32 |
33 | 
34 |
35 | Caso ainda não tenha nenhuma imagem criada, vamos criar a primeira, usando procedimento da [aula anterior](https://github.com/birazn/IDS-IFSPVTP/blob/master/Aulas/011-Primeiro_Dockerfile.md) com o Dockerfile.
36 |
37 | ```bash
38 | FROM ubuntu
39 | LABEL maintainer="@birazn"
40 | RUN apt update
41 | RUN apt install apache2 -y
42 | RUN apt autoclean
43 |
44 | EXPOSE 80
45 | CMD ["apache2ctl", "-D", "FOREGROUND"]
46 | ```
47 |
48 | Após a criação do arquivo é necessária criação dessa imagem.
49 |
50 | ```bash
51 | docker build -t serverweb:1.0 .
52 | ```
53 |
54 | > #### Lembrando que cada Dockerfile deve estar dentro de seu diretório
55 |
56 | Feita a imagem é possivel executar normalmente como vinhamos fazendo com as imagens externas, para testar se está tudo correto.
57 |
58 | ```bash
59 | docker container run --name MeuServidor -d serverweb:1.0
60 | ```
61 |
62 | Antes de enviarmos nossa imagem para a nuvem precisamos "taggea-la" com o comando *docker tag*, isso é importante para identificarmos o ID atual da imagem e também para indicarmos o usuário da conta no Docker Hub.
63 |
64 | ```bash
65 | docker tag b6182e430414 SEU_DOCKER_ID/serverweb:1.0
66 | ```
67 |
68 | Faça o login com comando `docker login`, coloque suas credenciais e receberá mensagem "**Login Succeeded*"
69 |
70 | Execute o *push* para "*empurrar*" sua imagem para o repositório.
71 |
72 | ```
73 | docker push birazn/serverweb:1.0
74 | ```
75 |
76 | Será gerada uma mensagem de envio com um hash sha256
77 |
78 | Verifique diretamente no site, se o repositório foi enviado, após isso todos podem usar esta imagem gerada para criar seus *container* baseado na sua infraestrutura.
79 |
80 | ---
81 |
82 |
83 |
84 |
85 | Proximo
86 |
87 |
90 |
91 |
92 |
93 | Sumário
94 |
95 |
--------------------------------------------------------------------------------
/Aulas/05-Paginas_Pessoais.md:
--------------------------------------------------------------------------------
1 | # Configurando Páginas Pessoais
2 |
3 | Bem Vindo!
72 | 73 | 74 | ``` 75 | 76 | ## Configurando permissões 77 | 78 | ```bash 79 | chmod 711 $HOME 80 | chmod -R 755 ~/public_html 81 | ``` 82 | 83 | **$HOME** variável de ambiente que pega pasta base do usuário logado 84 | 85 | ## Automatizando processo para futuros usuários 86 | 87 | Para que o diretório **public_html** seja criado automaticamente quando for criado um novo usuário, é adicionada a entrada em **/etc/skel**, com direitos de acesso exclusivos para próprio utilizador: 88 | 89 | ```bash 90 | sudo mkdir /etc/skel/public_html 91 | sudo chmod 0700 /etc/skel/public_html 92 | ``` 93 | 94 | ## Criando usuário para teste 95 | 96 | ```bash 97 | sudo adduser teste 98 | sudo ls /home/teste 99 | ``` 100 | 101 | Verificar se dentro da pasta do usuário, existe a **'public_html'** configurada na **skel** 102 | 103 | ## Refazendo as etapas, agora para usuário teste 104 | 105 | ```bash 106 | su teste 107 | chmod 711 $HOME 108 | chmod -R 755 ~/public_html 109 | vim ~/public_html/index.html 110 | ``` 111 | 112 | ```html 113 | 114 | 115 | 116 |Bem Vindo!
122 | 123 | 124 | ``` 125 | 126 | --- 127 | 128 |
129 |
130 |
131 |
132 | PostgreSQL
133 |
134 |
137 |
138 |
139 |
140 | Sumário
141 |
142 |
--------------------------------------------------------------------------------
/Aulas/04-LAMP.md:
--------------------------------------------------------------------------------
1 | # Instalando e Configurando LAMP
2 |
3 | 




156 |
157 | Inclua a lista de nomes do banco de dados que deseja ocultar, separados por | [pipe].
158 |
159 |
232 |
233 |
234 |
235 | Páginas Pessoais
236 |
237 |
238 |
240 |
241 |
242 |
243 | Sumário
244 |
245 |
--------------------------------------------------------------------------------
/Aulas/08-Iniciando_com_Docker.md:
--------------------------------------------------------------------------------
1 | # Iniciando com Docker
2 |
3 |
4 |
5 | ## Docker Engine+CLI vs Docker Desktop
6 |
7 | A Engine Docker, roda diretamente e por padrão no Linux como CLI (***Command Line Interface***), da mesma forma como começou por volta de 2013. É importante lembrar que, no manuseio e gerenciamento direto nos servidores em nuvem ou local, isso acontece em CLI. O consumo de recursos usando desta forma é bem inferior, ampliando as possibilidades, mesmo com hardwares mais modestos. Em Linux, podemos executar somente a Engine Docker, o CLI ou as demais ferramentas e plugins existentes instalando manualmente.
8 |
9 | O Docker Desktop trabalha um pouco diferente, criando uma maquina virtual minúscula, dentro do ambiente do Linux, a exemplo do que é feito nos ambientes gráficos Mac e Windows. O motivo de fazer desta forma, ao invés de simplesmente criar uma GUI (***Graphical User Interface***) para gerenciar a Engine Docker, é compatibilizar a experiencia dos usuários nos três principais ambientes do mercado. Lembrando que esta solução trás a facilidade no controle de *containers* locais em ambientes de desenvolvimento.
10 |
11 | Com esta interface do Docker Desktop, fica mais fácil criar, excluir e editar os *containers,* com suas imagens, redes, volumes e demais recursos que podem ser criados.
12 |
13 | Se você é um iniciante em tecnologias de *containers* é interessante que comece com o Docker Deskop, até ter mais conhecimento e prática na utilização do CLI.
14 |
15 | ## Docker Comandos
16 |
17 | Docker é uma plataforma de software que permite criar, testar e implantar aplicativos rapidamente, usando contêineres. Com o Docker, os desenvolvedores podem criar um ambiente de desenvolvimento completo, incluindo servidores, bibliotecas e dependências, em um contêiner e implantá-lo facilmente em qualquer lugar.
18 |
19 | A seguir, estão alguns dos comandos mais comuns do Docker:
20 |
21 | - **docker container run**: Este comando é usado para criar e executar um contêiner a partir de uma imagem do Docker. A sintaxe básica é `docker container run image_name`, onde `image_name` é o nome da imagem que você deseja executar.
22 | - **docker container ls**: Este comando é usado para listar todos os contêineres em execução no sistema. A sintaxe básica é `docker container ls`.
23 | - **docker container ls -a**: Este comando é usado para listar todos os contêineres no sistema. A sintaxe básica é `docker container ls -a`.
24 | - **docker container start/stop/restart/pause/unpause**: Estes comando são usados para iniciar/parar/reiniciar/pausar/despausar um contêiner em execução. A sintaxe básica é `docker container start/stop/restart/pause/unpause container_name`, onde `container_name` é o nome do contêiner que você deseja parar.
25 | - **docker container rm**: Este comando é usado para remover um contêiner. A sintaxe básica é `docker container rm container_name`, onde `container_name` é o nome do contêiner que você deseja remover.
26 | - **docker image rm**: Este comando é usado para remover uma imagem do Docker. A sintaxe básica é `docker image rm image_name`, onde `image_name` é o nome da imagem que você deseja remover, `os containers criados a partir desta imagem precisa estar parados`.
27 | - **docker container inspect:** Este comando é usado para mostrar todas as informações referentes a um determinado container. A sintaxe básica é `docker container inspect image_name`, onde `image_name` é o nome da imagem que você deseja verificar.
28 |
29 | Esses são apenas alguns dos comandos mais comuns do Docker. Existem muitos outros comandos disponíveis, e você pode encontrar mais informações na documentação oficial do Docker.
30 |
31 | ## Documentação de Referência
32 |
33 | ## [Descomplicando Docker](https://livro.descomplicandodocker.com.br/)
34 |
35 | ---
36 |
37 | # Conceito de Container
38 |
39 | ## Isolamento de Recursos
40 |
41 | - CPU
42 | - Memoria
43 | - Discos
44 | - Networks
45 | - Processo
46 | - Filesystens
47 |
48 | ## Principal diferença VM x Container
49 |
50 | - Complexidade
51 | - Vulnerabilidades, quando um patch de segurança precisa ser aplicado, em VMs é necessário atualizar todos os sistemas operacionais instalados, enquanto que Docker, basta aplicar no sistema operacional base.
52 | - Container runtime é nativo linux
53 |
54 | ## Imagem mostrando a diferença
55 |
56 | 
57 |
58 | ## Imagem de Container
59 |
60 | - Somente o necessário para APP funcionar
61 |
62 | ---
63 |
64 | ## Docker [Popularizou a 2ªGeração de Container]
65 |
66 | - LXC LXD DotCloud
67 |
68 | ### Orquestração
69 |
70 | 
71 |
72 | ---
73 |
74 | # Comandos na Prática
75 |
76 | Trabalhando com docker em máquina local.
77 |
78 | O Docker está disponível em duas versões:
79 |
80 | - Docker Community Edition (Docker CE) **[free]**
81 | - Docker Enterprise Edition (Docker EE) **[pago]**
82 |
83 | O processo de instalação é bem simples, usando a referencia do próprio Docker.
84 |
85 | ## Pegar o script e executar em Bash
86 |
87 | ```bash
88 | curl -fsSL https://get.docker.com | bash
89 | ```
90 |
91 | #### A linha executa um *script* que já identifica a sua distro de Linux e faz a instalação de tudo que for necessário.
92 |
93 | > **Para as versões de Linux Mint é necessário utilizar outro processo, verifique o arquivo de instalação exclusivo desta distro.** [Linux Mint 21](https://github.com/birazn/IDS-IFSPVTP/blob/master/Aulas/09-Docker_LinuxMint_21.md)
94 |
95 | ### Após a instalação faça o teste verificando qual versão foi instalada.
96 |
97 | ```bash
98 | sudo docker version
99 | ```
100 |
101 | ### Caso queira utilizar em maquina local sem a necessidade de executar usando **sudo** adicione o usuário no grupo do Docker.
102 |
103 | ```bash
104 | sudo usermod -aG docker $USER
105 | ```
106 |
107 | > **Nos comandos pratico utilizaremos, já tendo o usuário no grupo Docker.**
108 |
109 | #### Verificar se existe container em execução
110 |
111 | ```bash
112 | docker container ls
113 | ```
114 |
115 | #### Verificar se existe container em execução ou parado
116 |
117 | ```bash
118 | docker container ls -a
119 | ```
120 |
121 | #### Vamos rodar nosso primeiro container
122 |
123 | ```bash
124 | docker container run hello-world
125 | ```
126 |
127 | #### Neste processo ele verifica se a imagem do hello-world existe, baixa e executa diretamente, Oferecendo a saída
128 |
129 | ```bash
130 | Unable to find image 'hello-world:latest' locally
131 | latest: Pulling from library/hello-world
132 | 2db29710123e: Pull complete
133 | Digest: sha256:4e83453afed1b4fa1a3500525091dbfca6ce1e66903fd4c01ff015dbcb1ba33e
134 | Status: Downloaded newer image for hello-world:latest
135 |
136 | Hello from Docker!
137 | This message shows that your installation appears to be working correctly.
138 |
139 | To generate this message, Docker took the following steps:
140 |
141 | 1. The Docker client contacted the Docker daemon.
142 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
143 | (amd64)
144 | 3. The Docker daemon created a new container from that image which runs the
145 | executable that produces the output you are currently reading.
146 | 4. The Docker daemon streamed that output to the Docker client, which sent it
147 | to your terminal.
148 |
149 | To try something more ambitious, you can run an Ubuntu container with:
150 | $ docker run -it ubuntu bash
151 |
152 | Share images, automate workflows, and more with a free Docker ID:
153 | https://hub.docker.com/
154 |
155 | For more examples and ideas, visit:
156 | https://docs.docker.com/get-started/
157 | ```
158 |
159 | #### Seguindo a própria indicação do "hello-world", vamos agora executar um container e abrir um terminal interativo para podermos manipular.
160 |
161 | > **O ENTRYPOINT é o principal comando a ser executado quando o container sobe. Ele deve ser, inclusive, um comando que prende o terminal, caso contrário o container apenas sobe e desce não se mantendo útil. Esse comando deve receber um array ou mesmo um parâmetro único. No nosso exemplo será o 'bash'.**
162 |
163 | ```bash
164 | docker run -it ubuntu bash
165 | ```
166 |
167 | Se sairmos do container usando comandos comuns de linux vamos "matar" processo, pois, o que esta em execução no momento é somente o **bash**. Usar o ***exit*** ou ***ctrl+d*** sairá parando a execução do container.
168 |
169 | Para que possamos sair do container, mantendo em execução, usamos o ***ctrl+p+q***.
170 |
171 | Caso eu queira voltar para o container em execução, posso usar:
172 |
173 | ```bash
174 | docker container attach [CONTAINER ID]
175 | ```
176 |
177 | Então o parâmetro ***run*** é utilizado para executar um container, estando ele na maquina ou não.
178 |
179 | Outros parâmetros usam basicamente o mesmo formato, em alguns casos dispensando o ***-it*** do terminal interativo.
180 |
181 | ```bash
182 | # docker container [start/stop/restart] [CONTAINER ID]
183 | docker container start [CONTAINER ID]
184 | docker container stop [CONTAINER ID]
185 | docker container restart [CONTAINER ID]
186 | ```
187 |
188 | > Lembrando, para obter informações dos containers em execução usamos: **docker container ls**
189 |
190 | Temos também o parâmetros ***inspect*** que gera uma saída com todas as informações sobre o container que for chamado.
191 |
192 | ```bash
193 | docker container inspect [CONTAINER ID]
194 | ```
195 |
196 | Podem ser usados também os parâmetros ***pause*** e ***unpause***, que irá pausar ou "despausar" o container.
197 |
198 | Ainda é possível verificar as informações de execução de um container com o parâmetro ***stats***
199 |
200 | ```bash
201 | docker container stats [CONTAINER ID]
202 | ```
203 |
204 | Quando não queremos mais utilizar aquele container podemos exclui-lo com parametro **rm**.
205 |
206 | ```bash
207 | docker container rm [CONTAINER ID]
208 | ```
209 | ---
210 |
211 | # [Livro de referência](https://livro.descomplicandodocker.com.br/chapters/chapter_01.html)
212 |
213 |
214 |
215 |
216 |
217 | Docker Linux Mint 21
218 |
219 |
220 |
222 |
223 |
224 |
225 | Sumário
226 |
227 |
--------------------------------------------------------------------------------