docker       

docker

镜像

对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

代码是放在主机中,然后通过docker run的-v参数(数据卷)共享给每个需要的容器,编码的时候,只需要在主机本地修改代码就可以。

安装docker

使用官方提供的脚本来安装 Docker
sudo curl -sSL https://get.docker.com/ | sh

可以配置让 Docker 服务在系统启动后自动启动。

sudo chkconfig docker on

sudo service docker start

常用命令

1.下面的命令输出一个 “Hello World”,之后终止容器
sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

2.下面的命令则启动一个 bash 终端,允许用户进行交互
sudo docker run -t -i ubuntu:14.04 /bin/bash

3.当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止

4.快速准确的调度容器--给容器起名字
root# docker run -t -i -d --name helloubuntu ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

5.列出所有正在运行的容器和它们的基本信息
root# docker ps -a

6.以下管理命令都可以通过传入容器的 ID 或者名字来管理指定的容器:
stop 停止一个正在运行的容器。
start 运行一个正在停止的容器。
restart 重启一个容器。
rm 删除一个容器。

7.创建image


8.安装nginx镜像
(1)下载镜像,docker pull nginx:1.9
(2)启动容器,docker run -d -p 8080:80 nginx:1.9,把容器内的nginx的80端口,映射到当前服务器的8080端

9.进入容器
sudo docker attach 44fc0f0582d9  

http://www.arkulo.com/2015/04/25/dockerlnmp/

下载镜像: docker pull memcache
查看已有镜像: docker images
查看所有的容器: docker ps
创建镜像: docker build -t 镜像名字 目录
查看当前boot2docker的ip地址:boot2docker ip (本文的IP是:192.168.59.103)
进入一个容器的shell:docker exec -i -t 665b4a1e17b6 bash
更新一个容器至镜像: docker -m "描述" -a "作者" 665b4a1e17b6 arkulo/php-fpm:v1
打包镜像(传播):docker save arkulo/nginx > /tmp/arkulonginx.tar
导入镜像:docker load < /tmp/arkulonginx.tar
查看容器内部运行程序:docker top 容器id



首先需要先注册一个帐号https://hub.docker.com/
然后添加一个仓库:Add Repository -> Repository
然后填上你的名字和简介
然后在你的机器上登录

$sudo docker login

现在我们需要一个镜像

$sudo docker images
这个可以列出当前系统的docker镜像,刚开始的话试空的

现在我们把这个修改了的容器写到y一个新的Image里面,假设我们刚刚在docker hub 上创建的仓库名叫mymusise/test

sudo docker commit -m "add vim"  191b86560986 mymusise/test
191... is CONTAINER ID  

sudo docker push mymusise/spider

类似github

run容器,nginx for example
run一个nginx容器,开放端口,并映射到本地的 8080 端口,html文件夹映射到/some/content
sudo docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d -p 8088:80 gagatechang/zhulongnginx(REPOSITORY)

进入容器内部
$ sudo docker exec -it 1801a32aab54 /bin/bash
查看nginx目录
cd /etc/nginx/



php docker

docker run -p 9000:9000 -v ~/opt:/var/www --name phpfpm -it fancive/php


pip install docker-compose
if pkg_resources.DistributionNotFound: backports.ssl-match-hostname>=3.5
sudo pip install backports.ssl_match_hostname --upgrade

docker-compose.yml 
web:
 image: nginx:latest
 ports:
  - "8080:80"
 volumes:
  - ./ubangwang:/code
  - ./site.conf:/etc/nginx/conf.d/default.conf
 links:
  - php
php:
  image: php:7-fpm
  volumes:
    - ./ubangwang:/code
docker-compose up -d
FROM nginx:latest

ADD  nginx.conf      /etc/nginx/nginx.conf
ADD  sites-enabled/*    /etc/nginx/conf.d/
RUN  mkdir /opt/htdocs && mkdir /opt/log && mkdir /opt/log/nginx
RUN  chown -R www-data.www-data /opt/htdocs /opt/log

VOLUME ["/opt"]


同样构建一下镜像
docker build -t eva/nginx ./nginx

并运行容器
docker run -p 80:80 -v ~/opt:/opt -it eva/nginx

docker for mysql

docker run -p 3306:3306 -v ~/opt/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it eva/mysql

mysql -uroot -pmypass -h127.0.0.1



移除所有的容器和镜像(大扫除) 用一行命令大扫除:

docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a) 

docker command

http://dockerlux.github.io/pdf/cheat-sheet-v2.pdf?spm=5176.100239.blogcont57839.60.kfpwer&file=cheat-sheet-v2.pdf