docker 安装
直接从源里面下载的,yum install 或者 apt-get install
docker 使用
下载镜像
docker pull 镜像名:(此处不接版本号则自动为 latest 版本)
运行容器
方法1(生成并运行新容器):docker run -it image'id /bin/bash(此处是指定交互方式,当然不指定也可以)
方法2(运行已存在容器):docker start container's id --> attach containers's id /bin/bash
终止容器
docker stop containers'id
挂载本地文件夹到容器
方法1(在新生成的容器中挂载):docker run -it -v 本机需挂载文件夹绝对地址:容器中挂载的绝对地址 容器 id /bin/bash
制作镜像
使用已有容器提交镜像: docker commit -m "-m表示需要说明的信息"-a "-a表示作者名" lianup/centos(用户名/仓库名):v1(版本号)
操作完毕后,使用 docker images 可看见自己制作的镜像
上传镜像
前提工作:docker login
docker push 镜像名称
映射端口
方法一:docker run -dit -p(指定端口) 8080(本机端口号):8080(容器端口号) 容器名字
方法二:docker run -dit -p(指定端口) 127.0.0.1:8080(本机ip+端口号):8080(容器端口号) 容器名字
我用方法二的时候会报错,错误信息如下:
Error response from daemon: driver failed programming external connectivity on endpoint inspiring_wescoff (632a69c06c97259b0394888f3b2c8c8124ca64b1f009e087830a9774aaef8bff): Error starting userland proxy: listen tcp 148.70.233.189:7777: bind: cannot assign requested address.
好像是指绑定不了本机的ip和端口,但是8080并未被占用,很奇怪.
用第一种方法后,进入运行的容器,运行自己的java程序,能够使用服务器公网ip访问.demo成功!
PS:之前用还用了Dockerfile来定制镜像,但是这样子貌似比较麻烦,因为要把jdk和tomcat都带进去.
遇到的问题
1.容器一启动就秒退
docker容器持续启动需要有前台线程的位置,故要在run 后加 -dit,意味着前后台交互,才可以使得容器不终止.
2.docker 容器端口映射的问题
如果容器开启了某个服务,例如端口为8080,本机端口也为8080,那么要小心如果容器还在后台运行,又在本机运行同一个服务的情况.请求会被发送到容器里面的服务,而不是本机的服务.
常用 docker 指令
docker inspect 容器名/镜像名 : 查看容器/镜像信息