我正在参加「掘金·启航计划」
为组内新员工写的基本的docker使用小册
安装配置
整体步骤
-
下载
-
运行docker及配置
-
拉取镜像(例:
docker pull centos:latest) -
运行镜像(例:
docker run -p <port>:80 --name <name> -i -t <docker image name> /bin/bash)-i -t :运行并进入docker容器
-
安个nginx
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm或者在
步骤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;"] -
执行build构建:
docker build -t [image name] . -
运行起来就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
可以理解为命令+参数的格式,当然还可以写注释
常用命令
-
FROM:
FROM [image name]- FROM命令必须是Dockerfile的首个命令
- 如果同一个DockerFile创建多个镜像时,可使用多个FROM指令(每个镜像一次)
-
MAINTAINER:
MAINTAINER [name]指定使用者的简介
-
RUN:
RUN [command]- Dockerfile执行命令的核心部分。
- 接受命令作为参数并用于创建镜像。
- 不同于
CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。 - 格式为Run 或者
Run [“executable” ,”Param1”, “param2”]
-
USER:
USER [UID]- 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户
-
CMD:
CMD 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的命令注意后面有一个.,实际上是一个路径