语法篇

三种常见场景:


  1. docker 直接命令操作场景
docker ps -a        //查看docker容器列表
docker images    //查看镜像列表

docker network create my_host   //现在创建一个网络名为my_host且driver为bridge的网络:(默认创建的就是bridge)
docker network ls     //查看local的网络信息:
root@iZ23ool90rrZ:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e952d3d2bc4a        bridge              bridge              local
ceb501b609f1        host                host                local
19bf38749c2e        none                null                local

docker run -dit --name php-fpm7 -v    /var/www -p 8000:80 --network=host --network-alias phphost php-fpm:v1.5            //在镜像的基础下生产一个容器(2种结局:1.运行成功,2.运行失败,失败请:docker logs 容器id查看运行失败日志)
docker cp ./nginx.conf 容器id:/etc/nginx/            //将宿主机执行该命令的当前路径下的./nginx.conf 复制到容器的指定路径  /etc/nginx/ 下
docker exec -it nginx cat /etc/nginx/nginx.conf   //查看nginx容器里面的  /etc/nginx/nginx.conf 的内容,同理: docker exec -it nginx nginx reload
docker inspect 容器id    //查看一个容器的信息
docker start 容器di     //启动一个容器
docker stop 容器id    //停止一个容器
docker pull    //从远程仓库拉取镜像
docker commit 容器id 镜像id     //将容器的变动提交到镜像(镜像A,生成了容器B,但是这个容器B在启动后我们手动在容器里面又加了很多拓展配置等,这个时候容器B与镜像A就不对等了,通过此命令可以将容器B新增的部分同步到镜像A,但请注意镜像A会被改变)
docker tag ubuntu:15.10 runoob/ubuntu:v3   //将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像     //修改镜像名称
docker build -t nginx ./  //docker引擎会在执行该命令的相对路径下找到Dockerfile并构造镜像取名为nginx

docker top 容器id   //查看容器里面执行top命令的结果:
root@iZ23ool90rrZ:~# docker top nginx-v1-host
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                23078               23058               0                   Aug20               pts/0               00:00:15            top
root                23125               23058               0                   Aug20               pts/1               00:00:00            bash
root                23146               23078               0                   Aug20               ?                   00:00:00            nginx: master process nginx
www-data            26222               23146               0                   Aug20               ?                   00:00:00            nginx: worker process

docker stats  //执行结果如下
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
da99c8f6cf8c        nginx-v1-host       0.00%               4.777MiB / 3.851GiB   0.12%               0B / 0B             6.37MB / 0B         4
23d99bfea820        version2-go         0.00%               1.02MiB / 3.851GiB    0.03%               32.5kB / 16.1kB     1.36MB / 0B         3
26370e0fb610        version1-go         0.00%               1004KiB / 3.851GiB    0.02%               11.1kB / 7.03kB     3.42MB / 0B         3
f210956f5620        php-fpm             0.00%               51.64MiB / 3.851GiB   1.31%               206MB / 580kB       76.9MB / 3.53GB     10
405da9390f9e        developer-v1        0.00%               2.645MiB / 3.851GiB   0.07%               4.65MB / 3.19MB     13MB / 0B           5
  1. Dockerfile编写场景
FROM ubuntu     //功能为指定基础镜像,并且必须是第一条指令。

MAINTAINER hugo   //作者

WORKDIR /usr/local/www    //工作目录,也就是后面我在执行所有命令的时候都是在这个路径之下的

ARG DEBIAN_FRONTEND=noninteractive    //在Dockerfile中使用的环境变量,在build docker imag的过程中有效,构建完容器后就不再起作用

ENV LANG C.UTF-8    //构建容器过程,到容器运行的时候都会起作用的环境变量

ADD ./test ./     //一个复制命令,把文件复制到景象中。你可以把它当scp命令

COPY ./test ./test2   //一个复制命令,把文件复制到景象中。但只能复制你本地的文件


RUN set -ex \
 && apt-get update \
 && apt-get -y install ca-certificates wget unzip \
 && apt-get install git

EXPOSE 8087   //暴露容器的端口,被暴露了的端口,容器间是可以相互通讯的,当然前提是容器所处一个network,

CMD /bin/bash ./test2    //CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

VOLUME ["/data"]   //docker inspect 容器id


ENTRYPOINT ["./test"]  //这个命令是用来执行容器启动后执行的初始化命令,有点像开机自启动.这里重点强调  docker run,docker start 等都会去执行它,你可以理解成 容器只要变成运行状态,都会执行它

docker-compose 文档

//Compose和Docker兼容性:
    //Compose 文件格式有3个版本,分别为1, 2.x 和 3.x
   // 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本

version: '2'
services:
  web:
    image: dockercloud/hello-world
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier
 
  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier
 
  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
 
networks:
  front-tier:
    driver: bridge
  back-tier:
driver: bridge