注:由 oschina (宇哲不犹豫)搬家过来
什么是docker?
Docker 是google 使用 go 语言在LXC技术基础上进行封装的 linux 容器管理工具。
Docker 与VM 的比较,一个是在系统内核上虚拟的,另一个是在硬件上虚拟的。
Docker的一些基本概念?
仓库:就是保存docker 镜像的地址
镜像:就是linux系统
容器:就是跑起来的linux系统
docker的使用?
讲解一些docker操作: dockerfile、容器的文件互传、结合nginx使用。
一、 docker基本操作
启动docker 服务 service docker start
搜索docker镜像:docker search XXXX
获取镜像:docker pull centos:7
跑起镜像实例:docker run –it –p 10000:80 –name “dddd” centos:7 /bin/bash
安全退出:Ctrl+p \ Ctrl+q
查看正在运行的容器:docker ps
查看所有的容器:docker ps –a
停止/启动/重启容器:docker stop/start/restart containerId
删除容器:docker rm containerId (要先停止这个container)
查看镜像:docker images
删除镜像:docker rmi imageId (要先删除依赖镜像的所有容器)
导出docker image: docker save –output=”vtest” vtest:v1
载入docker image: docker load –input=”vtest”
Cat vtest | docker import – vtest:v1
注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指定标签等元数据信息。
导出容器:docker export –output=”ssss” containerId
创建镜像:docker commit –m “message” –a “author” containerId name:version
Docker build –t=”name:version” DockerfilePath
上传镜像:1、docker login
2、docker commit
3、docker push name:version
二、 dockerfile
先上代码:
这个例子是在创建一个centos:7系统并安装了nginx的镜像
# get docker image
FROM centos:7
RUN yum install -y wget
WORKDIR /usr/local/src
RUN wget http://nginx.org/download/nginx-1.9.8.tar.gz
RUN tar -zxf nginx-1.9.8.tar.gz
RUN mkdir /usr/local/nginx
RUN yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
WORKDIR nginx-1.9.8
RUN ./configure --prefix=/usr/local/nginx
RUN make && make install
ADD hello1.html /usr/local/nginx/html/
Dockerfile 语法解释:
1、注释使用 “#” 符号开头
2、命令为从上往下执行
3、FROM 为获取docker镜像命令
例子: FROM {imageName}:{imageVersion}
解释:执行到这句命令时,会从默认的docker仓库中查找到相应的镜像,
等同于 docker pull {imageName}:{imageVersion} , docker run -it {imageName}:{imageVersion}
docker attach {这个容器Id} 。
4、RUN 执行 linux 指令
5、WORKDIR 修改当前工作路径(相对于容器来说的)
6、ADD 命令是添加 以Dockerfile所在目录为根的文件至docker容器中
例子: ADD hello1.html /usr/local/nginx/html/
解释:hello1.html 与 Dockerfile处于同一目录下
补充:
1、VOLUME [“路径”] 路径为容器路径
挂载一个数据卷: 至于挂载位置,可以使用 docker inspect -f “{{.Mounts}}” 容器Id
三、 容器文件互传
- 数据卷挂载,实现容器中文件的互传
/home/cyz/test/container 为host主机的文件夹
/home/file 为容器的文件夹,当该容器没有这个文件是,会自动生成
docker run -it -v /home/cyz/test/container/:/home/file --name="mntfile" centos /bin/bash
- 从主机上拷贝文件至容器
获取容器的详细id 根据 docker ps –a 来获取简单的id
docker inspect -f ‘{{.Id}}’ 步骤A获取的名称或者id
docker 1.9.1版本的
使用
cp coppp /var/lib/docker/btrfs/subvol7068261036f23842870f97f2e4ec11a769e089a8df0559/home/coppp
其他的试试
$ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
或者
$ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root
- Linux命令咯
Sftp 工具来获取咯
sftp root@地址
get php-pkg-infi_2015-6-26.tgz /data-scm/ - Dockerfile 指令解释
FROM centos:7
RUN yum install –y wget
RUN mkdir /usr/local/nginx
WORKDIR /usr/local/src
RUN yum install –y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
RUN wget http://nginx.org/download/nginx-1.9.8.tar.gz
RUN tar –zxf nginx-1.9.8.tar.gz
WORKDIR nginx-1.9.8
RUN ./configure –prefix=/usr/local/nginx
RUN make && make install
ADD xxx /home/xxx
Xxx必须为Dockerfile父文件夹内
四、 结合nginx使用
Nginx 加多个docker实例