Docker的使用及配置

1,043 阅读4分钟

我正在参加「掘金·启航计划」

为组内新员工写的基本的docker使用小册

安装配置

整体步骤

  1. 下载

  2. 运行docker及配置

  3. 拉取镜像(例:docker pull centos:latest

  4. 运行镜像(例:docker run -p <port>:80 --name <name> -i -t <docker image name> /bin/bash

    -i -t :运行并进入docker容器

  5. 安个nginxrpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    或者在步骤6中直接打进镜像里

  6. docker build + Dockerfile构建:编辑Dockerfile

    FROM node:16 as build
    WORKDIR /Users/zhangmingyuan/WorkSpace/WorkSpace_VUE/vue-ts/vite-js
    COPY package.json ./
    COPY index.html ./
    COPY vite.config.js ./
    COPY src src/
    COPY public public
    RUN npm install
    RUN npm run build
    
    FROM nginx:alpine
    COPY --from=build /Users/zhangmingyuan/WorkSpace/WorkSpace_VUE/vue-ts/vite-js/dist/ /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx","-g","daemon off;"]
    
  7. 执行build构建:docker build -t [image name] .

  8. 运行起来就OK了:docker run -d -p [port]:[port] [images]

安装及运行命令

linux下使用

准备(可以不做)

yum update
yum install epel-release -y
yum clean all

centos下载

yum install docker -y

检查下

docker -v

设置开机自启

systemctl enable docker.service

启/停/重启/看状态

systemctl start/stop/restart/status docker.service

注意事项

windows

  • windows需要专业版
  • 需要开启hyper-v服务

Dockerfile

可以理解为命令+参数的格式,当然还可以写注释

常用命令

  • FROMFROM [image name]

    • FROM命令必须是Dockerfile的首个命令
    • 如果同一个DockerFile创建多个镜像时,可使用多个FROM指令(每个镜像一次)
  • MAINTAINERMAINTAINER [name]

    指定使用者的简介

  • RUNRUN [command]

    • Dockerfile执行命令的核心部分。
    • 接受命令作为参数并用于创建镜像。
    • 不同于CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。
    • 格式为Run 或者Run [“executable” ,”Param1”, “param2”]
  • USERUSER [UID]

    • 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户
  • CMDCMD application "argument", "argument", ...

    • 支持三种格式:
      • CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
      • CMD command param1 param2,在/bin/sh上执行
      • CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
  • WORKDIR

    • 用于设置CMD指明的命令的运行目录,为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录
    • 格式为 WORKDIR /path/to/workdir 。
    • 可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
  • ADD

    • 基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。
    • 两个参数是源和目标。
    • 如果源是一个URL,那该URL的内容将被下载并复制到容器中。如果文件是可识别的压缩格式,则docker会帮忙解压缩

使用规则

  • #第一行必须指令基于的基础镜像,例如:FROM ubutu
  • CMD在shell终端运行;RUN使用exec运行
  • run指令在当前基础镜像执行,并且会提交新镜像
  • RUN命令可以使用/换行
  • 每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。

Docker常用命令

#查看所有镜像
docker images
#查看所有容器运行状态
docker ps -a 
docker container ls -all

#删除一个imageid的镜像
docker rmi [IMAE_ID] 
#删除一个containerid的容器(实例)
docker rm 6f0c67de4b72 
#删除所有镜像
sudo docker rmi $(docker images -q) 
#删除所有容器
docker rm $(sudo docker ps -a -q)

容器日志
#查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2022-06-08" --tail=100 CONTAINER_ID
#查看某时间之后的日志:
docker logs -t --since="2022-06-08" CONTAINER_ID
#查看某时间段日志:
docker logs -t --since="2022-06-08" --until "2022-06-09" CONTAINER_ID
#查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
# 设置启动策略, docker 容器自动启动(在容器退出或断电开机后,docker可以通过在容器创建时的 --restart 来指定重启策略)
#--restart 参数:
# no,不自动重启容器. (默认值)
# on-failure, 容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:10
# unless-stopped, 在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算
# always, 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
docker run --restart always -it -p {本机端口}:{容器端口} {镜像名称}
#如果容器已经被创建,但处于停止状态,重新启动:
docker start {容器ID}
#如果容器已经被创建,我们想要修改容器的重启策略
docker update --restart always {容器ID}

常见错误

  • ERROR [internal] load metadata for docker.io/library/nginx:alpine /ERROR [internal] load metadata for docker.io/library/node:16

    Docker Engine中修改"features": {"buildkit": false}

  • Docker build的命令注意后面有一个.,实际上是一个路径