• docker笔记


    实验基于Ubuntu 16.04下的docker

    1. 安装docker:apt-get install docker,启动docker服务:sudo service docker start

    2. 如果启动了docker,但是执行其他命令时遇到“Cannot connect to the Docker daemon. Is the docker daemon running on this host”,可能是因为没有使用sudo。

    3. 入门命令

       ##########################################
       # hello,world
       ##########
       # hello,world
       docker run ubuntu:15.10 /bin/echo "Hello world"
       
       # 交互式命令
       # -t:在新容器内指定一个伪终端或终端。
       # -i:允许你对容器内的标准输入 (STDIN) 进行交互。
       docker run -i -t ubuntu:15.10 /bin/bash
       
       # 后台模式启动容器
       docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
       
       # 查看正在运行的容器
       docker ps
       
       # 查看容器输出的日志
       docker logs d345a    
       
       # 停止容器
       docker stop d345a
       
       ##########################################
       # 容器
       ##########
       # 查看docker命令帮助
       docker stats --help
       
       # 运行一个web应用
       # -d 后台运行
       # -P 将容器内部的网络端口映射到主机上,默认5000:32769
       docker run -d -P training/webapp python app.py
       # 容器内部的5000映射到本地host的5000
       docker run -d -P 5000:5000 training/webapp python app.py
       
       # 查看端口映射
       docker port 7a38a1
       
       # 使用类似tail -f将容器内部的标准输出
       docker logs -f a7893d
      
       # 查看容器内部运行的进程
       docker top 7a38b2
      
       # 查看docker容器的状态和内部信息
       docker inspect 7a234b1
      
       # 停止、启动、移除容器(移除容器时,容器必须是停止的)
       docker stop/start/rm 78da2b
       
       ##########################################
       # 镜像
       ##########
       # 列出镜像
       docker images
       
       # 获取新的镜像
       docker pull ubuntu:13.10
       
       # 搜索镜像,https://hub.docker.com/
       docker search httpd
       # OFFICAL:是否为官方
       
       # 更新镜像
       docker run -t -i centos /bin/bash
       # 进入bash后执行yum update,等待更新完成
       # 更改完成后,进行版本的提交
       docker commit -m="has update" -a="作者" e23bi33a myname/centos:v2
      
       # 构建镜像,编写Dockerfile
       runoob@runoob:~$ cat Dockerfile 
       FROM    centos:6.7
       MAINTAINER      Fisher "fisher@sudops.com"
       
       RUN     /bin/echo 'root:123456' |chpasswd
       RUN     useradd runoob
       RUN     /bin/echo 'runoob:123456' |chpasswd
       RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
       EXPOSE  22
       EXPOSE  80
       CMD     /usr/sbin/sshd -D
       
       每一个指令都会在镜像上创建一个新的层,每一个指定的前缀必须大写
       FROM指令使用那个镜像源
       RUN指令告诉docker在镜像内执行指令
       
       # 构建
       docker build -t myname/mycentos67 .
       # -t 指定目标镜像名
       # . Dockerfile文件所在目录
       
       # 打tag
       docker tag 78ai38a myname/mycentos67:dev
      
       ##########################################
       # 容器连接
       ##########
       docker run -d -P centos /bin/echo "hello"
       docker run -d -p 5000:5000 centos /bin/echo "hello"
       # -P :是容器内部端口随机映射到主机的高端口
       # -p : 是容器内部端口绑定到指定的主机端口
      
       docker run -d -p 127.0.0.1:5001:5002 centos /bin/echo "hello"
       # 这样我们就可以通过访问127.0.0.1:5001来访问容器的5002端口
      
       docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
       # UDP端口映射
      
       # docker port h43e34
       
       # 命名
       docker run -d -P --name runoob training/webapp
      
    4. tomcat映射端口时报错:iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8889 -j DNAT --to-destination

       # pkill docker
       # 原链接直接杀进程有点暴力,改为调用stop
       service docker stop
       
       # 清空nat的防火墙规则
       # -F, --flush [chain]
       #      Flush the selected chain (all the chains in the table if none is given).  This is  equivalent  to
       #      deleting all the rules one by one.
       iptables -t nat -F
       
       # 关闭docker0网卡
       ifconfig docker0 down
       
       # brctl - ethernet bridge administration
       # The command brctl delbr <name> deletes the instance <name> of the ethernet bridge. 
       # The network interface  corresponding to the bridge must be down before it can be deleted!
       # 删除桥接
       brctl delbr docker0
       
       # 启动docker
       service docker start
      
       # 参考文章: http://www.linuxidc.com/Linux/2015-02/113141.htm
      
    5. 安装elasticsearch 2.4.1

      nshou/elasticsearch-kibana

       docker pull nshou/elasticsearch-kibana:kibana4
       docker run -d -p 9200:9200 -p 5601:5601 -p 9300:9300 --name="ek" nshou/elasticsearch-kibana:kibana4
      

      遇到一个问题,无法使用jar客户端连接es的9300端口,首先排除服务端与客户端版本不一致的问题(可参考这篇),然后需要修改es的配置。
      通过docker -i -t启动进入到bash,修改.yml里的network.publish_host为docker所在主机的外部ip,需要注意这个参数的意义。

       network.bind_host: 192.168.0.1
       设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。
       
       network.publish_host: 192.168.0.1
       设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
       
       network.host: 192.168.0.1
       这个参数是用来同时设置bind_host和publish_host上面两个参数。
       
       transport.tcp.port: 9300
       设置节点之间交互的tcp端口,默认是9300。
       
       http.port: 9200
       设置对外服务的http端口,默认为9200。
      

      参考

      之后用docker commit生成一个新的版本,然后再启动(-c后的参数是从之前启动的docker inspect里找到的,暂时不知道有什么更好的办法)

       docker run -d -p 9200:9200 -p 5601:5601 -p 9300:9300 my/es:v2 /bin/sh -c 'elasticsearch/bin/elasticsearch --es.logger.level=OFF --network.host=0.0.0.0 & kibana/bin/kibana -Q'
      
    6. mysql

      https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html
      https://hub.docker.com/r/mysql/mysql-server/

      update user set host='%' where user='root';
      flush privileges;
      

      install mysql, and set root pwd, and set character-set

      sudo docker pull mysql:5.6.38    
      sudo docker run --name mysql5638 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.38 --character-set-server=utf8mb4
      
    7. 给运行中的容器添加端口映射

       #方法一:通过设置iptables
       docker inspect 'containerid' | grep IPAddress
       # 将容器的8000端口映射到主机的8001端口
       iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
      
       #方法二:
       #提交一个运行中的容器为镜像
       docker commit containerid aaa/bbb
       docker run -d -p 8000:80 aaa/bbb /bin/bash
      
    8. 进入正在运行的容器(1.3.X版本之后)

       sudo docker exec -it 775c7c9ee1e1 /bin/bash
      
    9. 复制文件

      从主机复制到容器```sudo docker cp host_path containerID:container_path```
      从容器复制到主机```sudo docker cp containerID:container_path host_path```
      
    10. rabbitmq
      启动容器后,可以浏览器中访问http://localhost:15672来查看控制台信息
      默认的用户名:guest,密码:guest

         docker pull rabbitmq:management
         docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management
      

    参考:
    docker-hello-world

  • 相关阅读:
    396 Rotate Function 旋转函数
    395 Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子串
    394 Decode String 字符串解码
    393 UTF-8 Validation UTF-8 编码验证
    392 Is Subsequence 判断子序列
    391 Perfect Rectangle 完美矩形
    390 Elimination Game 淘汰游戏
    389 Find the Difference 找不同
    388 Longest Absolute File Path 最长的绝对文件路径
    387 First Unique Character in a String 字符串中的第一个唯一字符
  • 原文地址:https://www.cnblogs.com/liqipeng/p/7572613.html
Copyright © 2020-2023  润新知