Docker基础

2021-04-01  本文已影响0人  renyjenny

一、软件部署的发展

1.1 直接部署

在物理服务器上直接安装系统,部署应用
缺点

1.2 虚拟机部署

在主机上部署虚拟机,在虚拟机中部署应用。


image.png

虚拟机架构(从下到上)

优点

缺点

1.3 容器化部署

什么是容器

容器 虚拟机
应用程序层的抽象,将代码和依赖项一起打包 物理硬件的抽象
多个容器共享OS内核 需要启动单独的VMOS
仅有一个物理机的OS,共享资源 多个OS,独享资源
可运行数百个容器 最多几十个VM
轻量 包含OS、二进制文件,最少几个GB
启动快(秒级) 启动慢
启动应用程序更多,消耗资源更少
每个容器在用户空间中进程隔离

二、Docker

2.1 使用Docker进行部署

image.png

2.2 Docker架构

image.png

Docker使用C/S架构。用户在客户端输入docker命令,客户端将命令发送到docker daemon,完成docker的各种操作。

2.2.1 Docker Client

docker客户端通过docker api或其他方式与docker daemon进行通信,进而操作docker。

2.2.2 Docker Daemon

docker守护程序可以监听docker客户端的命令,以及管理docker对象,例如镜像、容器、网络等等。

2.2.3 Docker Registry

docker仓库存储docker镜像,docker hub是所有人都可访问的公共仓库,用户可从仓库中拉取镜像或推送镜像到仓库。

2.2.4 Docker对象

镜像
Docker镜像是创建容器的模板,可通过Dockerfile创建镜像。同一个软件可有不同版本的镜像,用tag表示镜像版本。

容器
容器是运行中的镜像。容器可以被创建、启动、停止、删除、暂停等。用户还可以使用docker compose来定义、运行管理多个容器。

三、Docker的基本操作

3.1安装Docker

# centos
yum install docker-ce-18.03.1.ce
# 启动docker
systemctl start docker
# 加入开机启动
systemctl enable docker

3.2镜像

镜像常用操作命令:

操作 说明
docker search 查询镜像
docker pull 从仓库获取所需镜像
docker images 显示本地已有镜像
docker save -o XXX.tar img_name 导出镜像到本地文件
docker rmi img_name 删除本地镜像
docker builid 创建镜像

创建镜像

创建镜像时需要用到dockerfile文件,该文件按照步骤列下了创建镜像时的所有命令。例:

# syntax=docker/dockerfile:1
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

3.3容器

镜像生成的运行实例,docker中每个容器之间是互相隔离的,它可以被启用、开始、停止、删除

容器的生命周期

参考文章《Docker容器的生命周期管理》

状态 说明 操作
created 已创建但未启动 docker create
running 运行中 docker run/docker start/docker restart/docker unpause
stopped 停止状态 docker kill/ docker stop
paused 暂停状态 docker pause
deleted 删除状态 docker rm

常用命令

操作 说明
docker run img_name 创建并启动容器(-d 后台运行 -v 目录映射 -p 端口映射 )
docker start 启动已终止的容器
docker ps 查看容器信息(-a:查看所有容器)
docker stop 终止容器
docker exec -it con_name bash 进入容器
docker rm 删除容器

docker compose

一个系统通常含有多个服务,使用docker compose可以一次性管理多个容器。

安装docker compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 检查是否安装成功
docker-compose --version

编写docker-compose.yml文件
根据容器的运行命令编写其docker-compose.yml文件。例如,我们要部署两个服务,一个是应用程序,其运行命令为:

docker run -dp 3000:3000 \
  -w /app -v "$(pwd):/app" \
  --network todo-app \
  -e MYSQL_HOST=mysql \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=secret \
  -e MYSQL_DB=todos \
  node:12-alpine \
  sh -c "yarn install && yarn run dev"

另一个是mysql,其运行命令为:

docker run -d \
  --network todo-app --network-alias mysql \
  -v todo-mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=todos \
  mysql:5.7

根据运行命令编写docker-compose.yml文件。

version: "3.7"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

启动多容器
docker-compose up -d

其他操作
停止docker-compose -f docker-compose.yml stop 服务名

上一篇 下一篇

猜你喜欢

热点阅读