够用的Docker知识

    170

核心概念

  1. 仓库
  2. 镜像
  3. 容器

仓库中存储镜像,镜像生成容器

安装

一键安装(推荐)

yum update
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker # 启动docker
systemctl enable docker # 开机自动启动docker 
systemctl restart docker # 重启docker

aws机器安装

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html

sudo yum update -y
sudo amazon-linux-extras install docker
sudo service docker start
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
docker info

手动安装(自动安装失败时用此方案)

#step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#Step 2: 添加软件源信息&使用阿里云镜像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#Step 3: 更新缓存并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
#Step 4: 开启Docker服务
sudo systemctl start docker
sudo systemctl enable docker

配置镜像加速

https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

搭建私有仓库

docker run -d -p 5000:5000 --restart=always --name registry registry
#用 curl 查看仓库中的镜像
curl 127.0.0.1:5000/v2/_catalog

常用命令

进程

  1. systemctl stop docker
  2. systemctl restart docker
  3. systemctl status docker
  4. systemctl enable docker
  5. systemctl start docker

镜像

  1. 所有镜像 docker images
  2. 删除镜像 docker rmi image_id

容器

  1. 暂停容器 docker stop container_id
  2. 删除容器 docker rm container_id
  3. 启动已被停止的容器 docker start container_id
  4. 停止运行中的容器 docker stop container_id
  5. 重启容器 docker restart container_id
  6. 所有正在运行的容器 docker ps
  7. 所有容器 docker ps -a
  8. 启动容器 docker start container_id

其他

  1. 查看端口 docker port container_id
  2. 删除无意义的镜像 docker image prune

DOCKERFILE

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

关键字 作用 备注 关键字
FROM 指定父镜像 指定dockerfile基于那个image构建 FROM
MAINTAINER 作者信息 用来标明这个dockerfile谁写的 MAINTAINER
LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 LABEL
RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] RUN
CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] CMD
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用 ENTRYPOINT
COPY 复制文件 build的时候复制文件到image中 COPY
ADD 添加文件 build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 ADD
ENV 环境变量 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value ENV
ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 ARG
VOLUME 定义外部可以挂载的数据卷 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] VOLUME
EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp EXPOSE
WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 WORKDIR
USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 USER
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 HEALTHCHECK
ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 ONBUILD
STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 STOPSIGNAL
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
FROM ubuntu:bionic-20190612

LABEL maintainer [email protected]

ENV MYSQL_USER=mysql \
    MYSQL_VERSION=5.7 \
    MYSQL_DATA_DIR=/var/lib/mysql \
    MYSQL_RUN_DIR=/run/mysqld \
    MYSQL_LOG_DIR=/var/log/mysql

RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server=${MYSQL_VERSION}* \
 && rm -rf ${MYSQL_DATA_DIR} \
 && rm -rf /var/lib/apt/lists/*

EXPOSE 3306/tcp

CMD ["/usr/bin/mysqld_safe"]

docker build

docker-compose

官方文档

安装

# 下载
curl -SL https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 赋权
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose version

独立版 Compose 使用破折号compose语法,其他使用空格语法

常用命令

#查看帮助
docker-compose -h

#-f  指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d 

#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d

#停用移除所有容器以及网络相关
docker-compose down

#查看服务容器的输出
docker-compose logs

#列出项目中目前的所有容器
docker-compose ps

#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build

#拉取服务依赖的镜像
docker-compose pull

#重启项目中的服务
docker-compose restart

#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm 

#在指定服务上执行一个命令。
docker-compose run ubuntu ping docker.com

#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2

#启动已经存在的服务容器。
docker-compose start

#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop
version: "3"

services:
  doc:
    restart: always
    image: registry.cn-shanghai.aliyuncs.com/zzf2001/bot-doc:latest
    ports:
      - "9060:80"
  vue:
    restart: always
    image: registry.cn-shanghai.aliyuncs.com/zzf2001/bot-vue2:latest
    ports:
      - "9061:80"
  react:
    restart: always
    image: registry.cn-shanghai.aliyuncs.com/zzf2001/bot-react:latest
    ports:
      - "9062:80"

参考文章

  1. https://yeasy.gitbook.io/docker_practice/
评论区
共有评论 0
暂无评论