Registro de aprendizagem do Docker (para docker-compose)

Docker

  • Site oficial: https://www.docker.com/
  • Documentação: https://docs.docker.com/
  • Armazém: https://hub.docker.com/

A composição do Docker
Insira a descrição da imagem aqui

  1. Espelho (imagens)
  2. Recipiente
  3. Armazém (registro)

1. Instale o Docker

#1.卸载原有的Docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2.安装yum-utils软件包
sudo yum install -y yum-utils
#3.设置稳定的存储库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
#4.安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
#5.启动Docker
sudo systemctl start docker
#6.查看版本
docker version
-------------------------------------------
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:25:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

#7.测试Docker
sudo docker run hello-world
-------------------------------------------
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2. O princípio subjacente

  • Cliente Docker : também conhecido como cliente Docker. Na verdade, o Docker fornece ferramentas de interface de linha de comando, que é a forma principal de muitos usuários do Docker interagirem com o Docker.

  • Docker daemon : é um componente de servidor executado como um serviço de background do Linux. É o principal processo de background do Docker. Também o chamamos de daemon. Ele é responsável por responder às solicitações do Docker Client e, em seguida, traduzir essas solicitações em chamadas de sistema para concluir as operações de gerenciamento de contêiner.

  • Imagem Docker : pode ser considerado um sistema de arquivos especial. Além de fornecer os programas, bibliotecas, recursos, configuração e outros arquivos necessários para executar o contêiner, também contém alguns parâmetros (volume anônimo, variáveis ​​de ambiente, usuário Esperar). A imagem não contém nenhum dado dinâmico e seu conteúdo não será alterado após sua criação. Podemos considerar a imagem do Docker como um modelo somente leitura, por meio do qual os contêineres do Docker podem ser criados.

  • Registro do Docker : é um repositório para armazenar imagens do docker

  • Docker Container : é a instância em execução da imagem Docker.É o lugar onde os programas do projeto são realmente executados, os recursos do sistema são consumidos e os serviços são fornecidos.

3. Contêineres e máquinas virtuais

Insira a descrição da imagem aqui

Comandos Docker

1. Comandos de ajuda

docker version	#版本信息
docker info		#详细信息
docker 命令 --help	#帮助信息

2. Comando de espelho

docker images	#查看镜像
--------------------------------
	#REPOSITORY:镜像名称          
	#TAG:镜像版本                 
	#IMAGE ID:镜像ID            
	#CREATED:镜像创建时间             
	#SIZE:镜像大小
docker images -a	#显示所有信息
docker images -q	#只显示镜像ID
docker search --help	#搜索命令
-----------------------------------
Usage:	docker search [可选参数] TERM
Options:	#可选参数
  -f, --filter filter   根据提供的条件过滤输出
      --format string   使用Go模板进行打印搜索
      --limit int       最大搜索结果数(默认25)
      --no-trunc        不要截断输出
docker pull --help	#镜像下载
----------------------------------
Usage:	docker pull [可选参数] NAME[:版本号]
Options:
  -a, --all-tags                下载存储库中所有标记的图像
      --disable-content-trust   跳过图像验证(默认为true)
  -q, --quiet                   禁止详细输出
