够用的Docker知识

    0

核心概念

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

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

安装

一键安装(推荐)

bash
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

bash
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

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

bash
#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

bash
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

搭建私有仓库

bash
docker run -d -p 5000:5000 --restart=always --name registry registry
bash
#用 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=valueENV
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数ARG
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]VOLUME
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udpEXPOSE
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
dockerfile
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

官方文档

安装

bash
# 下载 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语法,其他使用空格语法

常用命令

bash
#查看帮助 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
dockerfile
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
暂无评论