• 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'
    一边喊着救命,一边享受沉沦。
  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/fast-walking/p/8984605.html
Copyright © 2020-2023  润新知