----------------------------------------------
[root@wdd ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql#版本信息
afb6ec6fdc1c: Pull complete #分层下载
0bdc5971ba40: Pull complete 
97ae94a2c729: Pull complete 
f777521d340e: Pull complete 
1393ff7fc871: Pull complete 
a499b89994d9: Pull complete 
7ebe8eefbafe: Pull complete 
4eec965ae405: Pull complete 
a531a782d709: Pull complete 
10e94c02b508: Pull complete 
799a94b968ef: Pull complete 
Digest: sha256:5c9fd7949bc0f076429fa2c40d0e7406e095bdb5216a923257b31972a6f3ae4f
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7#真实地址
docker rmi --help	#镜像删除
Usage:	docker rmi [可选参数] IMAGE [镜像名。。。]
Options:
  -f, --force      强制删除镜像
      --no-prune   不要删除未标记的父级
---------------------------------------------------------
docker rmi -f b84d68d0a7db	#删除镜像
docker rmi -f id1 id2 id3 #批量删除镜像
docker rmi -f $(docker images -aq)	#删除所有镜像

3. Comando do contêiner

docker run --help	#运行镜像
Usage:	docker run [可选参数] IMAGE [命令] [参数]
--name  容器姓名区分
-d		后台运行
-p		指定端口映射
-P		随机端口映射
-it		交互模式运行,进入容器内部
-v		绑定挂载卷
-e		环境配置,运行内存等
#测试
docker pull centos

#启动
docker run -it 470671670cac /bin/bash

#容器停止并退出
exit

#容器不停止退出
ctrl+P+Q

#显示容器
docker ps 【参数】
-a	#显示所有容器包括历史容器
-n=#参数限定
-q	#只显示ID

#删除容器
docker rm id	#删除容器,不能删除
docker rm -f $(docker ps -aq)	#删除所有容器
docker ps -a -q|xrags docker rm	#删除所有容器

#容器启动和停止
docker strat id	#启动容器
docker restart id	#重启容器
docker stop id	#停止容器
docker kill id	#强制停止容器

4. Comandos comuns

#后台运行容器
docker run -d id
	#docker ps 时容器停止了,后台运行必须有一个前台进程,没有即停止
	
#查看日志
docker logs -t -f --tail 行数 id

#容器进程
docker top id

#容器元数据
docker inspect id

#进入容器
docker exec -it id /bin/bash	#交互模式进入正在运行的容器中,进入后开启新的终端
docker attach id	#进入容器正在执行的终端,没有创建新的进程

#拷贝命令
docker cp 

Princípio de espelhamento do Docker

1. Espelho

O Mirror é um pacote de software independente, executável leve, usado para empacotar o ambiente operacional do software e o software de desenvolvimento com base no ambiente operacional, que contém

Todo o conteúdo necessário para um pedaço de software, incluindo código, tempo de execução, bibliotecas, variáveis ​​de ambiente e arquivos de configuração.

  • Obtenha a imagem espelhada: armazém remoto + compartilhamento de amigos + self-made

2. Sistema de Arquivos Union (UnionFS)

  • Union File System (UnionFS) é um sistema de arquivos hierárquico, leve e de alto desempenho, que suporta a modificação do sistema de arquivos como uma melhoria única.

    Com camadas de sobreposições, diferentes diretórios podem ser montados no mesmo sistema de arquivos virtual.

  • O sistema de arquivos Union é a base das imagens do Docker.

  • O espelhamento pode ser integrado por meio de camadas. Com base no espelhamento básico, vários espelhos de aplicativos específicos podem ser feitos.

  • Recurso: carregue vários sistemas de arquivos ao mesmo tempo, mas de fora, apenas um sistema de arquivos pode ser visto. O carregamento conjunto empilhará todas as camadas dos sistemas de arquivos

    Juntos, o sistema de arquivos final conterá todos os arquivos e diretórios subjacentes.

3. Princípio de carregamento de imagem do Docker

  • A imagem docker é, na verdade, composta de um sistema de arquivos em camadas, este sistema de arquivos em camadas UnionFS.

  • bootfs (sistema de arquivos de boot) inclui principalmente bootloader e kernel, bootloader é principalmente boot loading kernel, Linux acabou de iniciar

    Quando o sistema de arquivos bootfs é carregado, a camada inferior da imagem Docker é bootfs. Esta camada é a mesma do nosso sistema Linux / Unix típico

    , Incluindo o carregador de boot e o kernel. Quando o carregamento da inicialização é concluído, todo o kernel é armazenado na memória. Neste momento, o direito de usar a memória foi alterado pelo bootfs

    Transfira para o kernel, neste momento o sistema também desinstalará o bootfs.

  • roorfs (sistema de arquivos raiz), além do bootfs. Incluídos estão / dev, / proc, / bin, / etx e outros padrões em um sistema Linux típico

  • Diretórios e arquivos padrão. Rootfs é uma variedade de diferentes distribuições de sistema operacional. Como Ubuntu, Centos e assim por diante.

  • Para um sistema operacional simplificado, rootfs pode ser muito pequeno e só precisa incluir os comandos, ferramentas e bibliotecas mais básicos, porque a camada inferior usa diretamente o kernel Host (host) e você só precisa fornecer rootfs. Para diferentes distribuições do Linux, bootfs é basicamente o mesmo, e rootfs será diferente, portanto, distribuições diferentes podem compartilhar bootfs.
    Insira a descrição da imagem aqui

4. Imagem do Docker

Insira a descrição da imagem aqui

  • Um dos maiores benefícios de usar essa estrutura em camadas é compartilhar recursos. Por exemplo, se várias imagens forem criadas a partir da mesma imagem de base, o host

    A máquina só precisa salvar uma imagem de base no disco,

  • Ao mesmo tempo, apenas uma imagem de base precisa ser carregada na memória para servir a todos os contêineres. E cada camada do espelho pode ser compartilhada.

  • As imagens do Docker são todas somente leitura. Quando o contêiner é iniciado, uma nova camada gravável é carregada na parte superior da imagem. Esta camada é geralmente chamada de "contêiner

    "Camada" e "camada de contêiner" são chamadas de camada de espelho.

5. Espelho de confirmação

docker commit [可选参数] 容器id [新镜像名[:版本]]
-a, --author string    作者
-c, --change list      将Dockerfile指令应用于创建的映像
-m, --message string   提交信息
-p, --pause            提交期间暂停容器(默认为true)

Volume de dados do contêiner

** Persistência de dados do Docker: ** os dados gerados pelo contêiner durante a operação não serão gravados na imagem. Reiniciar um novo contêiner com esta imagem inicializará a imagem e adicionará uma nova camada de leitura e gravação para salvar os dados . Se você deseja obter a persistência dos dados, o Docker fornece um volume de dados ou volume de contêiner de dados para resolver o problema.Além disso, você pode enviar uma nova imagem por meio de commit para salvar os dados gerados.

1. Vantagens:

  1. Ignorar o sistema de "copiar e gravar" para [alcançar o desempenho do disco local IO], (como executar um contêiner e modificar o conteúdo do volume de dados no contêiner mudará diretamente o conteúdo do volume de dados no host, portanto, é um disco local Desempenho de E / S, em vez de primeiro gravar uma cópia no contêiner e, finalmente, copiar o conteúdo modificado no contêiner para sincronização.)
  2. Ignorando o sistema de "copiar e gravar", alguns arquivos [não precisam ser empacotados no docker commit] entram no arquivo espelho.
  3. O volume de dados pode compartilhar e reutilizar dados [entre contêineres]
  4. O volume de dados pode compartilhar dados entre [Host] e [Container]
  5. As alterações do volume de dados são [modificação direta]
  6. Os volumes de dados são [persistentes] até que não haja nenhum dispositivo para usá-los. Mesmo se o contêiner de volume de dados original ou o contêiner de volume de dados de camada intermediária for excluído, desde que haja outros contêineres usando o volume de dados, os dados internos não serão perdidos.

2. Comando mount -v

docker run 【-d】【 -v 宿主机目录:容器目录】 【--name 容器名】 【-p 宿主端口:容器端口】 镜像ID
#启动mysql

#查看元数据
docker inspect 970ffe5b3623 
-----------------------------------------
"Mounts": [		#挂载
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/conf",	#宿主机目录
                "Destination": "/etc/mysql/conf.d",	#容器目录,Mysql的配置文件
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/logs",
                "Destination": "/logs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
    
    
                "Type": "bind",
                "Source": "/root/mysql/data",
                "Destination": "/var/lib/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

3. Montagem nomeada e anônima

#匿名挂载 -v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的卷信息
docker vplume ls
------------------------------
DRIVER              VOLUME NAME
local				9f38292179faal78afcce54d80be99d4ddd68c91d2a68870bcece72d2b7ed061

#具名挂载 -v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

docker volume Is
DRIVER              VOLUME NAME
local				juming-nginx

docker volume inspect juming-nginx
------------------------------------
Mountpoint:“/var/Lib/docker/voLumes/juming-nginx/_data”
#docker容器内没有指定目录时默认在 /var/Lib/docker/voLumes/xxx/_data
-v 容器路径	#匿名挂载
-v 卷名:容器路径	#具名挂载
-v /路径:容器路径	#路径挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

#ro readonly 只读权限-----只能通过宿主机操作,容器内无法操作
#rw readwrite	可读可写权限

4. Montagem do Dockerfile

vim dockerfile1
FROM centos
VOLUME ["volume1","volume1"]	#匿名挂载
CMD echo "-----end------"
CMD /bin/bash
docker build -f /home/dockerfile1 -t wddcentos:1.0 .#创建镜像

5. Sincronização do volume de dados com diferentes contêineres

Contêiner pai: contêiner de volume de dados

--volume-from #数据备份,双向拷贝
docker -it --name docker01 970ffe5b3623 #父容器
docker -it --name docker02 --volumes-from docker01 970ffe5b3623	#挂载docker01数据
docker -it --name docker03 --volumes-from docker01 970ffe5b3623	#挂载docker01数据
#docker01 docker02 docker03 挂载卷数据共享,持久化保存,删除某个容器数据仍存在

DockerFile

Dockerfile é um arquivo de texto usado para construir um espelho. O texto contém instruções e instruções para construir um espelho.

  • Criar arquivo-vim arquivo-docker build-docker run-docker commit-docker push

1. comando dockerfile

  • Manter a capitalização da palavra-chave

  • Cada comando é uma camada

  • #Comente

  • DockerFile-Docker image-Docker container

FROM 	#基础容器
MAINTAINER	#作者 姓名+邮箱
RUN		#用于执行后面跟着的命令行命令
ADD		#
WORKDIR	#镜像的工作目录
VOLUME	#挂载的目录
EXPOSE	#暴漏端口配置
CMD		#指定这个容据启动的时候要运行的今,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候运行的指今,可追加命令
ONBUILD	#用于延迟构建命令的执行,新的镜像使用镜像时,执行命令

Insira a descrição da imagem aqui

Docker-Compose

Gerencie imagens gravando arquivos docker-compose.yml

docker-compose up -d #启动docker-compose
docker-compose down  #关闭docker容器
docker-compose restart #重启docker容器
docker-compose up -d --build  #从新构建docker镜像

docker manage redis

version: '3'
services:
  redis:
    restart: always
    image: redis:latest
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./logs:/logs
    command:
      redis-server /usr/local/redis/redis.conf"

docker-compose up -d
#Iniciar docker-compose down #Fechar docker container
docker-compose restart #Restart docker container
docker-compose up -d --build #Construir imagem docker de novo

docker manage redis

version: '3'
services:
  redis:
    restart: always
    image: redis:latest
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./logs:/logs
    command:
      redis-server /usr/local/redis/redis.conf"

Acho que você gosta

Origin blog.csdn.net/qq_38473355/article/details/108705122
Recomendado
Clasificación