关于Docker安装:
ubuntu使用脚本安装docker
wget -qO- https://get.docker.com/ | sh
centos安装docker
yum -y install docker
centos使用脚本安装docker
yum update
curl -fsSL https://get.docker.com/ | sh
windows安装docker
最新版 Boot2Docker 下载地址: https://github.com/boot2docker/windows-installer/releases/latest
目前最新版为v1.8.0, 下载地址为: https://github.com/boot2docker/windows-installer/releases/download/v1.8.0/docker-install.exe
更新
udo apt-get install lxc-docker
查Docker信息
sudo docker info
sudo docker logs -f +名字
容器操作基础命令 (sudo docker run +)
-p 80(本地端口):80(容器进程占用端口)
绑到特定的网络接口
-p +主机IP :80:80
-p +主机IP ::80 绑定在随机端口
-v $pwd(挂载的本地文件路径) :www/html(容器的文件路径)
-i -t ubuntu:15.10 /bin/bash 加载一个带有交互式shell的镜像到容器
-d tomcat 加载一个守护进程
-namd XX 给容器赋予名字
dokcer start+名字
docker stop+名字
docker kill +名字
docker rm +名字 (删除容器)
docker top+名字(查看容器内进程)
查看docker详细信息
sudo docker inspect +名字
sudo docker inspect --format '{{.State.Running}}' 名字
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' 名字
在容器内运行进程
sudo docker exec -i -t “容器ID” bash(前台方式)
sudo docker exec -d tomcat touch /www/index.php(后台方式-守护进程较多)
自动重启容器
sudo docker run --restart=always/on-failure:5
看容器端口在本地映射情况
sudo docker port ID 80(容器进程自己的端口)
关于镜像
docker images 查看所有的可用的本地镜像
docker search +镜像名字
拉取一个镜像
docker pull +应用短标签
commit方法创建一个镜像
$ sudo docker commit -m="A new custom image" --author="James Turnbull" 4aab3ce3cb76 jamtur01/apache2:webserver
Docker file的方法提交一个镜像
在镜像目录中创建Dockerfile文件
########################
#Version
FROM ubuntu:15.10(调用的镜像)
MAINTAINER pygain "pygain@163.com"
RUN apt-get update
########################
build新的镜像
进入镜像目录当中
sudo docker build -t "(镜像名字):tags(短标签)" (--no-cache)
上传镜像到Docker Hub
https://hub.docker.com注册账号,后create一个自己的public仓库
sudo docker push 镜像名字:短标签
0x02
Dockerfile文件内参数值
CMD:
指定一个容器启动时候要运行的命令,不同于RUN是在容器层被构建的时候执行
CMD ["/bin/bash","-l"] 将-l参数给予命令 /bin/bash
Dockerfile中只能指定一条CMD[],再多的会覆盖,在docker run 这个镜像的过程中如果存在其他的参数,则该参数会覆盖Dockerfile当中的CMD[""]命令
ENTRYPOINT:
与CMD用法相同,但是docker run 的时候只会覆盖相同命令
组合:
ENTRYPOINT ["/usr/sbin/nginx"] CMD ["-h"]
docker run 参数会给予nginx进程 ,没有则默认参数 -h
确实需要,你也可以在运行时通过docker run的--entrypoint标志覆盖ENTRYPOINT指令。
WORKDIR:
当新的容器层启动的时候 设置下一步工作的目录
WORKDIR www/html
docker run -w +工作目录 进行覆盖
ENV:
ENV指令用来在镜像的构建过程中设置环境变量
ENV RVM_PATH /home/rvm/
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
docker run -e "/home/rvm" 进行覆盖
USER:
基于该镜像的容器会以说明样的身份去启动
USER admin
USER 00 (uid)
USER xw:admin(admin组下的用户)
docker run -u "xw:admin" 进行覆盖
VOLUME:
用来向容器增加卷(特定目录)
卷可以在容器间共享和重用。
一个容器可以不是必须和其他容器共享卷。
对卷的修改是立时生效的。
对卷的修改不会对更新镜像产生影响。
卷会一直存在直到没有任何容器再使用它。
卷功能让我们可以将数据(如源代码)、数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们在多个容器间共享这些内容
VOLUME ["/opt/project","/data"] 创建两个在容器当中的挂载点
ADD:
将构建上下文中的文件或者目录,外界的URL都复制到镜像的目标目录当中
ADD software.lic /opt/application/software.lic
ADD http://wordpress.org/latest.zip /root/wordpress.zip
ADD latest.tar.gz /var/www/wordpress/ (源归档类型文件将被分解存储)
******这种对文件的添加或减少的操作自然也会使得之前的构建缓存变得无效*****
COPY
COPY conf.d/ /etc/apache2/
不对源文件进行提取或解压 只进行复制操作
本地文件都放到和Dockerfile 同一个目录下。不能复制该目录之外的任何文件,因为构建环境将会上传到Docker守护进程,而复制是在Docker守护进程中进行的。任何位于构建环境之外的东西都是不可用的。COPY指令的目的位置则必须是容器内部的一个绝对路径。
ONBUILD :
当该镜像被用作其他镜像的基础镜像的时候,该镜像的触发器会被执行
可以看做FROM +基础镜像名字 执行后马上执行
当我们用这函数建立模板之后 所有以这个为基础镜像的build过程都会在FROM之后马上执行ONBUILD 后边的代码
只会在子镜像当中触发 不会在子孙镜像当中触发