• 2018.5.3 docker


     # docker

    [TOC]
    ## docker概念
    概念官网解释:[docker官网](https://www.docker.com/)
    
     1. 开放平台
     2. 容器技术
     3. LXC(Linux Container)
    ### 组成
     1. Docker Engine:运行平台,构建镜像(核心概念:Docker镜像 image,Docker容器 containers,docker Registry)
     

     2. Docker Registry:托管镜像的仓库
     3. Docker Hub:托管存储和共享镜像
     4. Docker Machine:构建容器运行环境的配置
     5. Docker Compose:多容器应用管理
     6. Docker Swarm:容器集群和调度管理工具
     7. Kitematic:桌面GUI管理程序(测试过Windows,体验还行)
     8. Docker Toolbox(替代Boot2Docker)
     9. Docker Trusted Registry(DTR)
     10. Docker Subscription
     
    ### 架构
    

    ### 生态
    ---
    ## docker命令
    ---
    ## docker 网络(略)
    
    ```
    ip link add veth-a type veth peer name veth-b
    ip a |grep veth
    brctl addif br0 veth-a
    ip link set veth-a up
    ip link set veth-b netns test1
    
    ...
    ```
    ---
    ## 实战
    ### 安装
    centos
    ```
    yum install docker
    ```
    ubuntu
    ```
    apt install docker.io
    ```
    启动
    ```
    service docker start
    
    或者
    systemctl start docker.service
    ```
    设置开机启动
    ```
    chkconfig docker on
    或者
    systemctl enable docker.service
    ```
    ### docker 命令
    #### 查看
    ```
    docker info
    ```

    #### run 
    -i(stdin) -t(stdout) -d(后台运行) --rm (执行exit命令后就会退出删除容器,相当于运行一个临时的容器)
    ```
    docker run -it centos /bin/bash
    
    docker run --name haha -it centos /bin/bash
    docker start haha
    docker ps

    #附着
    docker attach haha
    #解附着,后台运行
    ctrl+P+Q
    #执行shell脚本“while”循环 
    docker run --name daemon_haha -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done"
    #查看日志:-t加时间戳-f监控
    docker logs -t -F daemon_haha docker logs --tail 2 -t daemon_haha
    # 查看容器对应宿主机的目录对应
    container id cd /var/lib/docker/containers docker ps -a
    ##到对应的容器id目录下即可查看日志文件
    ``` 
    docker top daemon_haha 
    ```
    #### exec (开启交互模式)
    ``` docker exec -i -t daemon_haha /bin/bash docker ps
    # 退出还会在后台运行,相当于只是将/bin/bash进程退出而已 exit docker ps
    #存在创建的txt文件
    ```
    docker exec -d daemon_haha touch /etc/docker.txt docker exec -it daemon_haha /bin/bash ll /etc/ 
    ```
    #### ps(查看正在运行的容器) -a(包括停止的容器)
    ```
    docker ps -l docker ps -a docker ps -n 2
    ```
    #### stop(停止后台运行) ``` docker stop daemon_haha docker ps docker start daemon_haha docker ps ```
    #### kill(不建议) ``` docker kill daemon_haha ```
    #### inspect(查看容器信息) ```
    #看容器的属性,hostnamepath主机名的路径,容器的id,镜像的id docker inspect daemon_haha docker inspect --format='{{.State.Running}}' daemon_haha ```
    #### rm(删除容器) ``` docker rm haha docker ps -a -q docker rm `docker ps -a -q` docker rm -f `docker ps -a -q`
    #正在运行的需要停止或者强制删除-f docker rm -f `docker ps -a -q`
    #或者 docker rm -f $(docker ps -a |awk '{print $1}') ```
    #### save(保存) ``` docker save [images_tag]> test.tar ```
    #### load(导入) ``` docker load test.tar ```
    #### export(备份) ``` docker ps -a docker export [docker id] > my_container.tar cat my_container.tar | docker import - container:test docker images docker run -it container:test /bin/bash ```
    #### import docker import [container_name]
    #### search ``` docker search centos ```
    #### commit ``` docker commit [container id ] haha/test ``` ---
    #### build docker build从客户端传输到docker守护进程,构建是在守护进程里面进行的 Dockerfile所在的目录就是构建目录,将文件发给守护进程
    ``` Dockerfile FROM centos MAINTAINER ruofei RUN mkdir /usr/local/test EXPOSE 80 ```
    ``` docker build --no-cache -t="haha/no-cache". docker images docker build -t "haha/use-cache" . ```
    #### history 查看镜像构建过程 ``` docker history haha/use-cache ```
    ### Dockerfile
    #####ENV 环境变量的设置,设置完,启动容器后使用env命令查看: ``` env
    #输出例子 HOSTNAME=b123876429ce OLDPWD=/opt/spark-1.6.0-bin-hadoop2.6/bin PYTHON_VERSION=2.7.5 ```
    也可以使用docker -e “<key>:<value>”传入环境变量
    ##### WORKDIR 工作目录,类似cd命令去到工作的目录下面
    ##### CMD & ENTRYPOINT CMD:容器运行时指定运行命令,可被用户覆盖;ENTRYPOINT:容器启动时指定默认运行命令,不可被用户指定参数被覆盖,多个ENTRYPOINT,最后一个成立。
    ##### ARG 指定参数让用户docker build --build-arg 将参数传入
    ``` 如果ARG指定了一个默认值并且在构建期间没有传递值过去,那么就使用默认值。 ARG变量定义从在Dockerfile定义的行生效,而不是从在命令行参数的使用或其它地方。 ```
    ``` FROM busybox USER ${user:-some_user} ARG user USER $user ... ```
    使用如下命令构建: ``` docker build --build-arg user=haha_user -f path_Dockerfile ``` ps:第一个传入的user值为-some_user,后面被用户传入的haha_user覆盖了。注意不要传入秘钥等隐私数据,因为可以通过docker history查看
    ### 集群
    #### web
    1. (1)先构建JDK镜像 在当前目录(/root/jdk) ```Dockerfile FROM centos MAINTAINER StephenLu ADD jdk-7u75-linux-x64.tar.gz /usr/local RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV JRE_HOME /usr/java/jdk1.7/jre ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar :$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH ```
    (2)将JDK拷贝过来当前目录 ``` cp ../jdk-7u75-linux-x64.tar.gz . ```
    (3)创建镜像 ``` docker build –t=”hadoop/jdk” . docker run --rm -it [image_id] ls /usr/local ```
    2. Dockerfile
    ``` FROM hadoop/jdk MAINTAINER StephenLu ADD appache-tomcat-7.0.62.tar.gz /usr/local WORKDIR /usr/local RUN mv apache-tomcat-7.0.62 tomcat7 WORKDIR /usr/local/tomcat7/bin EXPOSE 8080 ```
    (2) ``` docker run --rm -ti 0a2fb0c55cea ```
    (3) ``` docker run --rm -P -it 0a2fb0c55cea /bin/bash ./startup.sh
    #测试 docker ps curl -XGET '192.168.66.217:007'
    # ./startup.sh在后台运行,docker以为容器内没运行进程就停调了 docker run –d –P hadop/tocat ./startup.sh
    # 使用调试模式启动tomcat docker run –d –P hadoop/tomcat ./catalina.sh run docker ps -l
    # 动态指定volume docker run -d -P -v /usr/local/yf_test:/usr/local/tomcat7/webapp -p 8080:8080 hadoop/tomcat ./catalina.sh run docker ps
    # 页面访问 ip:port/haha/a.txt ``` #### Redis 1.单机 Dockerfile ``` ```
    2.集群 #### spark #### hadoop #### tensorflow 使用docker-compose 0.安装docker-compose ``` pip install docker-compose ```
    1.创建yml文件docker-compose.yml ``` version: '2' services: jupyter: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "8888:8888" volumes: - "/tmp/tensorflow_logs" - "./notebooks:/root/notebooks" command: - "/run_jupyter.sh" - "/root/notebooks" tensorboard: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "6006:6006" volumes_from: - jupyter command: - "tensorboard" - "--logdir" - "/tmp/tensorflow_logs" - "--host" - "0.0.0.0" ```
    2.启动运行环境 ``` docker-compose up -d ```
    3.检查 ``` docker-compose ps ```
    4.使用环境 http://127.0.0.1:8888/tree
    获取镜像 ``` docker pull floydhub/dl-docker:cpu
    ``` 运行 ``` docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu jupyter notebook (docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu tensorboard --logdir /tmp/tensorflow_logs --host 0.0.0.0)
    #检查,浏览器登录0.0.0.0:8888,查看jupyter notbook;0.0.0.0:6006,查看tensorbo docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash ```
    查看版本
    ``` import tensorflow as tf import keras tf.__version__
    #0.8.0 print keras.__version__
    #1.0.3 th.__version__
    #0.8.2 caffe.__version__
    #'1.0.0-rc3'
    一边喊着救命,一边享受沉沦。
  • 相关阅读:
    Visual C# 2005中编写Socket网络程序
    [ASP.NET缓存BUG]这几天遇到的头痛问题之一,晚上遇到终于解决一劳永逸
    检测远程URL是否存在的三种方法<转>
    C#开源资源大汇总
    Asp.Net中动态页面转静态页面
    开发人员必进的网站
    基于反向代理的Web缓存加速——可缓存的CMS系统设计
    解决MVC3 服务器无法在已发送 HTTP 标头之后设置状态 问题
    HyperLink 控件控制图片宽度高度的几种方法
    C#进程注入
  • 原文地址:https://www.cnblogs.com/fast-walking/p/8984605.html
Copyright © 2020-2023  润新知