Docker学习笔记

一、基础

  1. docker是使用Go语言在Linux上是基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术实现的容器。
  2. 管理命令
#启动
systemctl enable docker
systemctl start docker

#查看信息
docker info

#查看帮助
docker --help

二、镜像

  1. 可以看做一个根文件系统
  2. 仓库:一般使用如userName/ubuntu:14.04标识仓库中的镜像
  3. 管理命令
#拉取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]镜像名称[:标签]

#列出镜像,IMAGE ID是唯一的
docker image ls
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 hello-world         latest              2cb0d9787c4d        13 days ago         1.85kB
 
#删除本地镜像
docker image rm imageid

#查看镜像详情
docker image inspect nginx:1.12

#镜像导出导入
docker image save eb40dcf64078> /root/mydjango-save-1016.tar
docker image load < /root/mydjango-save-1016.tar  
  1. Dockerfile
FROM debian:jessie   #指定基础镜像
RUN apt-get install -y gcc libc6-dev make    #或RUN ["可执行文件", "参数1", "参数2"]
COPY package.json /usr/src/app/  #从上下文目录中复制到目标目录;或COPY ["<源路径1>",... "<目标路径>"]
WORKDIR <工作目录路径>  #指定工作目录
USER <用户名>    #指定当前用户
ENV NODE_VERSION 7.2.0   #定义环境变量
VOLUME ["<路径1>", "<路径2>"...]     #定义匿名数据卷,会自动关联到主机某个目录;或VOLUME <路径>
EXPOSE <端口1> [<端口2>...]  #开放端口


CMD <命令>   #容器启动后默认执行的命令(容器中无systemd概念),会被commad覆盖,只能出现一次;或CMD ["可执行文件", "参数1", "参数2"...]
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]   #如果定义了接入点,那么执行到CMD时,CMD含义变为提供参数,只能出现一次



#docker build -t nginx:v3 .:通常在空目录中放置Dockerfile,表示在上下文目录中构建镜像

三、容器

  1. 实质上即进程
  2. 管理命令
#运行镜像
 #-d:容器后台运行
 #-m:限制最大内存量
 #-cpus:限制最大cpu量
docker container run [options] image [commad] [arg...]

#启动停止状态的容器
docker container start myrunoob

#列出容器
docker container ls

#进入容器
 #退出容器:exit
docker container exec -it 69d1 bash

#删除容器
docker container rm myrunoob
docker container rm $(docker ps -aq)

#查看容器详情
docker container inspect web
  1. 数据管理
#创建数据卷
docker volume create my-vol

#查询所有数据卷
docker volume ls

#查看数据卷信息
docker volume inspect my-vol
[
 {
 "Driver": "local",
 "Labels": {},
 "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
 "Name": "my-vol",
 "Options": {},
 "Scope": "local"
 }
 ]
 
 #启动容器时挂载数据卷
 docker run -d -P \
     --name web \
     --mount source=my-vol,target=/webapp \
     training/webapp \
     python app.py
     
 #删除数据卷
 docker volume rm my-vol
 
 #直接绑定主机目录
 docker run -d -P \
     --name web \
     --mount type=bind,source=/src/webapp,target=/opt/webapp \
     training/webapp \
     python app.py
  1. 网络管理
    1. 支持的网络模式
      • bridge:默认的,限本主机,可以通过容器名发现容器
      • Overlay:跨主机,需满足以下任一条件
        • docker运行在Swarm模式中
        • docker引擎都连接到consul等上
    2. 管理命令
    #-P:Docker会随机映射一个49000~49900的端口到容器开放的端口
    docker run -d -P training/webapp python app.py
    
    #-p:指定映射端口到容器端口
    docker run -d -p 5000:5000 training/webapp python app.py
    
    #查看容器的端口映射配置
    docker port nostalgic_morse 5000
    
    #创建网络
    docker network create -d overlay multi_host
    
    #查看网络
    docker network ls
    
    #移除网络
    docker network rm multi_host
    

