学习任务

  • 学习Docker,在linux平台成功将项目打包成镜像。
    下一步:继续学习Docker。

    学习心得

    Docker

Dockerfile命令

copy

将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置.

  1. COPY package.json /usr/src/app/

ADD

<源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。

  1. ADD hello /
  2. ADD test.tar.gz / #添加到根目录并解压
  1. WORKDIR /root
  2. ADD hello test/ # /root/test/hello

注意:大部分情况下,COPY优于ADD,ADD除了COPY还有额外功能:解压。添加远程文件/目录使用 curl或者wget

WORKDIR

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。

  1. WORKDIR <工作目录路径>

注意:用WORKDIR,不要使用RUN cd,尽量使用绝对路径。

ENV

用来设置常量

  1. ENV MYSQL_VERSION 5.6
  2. RUN apt-get install -y mysql-server=`${MYSQL_VERSION}`\
  3. && rm -rf /var/lib/apt/lists/*

RUN

执行命令并创建新的Image Layer。

CMD

设置容器启动后默认执行的命令和参数。

构建镜像

  1. 通过容器构建镜像

基于某个镜像创建

  1. # 启动一个容器centos
  2. docker run it centos
  3. # 进入容器
  4. docker exec -it -d container_old /bin/bash
  5. # commit镜像(创建一个镜像)
  6. # docker container commit
  7. docker commit container_name newImag
  8. # container_name:容器名称
  9. # newImage: 创建的新镜像名称

启动容器的方式

将关闭容器重新启动的方式:

  1. docker start 容器名
  1. 通过Dockerfile构建镜像(推荐方式)

需要创建一个Dockerfile文件,并写入相关的操作。

首先创建的Dockrfile文件需要项目文件在同一级目录下面。

在Dockerfile文件里面编写如下代码:

  1. FROM ecr.esisoo.com:5000/node:8.12.0
  2. ADD project /tmp/project
  3. #ADD后第一个参数是项目名称,第二个参数是项目代码路径,指定项目路径将项目文件添加到Docker环境
  4. WORKDIR project
  5. #启动容器时进入工作目录project下。
  6. RUN npm install --production
  7. # 当添加--production后不会自动下载node-modules。表示单纯的使用包而不需要进行一些改动测试之类的。
  8. EXPOSE 3000
  9. # 暴露容器内部项目运行的端口
  10. CMD ["npm","start"]
  11. # 容器启动时运行项目的命令

创建镜像

  1. docker build [选项] <上下文路径/URL/->
  1. docker image build 简写成:docker build
  2. docker build -t myImage .
  3. # myImage:自定义的镜像名字。
  • 注意:不要忘记最后一个点,它表示使用当前路径下的Dockerfile。
    这样一个镜像就创建成功了。

运行容器

  1. docker run -d --name mycontainer -p 8080:3000 myImage

注意:

  • -d : 表示以后台的方式运行容器,并且将容器的ID返回。
  • mycontainer:对容器重新进行的命名的名字,通过—name进行重命名
  • -p :表示将端口映射出去,方便我们进行访问。在这里是通过将暴露的3000端口映射到8080端口。
  • myImage :表示镜像。

三、问题和困惑

总结: 今天的工作学习中,对镜像有了更深刻的认识。通过docker push的方式上传镜像到anydrm的镜像仓库,然后对上传的镜像进行拉取下来,然后再通过dcker pull的方式将镜像拉取下来,在本地虚拟机中可以创建一个新的Dockerfile,在该Dockerfile中可以只编写该项目的代码以及该项目的镜像地址即可。

然后再通过docker run的方式启动并创建一个容器:

  1. docker run -d --name mycontainer -p 8080:3000 myImage
  • 注意: 在这之前需要将该地址添加到信任列表中,在/etc/docker/touch daemon.json中添加该地址即可。

四、参考资料

Docker入门