Docker初学笔记

Docker项目的目标是实现轻量级的操作系统虚拟化解决方案

学习课程链接:http://www.testclass.net/docker/03-images

1.docker:

名词:仓库、镜像、容器

仓库有很多镜像,我们通过docker pull连接仓库下载镜像

下载镜像一般默认为下载latest 标签的,如果要下载特定的版本,就在命令后加版本号

下载镜像以后就可以通过镜像创建容器

最后启动容器就可以启动对应的服务

2.一些简单的命令:

列出本地所有的镜像列表:docker images

拉取仓库里的jenkins镜像:docker pull jenkins/jenkins

启动容器:

  启动一个新的容器:

  docker run -d --name myjenkins -p 8099:8080 jenkins/jenkins

    -d:以守护进程运行(和linux里的命令含义一样)

    --name:容器名字

    -p:端口映射,将容器的8080端口映射到主机的8099端口上,这样主机上直接打开连接 http://localhost:8099/ 即可访问那个镜像的功能

    jenkins:启动容器的镜像

    当利用docker run 来创建容器时,Docker在后台运行的标准操作包括:

    •   检查本地是否存在指定的镜像,不存在就从公有仓库下载
    •   利用镜像创建并启动一个容器
    •   分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    •   从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    •   从地址池配置一个IP地址给容器
    •   执行用户指定的应用程序
    • 执行完毕后容器被终止  

  启动一个以前已经制作好的容器:docker start 容器ID

停止容器:docker stop 容器ID

删除容器:docker rm 容器ID

删除镜像:docker rmi 镜像名

查看容器列表(可以获取到容器ID):docker ps -a

查看日志(比如有时候设计到前端代码的编译,可能很慢想看看日志进行到哪一步):docker logs 容器ID

3.我们常使用哪些镜像:

  1)Nginx

  2)jenkins:这里有一个坑,如果直接【docker pull jenkins】pull下来的jenkins特别旧,里面都没法装很多插件,所以要【docker pull jenkins/jenkins】

    如果pull的时候很慢,可以参考另一篇帖子《Mac配置docker阿里云加速器

  3)selenium Grid,用于分布式自动化测试,即:一套selenium代码运行在多个环境上——多么契合docker呀

    http://www.testclass.net/docker/07-docker-selenium

4.dockerfile文件分析——Dockerfile 中每一条指令都创建镜像的一层

  一般的 Dockerfile 分为四部分:基础镜像信息、 维护者信息、 镜像操作指令 和 容器启动时执行指令 。

   首先必须要有FROM,类似于python的导包,只不过这里注明的是镜像名

  ENV:环境变量(这个要和容器启动时通过-e|--env注入的要区分,ENV里配的只会作用于容器启动的这个过程内,只要容器build完了,ENV就不起作用了,而-e会在容器运行的时候一直起作用)

    比如更改docker jenkins里的格林威治时间为北京时间就需要在docker run命令里使用-e|--env注入

    docker run —name myjenkins -d -p 8099:8080 --env JAVA_OPTS='-Duser.timezone=GMT+08' jenkins/jenkins

  RUN:就各种操作命令,最好写在一行,因为docker是一个联合文系统,RUN的行数越多,它的分层就越多

  CMD:默认启动容器时执行,一般写个一直执行的bash

  RUN在容器build时运行,CMD在启动容器时执行

  学习:http://www.testclass.net/docker/08-dockerfile

  dockerfile编写完成后可以制作镜像:

    $ touch Dockerfile

    $ vim Dockerfile

    $ docker build -f Dockerfile -t ubuntu-py:v1 .

    -t 标记来添加 tag,指定新的镜像的用户信息。

    【.】 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径

    可以看到build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。 然后, Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的docker commit一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。

  学习:http://www.testclass.net/docker/10-compose

原文地址:https://www.cnblogs.com/lybolg/p/13811774.html