四、Docker Compose

  1. 定义和运行多个 Docker 容器的官方开源项目;用Python编写,调用Docker服务提供的API实现
  2. 管理的单元
    • 服务(service):一个应用容器
    • 项目(project):由一组关联的应用容器组成的一个完整业务单元
    # 管理的单元配置文件,默认docker-compose.yml
    version: "3"
    services:
      db:
        image: mysql:5.7
        # 或者通过build指定Dockerfile的方式
        #build:
        #  context: ./dir
        #  dockerfile: Dockerfile-alternate
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: somewordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        ports:
          - "8000:80"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      db_data:
        data:
          #instead of attempting to create a volume called [projectname]_data, Compose looks for an existing volume simply called data and mount it into the db service’s containers
          external: true
    
  3. 管理命令
#一般命令格式
 #-f:指定模板文件,默认当前目录下docker-compose.yml
 #-p:指定项目名称,默认当前目录名为项目名
docker-compose [options] [COMMAND] [ARGS...]

#启动compose
docker-compose up

五、Docker Machine

  1. 负责在多种平台上快速安装Docker环境的官方开源项目
  2. 管理命令
#创建一台 Docker 主机
docker-machine create -d virtualbox test

#通过 SSH 登录到主机
docker-machine ssh test

六、Docker Swarm

  1. Swarm是Docker内置的Docker主机集群管理工具
    • 运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 ( node )
    • 节点分为管理 ( manager ) 节点和工作 ( worker ) 节点,管理节点默认也作为工作节点
  2. 管理命令
#本地初始化一个Swarm集群,默认是管理节点
#如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用 --advertise-addr 指定 IP
$docker swarm init --advertise-addr 192.168.99.100
 Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
 To add a worker to this swarm, run the following command:
 docker swarm join \
 --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
 192.168.99.100:2377
 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

#创建一个docker主机并加入Swarm集群
$docker-machine create -d virtualbox worker1
$docker-machine ssh worker1
 docker@worker1:~$ docker swarm join \
     --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
     192.168.99.100:2377
 This node joined a swarm as a worker.
 
 #查看集群
 docker node ls
 
 #向集群中部署服务
 #部署后我们使用浏览器,输入任意节点 IP ,即可看到 nginx 默认页
 docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
 
 #查看服务
 docker service ls
 ID NAME MODE REPLICAS IMAGE PORTS
 kc57xffvhul5 nginx replicated 3/3 nginx:1.13.7-alpine *:80->80/tcp
 
 #查看服务详情
 docker service ps
 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
 pjfzd39buzlt nginx.1 nginx:1.13.7-alpine swarm2 Running Running about a minute ago
 hy9eeivdxlaa nginx.2 nginx:1.13.7-alpine swarm1 Running Running about a minute ago
 36wmpiv7gmfo nginx.3 nginx:1.13.7-alpine swarm3 Running Running about a minute ago
 
 #删除服务
 docker service rm
 
 
  1. 使用docker-compose.yml
#配置文件一般如下:
 version: "3"
 services:
   wordpress:
     image: wordpress
     ports:
       - 80:80
     networks:
       - overlay
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     deploy:
       mode: replicated
       replicas: 3
   db:
     image: mysql
     networks:
       - overlay
     volumes:
       - db-data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     deploy:
       placement:
         constraints: [node.role == manager]
   visualizer:   #提供可视化界面服务
     image: dockersamples/visualizer:stable
     ports:
       - "8080:8080"
     stop_grace_period: 1m30s
     volumes:
       - "/var/run/docker.sock:/var/run/docker.sock"
     deploy:
       placement:
         constraints: [node.role == manager]
   volumes:
     db-data:
   networks:
     overlay:
     
 #部署服务
 docker stack deploy -c docker-compose.yml wordpress
 
 #查看服务
 docker stack ls
 
 #移除服务
 docker stack down
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容