您的位置:首页 > 运维架构 > Docker

Docker 分享

2016-06-29 17:30 561 查看
注:由 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 指令解释http://blog.csdn.net/u010201484/article/details/51784756

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实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: