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