Skip to content

Latest commit

 

History

History
75 lines (46 loc) · 4.31 KB

03.learn docker1.md

File metadata and controls

75 lines (46 loc) · 4.31 KB
  • 昨天是周五,本来应该要做 share 的,但是我没有理解 polyaxon 究竟是如何运行的,无法跟大家很好的分享。虽然 polyaxon 平台是搭建起来了,k8s 也运行起来了,但是我实在是不知道应该怎么自己新建一个实验,所以目前的状态真的是只有工具,还不会用。我还至少需要对 docker 和 kubernetes 有初步的了解,会基本的命令才行。所以周五的主要在学习 docker 的使用。在这里做一下记录。

  • 基本指令

  • 搜索镜像文件 docker search redis #这里以 redis 镜像为例子

  • 后台运行镜像文件 docker run -d redis:latest #这里 -d 表示在后台运行

  • 列出所有运行的容器 docker ps #有些类似 linux 自带的 ps 命令

  • 指定容器别名,增加容器端口映射 docker run -d --name redisHostPort -p 6379:6379 redis:latest #暴露端口:容器内端口

  • 只指定容器内端口,随机映射出来 docker run -d --name redisDynamic -p 6379 redis:latest #不指定暴露端口,随机暴露

  • 查找容器暴露出来的端口 docker port redisDynamic 6379 #指定容器名字和容器内的端口,查找暴露出来的端口

  • 挂载目录到容器内 docker run -d --name redisMapped -v /tmp/test/docker/mount:/data redis #-v 挂载表示卷 volume

  • 占位符来挂载目录 docker run -d --name redisMapped -v "$PWD/data":/data redis #$PWD 是占位符

  • 输出在容器内运行的命令结果 docker run ubuntu ps #直接输出 ubuntu 容器内执行 ps 指令的结果

  • 进入容器内执行交互式命令 docker run -it ubuntu bash #这里 -it 是表示交互 iteract

  • 创建 Dockerfile,根据其内容来构建镜像

  • 以下双引号里面的内容是某个 Dockerfile 文本文件的内容

" FROM nginx:alpine #指明了基本镜像是 nginx COPY index.html /usr/share/nginx/html/index.html #将 Dockerfile 所在文件夹的 index.html 文件复制到容器中的那个位置 EXPOSE 80 #指明了容器中暴露哪个端口(不写也行这个是默认值) CMD ["nginx", "-g", "daemon off;"] #表示容器启动之后运行的命令(这里启动 nginx 不写也行,默认启动的),格式是 ["cmd", "-a", "arga value", "-b", "argb-value"] "

  • 短短几行,已经足够构建一个 nginx 容器并且将 index.html 文件复制过去展示 web 主页了。

  • 构建镜像 docker build -t webserver-image:v1 . #这里 -t 表示使用标签 tag,后面的 . 表示使用的 Dockerfile 在当前目录,构建成功的镜像存放在本地的 docker 引擎仓库中

  • 查看本地的镜像 docker images #如果刚刚构建了上面那个镜像,这里也会看到它

  • 运行镜像 docker run -d -p 80:80 webserver-image:v1 #后台指定端口运行自己刚刚构建的镜像

  • 另一个例子,一个用来构建 Node.js 容器的 Dcokerfile 文件的内容

" FROM node:7-alpine #指明了基本镜像是 Node RUN mkdir -p /src/app #在容器构建过程中运行的命令 WORKDIR /src/app #声明了后续命令的工作目录 COPY package.json /src/app/package.json #复制文件 RUN npm install #在容器构建过程中运行的命令 COPY . /src/app #复制目录 EXPOSE 3000 #指明了容器中暴露哪个端口(不写也行这个是默认值) CMD [ "npm", "start" ] #表示容器启动之后运行的命令(这里启动 npm 不写也行,默认启动的) "

  • 这个 Dockerfile 文件稍微复杂了一点,npm我也是不了解啊。

  • 构建镜像 docker build -t my-nodejs-app .

  • 指定运行环境 docker run -d --name my -e NODE_ENV=production -p 3000:3000 my-nodejs-app #-e环境变量 environment

  • 上面的两个 Dockerfile 中都有执行命令的指令,CMD 和 RUN 有什么不同?我现在还不太理解,从网上摘录一些内容先放着。

"在创建Dockerfile的时候,RUN和CMD都是很重要的命令。它们各自的作用分别如下:

RUN RUN命令是创建Docker镜像(image)的步骤,RUN命令对Docker容器( container)造成的改变是会被反映到创建的Docker镜像上的。一个Dockerfile中可以有许多个RUN命令。

CMD CMD命令是当Docker镜像被启动后Docker容器将会默认执行的命令。一个Dockerfile中只能有一个CMD命令。通过执行docker run $image $other_command启动镜像可以重载CMD命令。 "

——https://blog.csdn.net/Yaokai_AssultMaster/article/details/71439388