Docker入门的一点补充

入门的大部分知识看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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值