docker 配置参数说明
- 实例
# /usr/src/nodejs/Dockerfile
FROM node:10.0
# 在容器中创建一个目录
RUN mkdir -p /usr/src/nodejs/
# 定位到容器的工作目录
WORKDIR /usr/src/nodejs/
# RUN/COPY 是分层的,package.json 提前
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i
# 把当前目录下的所有文件拷贝到 Image 的 /usr/src/nodejs/ 目录下
COPY . /usr/src/nodejs/
EXPOSE 3000
CMD npm start
- 配置参数说明( DockerFile 学习):
-
FROM:FROM 是构建镜像的基础源镜像,该 Image 文件继承官方的 node image。
详细说明:Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令!它引入一个镜像作为我们要构建镜像的基础层,就好像我们首先要安装好操作系统,才可以在操作系统上面安装软件一样。 -
RUN:后面跟的是在容器中要执行的命令。
详细说明:每一个 RUN 指令都会新建立一层,在其上执行这些命令,我们频繁使用 RUN 指令会创建大量镜像层,然而 Union FS 是有最大层数限制的,不能超过 127 层,而且我们应该把每一层中我用文件清除,比如一些没用的依赖,来防止镜像臃肿。 -
WORKDIR:容器的工作目录
-
COPY:拷贝文件至容器的工作目录下,.dockerignore 指定的文件不会拷贝
-
EXPOSE:将容器内的某个端口导出供外部访问
-
CMD:Dockerfile 执行写一个 CMD 否则后面的会被覆盖,CMD 后面的命令是容器每次启动执行的命令,多个命令之间可以使用 && 链接,例如CMD git pull && npm start
-
ENV(补充) 指令用来设置环境变量,它有两种形式:
ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...
定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
目录构建
-
cd my-nodejs-project
-
创建标签名为dockerstudy的镜像: docker build -t dockerstudy .
build 命令用来制作镜像 -t 是给镜像打标签 -f 参数是指定 Dockerfile 路径,由于我们使用的是默认 Dockerfile 名称,所以可以不同填写该参数。 最后一个.表示 Dockerfile 文件的所在目录, 代表是当前路径,它指定镜像构建的上下文。我们刚才说过,真正制作镜像的是 docker server, 执行 build 命令时,docker client 会将上下文路径下的所有内容打包,然后上传给 docker server。这样当我们要在 Dockerfile 文件中执行 如 COPY 指令,就可以将上下文中的文件复制到镜像中去了。
-
构建目标名称 dockerstudy,是一个镜像
-
一般应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。
- 如果该目录下没有所需文件,那么应该把所需文件复制一份过来。
- 如果目录下有些东西确实不希望构建时传给 Docker引擎,那么可以用.gitignore 一样的语法写一个 .dockerignore。
-
通过镜像 dockerstudy 创建一个容器并运行。
docker run --name dockerstudycontainer -d -p 3000:3000 dockerstudy
- 说明:创建的容器名称是 dockerstudycontainer,你可以理解为 pid,这个名称唯一,创建之后如果不删除会一直存在。
- -p 用来指定端口映射,将容器的端口3000映射到主机3000`端口上,这样就可外部访问了。
创建镜像&容器流程常用命令
- 创建镜像
docker build -t dockerstudy .
- 查看所有镜像
docker images
- 删除执行Dockerfile报错生成的镜像none
docker rmi $(docker images | grep "none" | awk '{print $3}')
- 创建容器并启动
docker run -dit dockerstudy
# -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
# -i 则让容器的标准输入保持打开。
docker run --name dockerstudycontainer -d -p 3000:3000 dockerstudy
# -d 设置容器已进程守护的形式运行
测试 curl localhost:3000
- 查看容器的使用情况
docker stats dockerstudycontainer
- 查看容器/停止容器/删除容器
docker container ls -a ## 查看所有容器,包括当前容器的id镜像
docker container stop <id>
docker container rm <container_name>
- 进入镜像
docker attach <CONTAINER ID>
### 推荐使用exec
docker exec -it <CONTAINER ID> bash
- 日志检查, 查看容器运行日志
docker logs -f <container_id>
常用命令
-
镜像使用命令
docker pull [镜像名称:版本] 拉取镜像 docker images 镜像列表 docker rmi [镜像名称:版本] 删除镜像 docker history [镜像名称] 镜像操作记录 docker tag [镜像名称:版本][新镜像名称:新版本] docker inspect [镜像名称:版本] 查看镜像详细 docker search [关键字] 搜索镜像 docker login 镜像登陆
-
容器命令
docker ps -a 容器列表(所有容器) docker ps 查看所有(运行的)容器 docker exec -ti <id> bash 以 bash 命令进入容器内 docker run -ti --name [容器名称][镜像名称:版本] bash 启动容器并进入 docker logs 查看容器日志 docker top <container_id> 查看容器最近的一个进程 docker run -ti --name [容器名称] -p 8080:80 [镜像名称:版本] bash 端口映射 docker rm <container_id> 删除容器 docker stop <container_id> 停止容器 docker start <container_id> 开启容器 docker restart <container_id> 重启容器 docker inspect <container_id> 查看容器详情 docker commit [容器名称] my_image:v1.0 容器提交为新的镜像
网友评论