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 deletes the instance 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

posted @ 2017-09-22 02:41  liqipeng  阅读(394)  评论(0)    收藏  举报