docker中基本概念
Docker
一款轻量级容器管理引擎,由 Docker Daemon、Docker Client 组成。
Docker Daemon
Docker 架构中常驻后台的系统进程,负责接收处理用户发送的请求和管理所有的 Docker 容器,所谓的运行 Docker 即代表运行 Docker Daemon。Docker Client
Docker 架构中用户与 Docker Daemon 建立通信的客户端。Docker Machine
Docker 官方提供的部署工具。帮助用户快速在运行环境中创建虚拟机服务节点,在虚拟机中安装并配置 Docker,最终帮助用户配置 Docker Client,使得 Docker Client 有能力与虚拟机中的 Docker 建立通信。Docker Compose
Docker 官方提供的容器编排工具。随着服务的复杂度增长,容器管理过程的配置项将变得冗长,Compose 可有效帮助用户缓解甚至解决容器部署的复杂性。
更改docker镜像默认位置:
mkdir /newlocation
mv /var/lib/docker/* /newlocation/docker/
sudo mount -o bind /newlocation/docker /var/lib/docker
初识docker
1.安装(参照官网https://docs.docker.com/userguide/)
2.docker引擎基础是linux容器技术(lxc)。
3.docker镜像是一个面向docker引擎的只读模板,包含了文件系统。
4.docker运用容器来运行和隔离应用,容器是从镜像创建的应用运行实例。容器是相互隔离,互不可见的。镜像自身是只读的。容器从镜像启动事,docker会在镜像的最上层创建一个可写层。
5.docker仓库集中存放镜像文件
二。镜像
1.镜像是docker运行容器的前提,镜像文件一般由若干层组成,层识AUFS(一种联合文件系统)中的概念,识实现增量保存与更新的基础
docker rmi Image Image可以为标签或者id
docker ps -a查看主机上所有的容器
如果强行删除一个存在容器依赖的镜像,会有问题。一般先删除容器 docker rm id 然后删除镜像
2.存出和载入镜像
如:存出uubuntu:14.04为ubuntu——14.04.tar
docker save -o ubuntu——14.04.tar ubuntu:14.04
载入:
sudo docker load ubuntu——14.04.tar
3.test:latest添加标签user/test:latest
docker tag test:latest user/test:latest
4.docker push会将本地镜像上传
三:容器
1.容器是镜像的一个运行实例,但他带有额外的可写文件层。
2.docker run 等价于 docker create(创建容器)然后docker start(启动容器)
3.终止容器:docker stop,此外当docker容器中;那个制定的应用终结时,容器也自动终止
docker ps -a -q查看处于终止状态的容器id
处于终止状态的容器,用docker start可以启动
4.删除容器:
docker rm删除处于终止状态的容器,docker rm -f 删除运行中的容器
5.容器的导入导出(实现容器的迁移)
docker export 容器id>文件名
docker import
6.基于dockerfile制作镜像
编写 Dockerfile
选择 Python 2.7 版本为我们依赖的系统镜像。
FROM python:2.7
因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,可以使用与官方镜像保持同步的 DaoCloud 境内镜像:FROM daocloud.io/python:2.7。
也推荐通过 DaoCloud Toolbox 极速下载官方镜像!
设置镜像的维护者,相当于镜像的作者或发行方。
MAINTAINER Captain Dao support@daocloud.io
向镜像中添加文件并安装依赖。
RUN mkdir -p /app
WORKDIR /app
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY docker-entrypoint.sh /usr/local/bin/
ADD 与 COPY 的区别
总体来说 ADD 和 COPY 都是添加文件的操作,其中 ADD 比 COPY 功能更多,ADD 允许后面的参数为 URL,还有 ADD 添加的文件为压缩包的话,它将自动解压。
使用 RUN 命令调用 pip 包管理器安装 App 的依赖包
在编写 Dockerfile 时尽量将安装依赖的过程提前以提高镜像层的复用率。
启动应用进程
EXPOSE 8888
ENTRYPOINT [“docker-entrypoint.sh”]
CMD [“”]
通过 EXPOSE 指定该镜像需要公开的端口。
ENTRYPOINT 与 CMD 的区别
ENTRYPOINT 指定了该镜像启动时的入口,CMD 则指定了容器启动时的命令,当两者共用时,完整的启动命令像是 ENTRYPOINT + CMD 这样。使用 ENTRYPOINT 的好处是在我们启动镜像就像是启动了一个可执行程序,在 CMD 上仅需要指定参数;另外在我们需要自定义 CMD 时不容易出错。
制作启动脚本(docker-entrypoint.sh)
!/bin/bash
Strict mode
set -euo pipefail
Create the hash to pass to the IPython notebook, but don’t export it so it doesn’t appear
as an environment variable within IPython kernels themselves
HASH=
(python−c"fromIPython.libimportpasswd;print(passwd(′
{PASSWORD:-admin}’))”)
echo “========================================================================”
echo “You can now connect to this Ipython Notebook server using, for example:”
echo “”
echo ” docker run -d -p :8888 -e password= ipython/noetebook”
echo “”
echo ” use password: ${PASSWORD:-admin} to login”
echo “”
echo “========================================================================”
unset PASSWORD
ipython notebook –no-browser –port 8888 –ip=* –NotebookApp.password=”$HASH”
一般我们会将初始化应用的过程编写成一个启动脚本,在脚本里以环境变量或命令行参数的形式获取应用初始化所必须的信息,然后配置并启动应用。
启动容器
有了 Dockerfile 以后,我们可以运行下面的命令构建 Python 应用镜像并命名为 ipython/notebook:
通过指令建立镜像
docker build -t ipython/notebook .
-t来设置flag
通过以下指令启动容器
docker run -d -p 8888:8888 -e PASSWORD=admin ipython/notebook
-e设置环境变量,-p映射端口
注意哦,我们将初始登录密码以环境变量的形式传入容器并告知应用。
打开游览器,访问 8888 端口,就可以看到 IPython Notebook 了。