docker 使用入门
##docker 启动快的原因: 因为Container技术采取共享Host OS的作法,而不需在每一个Container内执行Guest OS,因此建立Container不需要等待操作系统开机时间,不用1分钟或几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。
install
centos 中文安装指南:
- 环境 centos 7 一下安装都在root 用户
> yum update -y > yum -y install docker
此命令下去 基本都能装好
- 启动 sudo service docker start
- 开机启动 sudo chkconfig docker on
helloworld
sudo docker run ubuntu:14.04 /bin/echo 'Hello world'Hello world
命令
获取镜像/提交镜像
- pull sudo docker pull centos sudo docker pull centos[:TAG] sudo docker pull [user/]NAME[:TAG]
- push sudo docker push user/NAME:TAG
查看镜像信息
-
docker images
-
docker inspect imageId (获取镜像详细信息)
搜索镜像
- docker search [-s] imageName
- -s 可以填写分数
删除镜像
- docker rmi [-f] image ....
- -f 是强制删除
创建镜像
- 基于容器创造: docker commit imageId
- 基于本地模板导入: docker save FileName Name[:TAG] | docker load < FileName
- 基于DockerFile docker build -t {imageName} {DockerFileDir}
创建容器
容器是镜像的一个实例
- docker create -it [--name Container Name ] images
- -t 让Docker 分配一个伪终端到标准输入
- -i 让标准输入打开
- --name 【容器名】
启动
- docker start [Container Name]|[Container ID]
新建加启动加下载
- docker run images 当镜像不存在时,会自动去查找,下载镜像,并创建容器,且启动容器 sudo docker run ubuntu:14.04 /bin/echo 'Hello world' sudo docker run -it ubuntu /bin/bash
- -d 后台运行
停止容器
-
docker stop imagesId
- -t =[int] 等待多少秒后关闭
-
如果前面运行的容器,只有一个终端,则退出时,容器stop
进入容器
- docker attach imagesId
- docker exec -it imagesId [shell]
删除容器
- docker rm -f imagesId
数据卷
-v
- 容器内建数据卷 sudo docker run --name web -v /webApp IMAGE 这里的-v 将相当于在系统中建了一个目录,只不过这个目录可以共享给其它容器
- 挂载主机目录 sudo docker run --name web -v {hostDir}:/webApp[:读写权限] <IMAGE>
- 读写权限 默认为 rw,可以改成ro
-v 可以多次使用,来创建多个数据卷,也支持 挂载文件
--volumes-from
容器之间挂数据卷
先创建一个容器数据卷sudo docker run -it -v /db --name dbdata ubuntu来挂它sudo docker run -it --volumes-form dbdata --name db1 ubuntu还可以接着挂sudo docker run -it --volumes-form db1 --name db2 ubuntu
--volumes-from 也支持多个挂载,和-v 类似。 但是删除麻烦,需要删除全部挂载它的容器,同时 docker rm -v 来删除关联
端口
-P和-p
在容器启动的时候用的
- -P 为容器中所有暴露的端口做映射,随机映射到本地49000~49900
- -p 为容器中指定端口映射,可以指定本地IP -p [hostIp:]port:ContainerPort -p[hostIp:]port:ContainerPort 。。。。
dockfile
有点类似 maven的Pom 文件 FROM centos/scala10.4
MAINTAINER qiao 306431869@qq.com COPY spark-1.5.2-bin-hadoop2.6/ /spark-1.5.2-bin-hadoop2.6/ ENV SPARK_HOME /spark-1.5.2-bin-hadoop2.6/ENV PATH $PATH:$SPARK_HOME/bin
指令
-
FROM FROM <IMAGE> or FORM <IMAGE>:<TAG>
-
MAINTAINER MAINTAINER <Name>,作者信息
-
RUN 可以多条
- RUN
<
COMMAND>
相当于 在终端中运行命令 ,相当于 /bin/sh -c - RUN ["executable","param1","param2"....]
- RUN
-
CMD 只支持一条,以最后一条为准,且会被容器启动是指定的命令覆盖
- CMD
<
COMMAND>
- CMD ["executable","param1","param2"....]
- CMD
-
EXPOSE EXPOSE 22 80 443
-
ENV ENV KEY VALUE 环境变量,可以被RUN 使用,在容器启动时,也是可以使用的,但是有一点需要注意:使用ssh 连接时 ,这些参数就没有用了
-
ADD ADD <Src> <dest>
-
COPY COPY <Src> <dest> ADD 和COPY 功能有所重叠,都可以从本地目录拷贝文件到镜像中,注意:只能是Dockerfile 所在目录的一个相对目录,且不支持../来回 获得上级目录的资源。即只能是Dockerfile 所在目录及其下目录。 COPY 就只有这一个 功能,而ADD 的src 可以是URL。tar 文件(自动解压)
-
ENTRYPOINT 这个命令 可以外接参数 ENTRYPOINT
<
COMMAND>
ENTRYPOINT ["executable","param1","param2"....] -
VOLUME VOLUME ["/data"]
容器互联
单机容器互联 --link
先创建一个容器 docker run -d --name db db/mysql 连接它 docker run -d -P --name web --link db:db web/web python app.py 这两个就互联 可以通过 docker ps 查看 其中 db:db ,前一个是容器名,后一个是 这个连接的 别名
多机互联 Weave(搭建 docker 下的 spark 集群)
下载安装>sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave>sudo chmod a+x /usr/local/bin/weave启动>weave launch搭建 多机互联在需要互联的机器上 执行上面的命令然后:例如 以 92,93,94 为例让其余几台机连接94weave connect 10.10.1.94启动容器master 94>weave run 192.168.0.101/24 -p 8088:8080 -p 2022:22 -itd --name weave centos/ /bin/bashslave 93>weave run 192.168.0.102/24 -itd centos/sparkslave2 /bin/bash /run.sh 192.168.0.101:7077