核心概念
- 仓库
- 镜像
- 容器
仓库中存储镜像,镜像生成容器
安装
一键安装(推荐)
bashyum 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
bashsudo 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
配置镜像加速
bashsudo 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
搭建私有仓库
bashdocker run -d -p 5000:5000 --restart=always --name registry registry
bash#用 curl 查看仓库中的镜像 curl 127.0.0.1:5000/v2/_catalog
常用命令
进程
- systemctl stop docker
- systemctl restart docker
- systemctl status docker
- systemctl enable docker
- systemctl start docker
镜像
- 所有镜像
docker images
- 删除镜像
docker rmi image_id
容器
- 暂停容器
docker stop container_id
- 删除容器
docker rm container_id
- 启动已被停止的容器
docker start container_id
- 停止运行中的容器
docker stop container_id
- 重启容器
docker restart container_id
- 所有正在运行的容器
docker ps
- 所有容器
docker ps -a
- 启动容器
docker start container_id
其他
- 查看端口
docker port container_id
- 删除无意义的镜像
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 |
dockerfileFROM ubuntu:bionic-20190612 LABEL maintainer xxxx@xxxx.com 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
dockerfileversion: "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"