入门的大部分知识看http://www.runoob.com/docker/docker-tutorial.html
Dockerfile的格式命令在https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html这篇博客大部分都可以查到
还有部署项目看就已经足https://www.cnblogs.com/xuwenjin/p/9032540.html够了,里面有一些漏的我就在这里补充一下
1.镜像的删除,先删除镜像对应的容器,容器删完了再删除镜像
对应的指令是 docker rm 容器id(docker ps -a 可以查询容器列表)
docker rmi 镜像id(docker images 可以查询到镜像列表)
2.容器的批量删除/停止
docker rm/stop $(docker ps -aq)
3.window系统无法对docker容器端口映射
因为图方便,我是直接在window装了docker,在生成容器时,对容器进行了端口映射,然后用localhost:映射端口连接时,老是连接不了
后来看了这篇 https://www.cnblogs.com/hypnus-ly/p/8683215.html 才知道答案
因为docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows
所以可以用docker-machine ip 查Linux的ip是多少(192.168.99.100),然后再用192.168.99.100:端口号就能成功显示了
4.Dockerfile文件创建需要在Docker系统中创建,不能直接创建一个txt文件命名为Dockerfile(因为我是Window系统),不然的话会报错
5.Dockerfile中EXPOSE属性的作用
作用:指定容器需要映射到宿主机器的端口
例子:比如说我现在有两个应用(Mysql跟Oracle),分别是8080跟1521,我这样写
#在Dockerfile里这样写
EXPOSE 8080
EXPORT 1521
然后在生成容器时,这样写
docker run -p host_port1:8080 -p host_port2:1521 -p image
然后我们在访问时,直接就宿主机IP:host_port1这样访问就可以了
总结:EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p选项。
意义:端口映射是docker比较重要的一个功能,原因在于我们每次运行容器的时候容器的IP地址不能指定而是在桥接网卡的地址范围内随机生成的。宿主机器的IP地址是固定的,我们可以将容器的端口的映射到宿主机器上的一个端口,免去每次访问容器中的某个服务时都要查看容器的IP的地址。对于一个运行的容器,可以使用docker port加上容器中需要映射的端口和容器的ID来查看该端口号在宿主机器上的映射端口。
6.Docker run -v 参数的作用(用于添加数据卷)
把持久化的数据存到物理机
-v <宿主机目录>:<容器目录>
比如说我这样写 docker run --name redisTest -p 6379:6379 -v /c/Users/it_dept/redis/data:/data -d redis:3.2 redis-server --appendonly yes
就会主机的/c/Users/it_dept/redis/data和docker 中的目录/data 建立map 关系
6.1经过测试,我有一个Mysql容器,是没有挂载数据券的
容器的关闭跟重新启动,MysqL容器内的自建数据库的数据不会丢失
但是如果宿主机重启,会导致容器的数据丢失
但是容器内自建的文件发现并不会丢失。
7.Window上传文件到Docker容器内
docker cp Window文件路径 容器名:容器内要存放该文件的路径
例 docker cp apache-hive.tar.gz Master:/usr/local/hiveTest
8.容器打包成镜像并且推到公共仓库
1.docker commit 容器名称 镜像名称:Tag名
docker commit hadoop-test hadoop-test:v1
2.先在https://hub.docker.com/注册个帐号
3.本地登录docker
docker login -u 帐号名 -p 密码
看到Login Succeeded
4.docker push 镜像名:Tag名时,提示
docker push error “denied: requested access to the resource is denied”
解决:docker tag 镜像名:Tag名 帐号名/镜像名:Tag名
docker tag hadoop-test:v1 838036089/hadoop-test:v1
然后再docker push 帐号名/镜像名:Tag名就可以推成功了
9.docker容器启动失败又没打印日志
docker start 容器ID 一直启动不起来 通过 docker ps -a 看是有启动,但马上退出了
用docker logs 容器ID也没输出日志
查了下资料,说如果基础镜像,没运行任何进程,肯定会马上退出
创建容器的命令如下
docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq
如果我以这样的命令创建,-d 变成 -itd 就不会有这样的问题
docker run -itd -p 9876:9876 --name rmqserver foxiswho/rocketmq