docker笔记
实验基于Ubuntu 16.04下的docker
-
安装docker:apt-get install docker,启动docker服务:sudo service docker start
-
如果启动了docker,但是执行其他命令时遇到“Cannot connect to the Docker daemon. Is the docker daemon running on this host”,可能是因为没有使用sudo。
-
入门命令
##########################################
# 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
-
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
-
安装elasticsearch 2.4.1
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'
-
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 -
给运行中的容器添加端口映射
方法一:通过设置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 -
进入正在运行的容器(1.3.X版本之后)
sudo docker exec -it 775c7c9ee1e1 /bin/bash
-
复制文件
从主机复制到容器
sudo docker cp host_path containerID:container_path
从容器复制到主机sudo docker cp containerID:container_path host_path -
rabbitmq
启动容器后,可以浏览器中访问http://localhost:15672来查看控制台信息
默认的用户名:guest,密码:guestdocker pull rabbitmq:management docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management

浙公网安备 33010602011771号